update to 1.4.7 and change repositoyry layout as this is easier to maintain
authorS.Çağlar Onur <caglar@cs.princeton.edu>
Mon, 5 Apr 2010 15:38:39 +0000 (15:38 +0000)
committerS.Çağlar Onur <caglar@cs.princeton.edu>
Mon, 5 Apr 2010 15:38:39 +0000 (15:38 +0000)
339 files changed:
COPYING [deleted file]
INCOMPATIBILITIES [deleted file]
INSTALL [deleted file]
Makefile [new file with mode: 0644]
Makefile.am [deleted file]
Makefile.in [deleted file]
aclocal.m4 [deleted file]
compile [deleted file]
config.guess [deleted file]
config.h.in [deleted file]
config.sub [deleted file]
configure [deleted file]
configure.ac [deleted file]
copy-xid.patch [new file with mode: 0644]
depcomp [deleted file]
extensions/GNUmakefile.in [deleted file]
extensions/dscp_helper.c [deleted file]
extensions/libip6t_HL.c [deleted file]
extensions/libip6t_HL.man [deleted file]
extensions/libip6t_LOG.c [deleted file]
extensions/libip6t_LOG.man [deleted file]
extensions/libip6t_REJECT.c [deleted file]
extensions/libip6t_REJECT.man [deleted file]
extensions/libip6t_ah.c [deleted file]
extensions/libip6t_ah.man [deleted file]
extensions/libip6t_dst.c [deleted file]
extensions/libip6t_dst.man [deleted file]
extensions/libip6t_eui64.c [deleted file]
extensions/libip6t_eui64.man [deleted file]
extensions/libip6t_frag.c [deleted file]
extensions/libip6t_frag.man [deleted file]
extensions/libip6t_hbh.c [deleted file]
extensions/libip6t_hbh.man [deleted file]
extensions/libip6t_hl.c [deleted file]
extensions/libip6t_hl.man [deleted file]
extensions/libip6t_icmp6.c [deleted file]
extensions/libip6t_icmp6.man [deleted file]
extensions/libip6t_ipv6header.c [deleted file]
extensions/libip6t_ipv6header.man [deleted file]
extensions/libip6t_mh.c [deleted file]
extensions/libip6t_mh.man [deleted file]
extensions/libip6t_policy.c [deleted file]
extensions/libip6t_rt.c [deleted file]
extensions/libip6t_rt.man [deleted file]
extensions/libipt_CLUSTERIP.c [deleted file]
extensions/libipt_CLUSTERIP.man [deleted file]
extensions/libipt_DNAT.c [deleted file]
extensions/libipt_DNAT.man [deleted file]
extensions/libipt_ECN.c [deleted file]
extensions/libipt_ECN.man [deleted file]
extensions/libipt_LOG.c [deleted file]
extensions/libipt_LOG.man [deleted file]
extensions/libipt_MASQUERADE.c [deleted file]
extensions/libipt_MASQUERADE.man [deleted file]
extensions/libipt_MIRROR.c [deleted file]
extensions/libipt_MIRROR.man [deleted file]
extensions/libipt_NETMAP.c [deleted file]
extensions/libipt_NETMAP.man [deleted file]
extensions/libipt_REDIRECT.c [deleted file]
extensions/libipt_REDIRECT.man [deleted file]
extensions/libipt_REJECT.c [deleted file]
extensions/libipt_REJECT.man [deleted file]
extensions/libipt_SAME.c [deleted file]
extensions/libipt_SAME.man [deleted file]
extensions/libipt_SET.c [deleted file]
extensions/libipt_SET.man [deleted file]
extensions/libipt_SNAT.c [deleted file]
extensions/libipt_SNAT.man [deleted file]
extensions/libipt_TTL.c [deleted file]
extensions/libipt_TTL.man [deleted file]
extensions/libipt_ULOG.c [deleted file]
extensions/libipt_ULOG.man [deleted file]
extensions/libipt_addrtype.c [deleted file]
extensions/libipt_addrtype.man [deleted file]
extensions/libipt_ah.c [deleted file]
extensions/libipt_ah.man [deleted file]
extensions/libipt_ecn.c [deleted file]
extensions/libipt_ecn.man [deleted file]
extensions/libipt_icmp.c [deleted file]
extensions/libipt_icmp.man [deleted file]
extensions/libipt_policy.c [deleted file]
extensions/libipt_realm.c [deleted file]
extensions/libipt_realm.man [deleted file]
extensions/libipt_recent.c [deleted file]
extensions/libipt_recent.man [deleted file]
extensions/libipt_set.c [deleted file]
extensions/libipt_set.h [deleted file]
extensions/libipt_set.man [deleted file]
extensions/libipt_ttl.c [deleted file]
extensions/libipt_ttl.man [deleted file]
extensions/libipt_unclean.c [deleted file]
extensions/libipt_unclean.man [deleted file]
extensions/libxt_CLASSIFY.c [deleted file]
extensions/libxt_CLASSIFY.c.orig [deleted file]
extensions/libxt_CLASSIFY.man [deleted file]
extensions/libxt_CONNMARK.c [deleted file]
extensions/libxt_CONNMARK.man [deleted file]
extensions/libxt_CONNSECMARK.c [deleted file]
extensions/libxt_CONNSECMARK.man [deleted file]
extensions/libxt_DSCP.c [deleted file]
extensions/libxt_DSCP.man [deleted file]
extensions/libxt_MARK.c [deleted file]
extensions/libxt_MARK.c.orig [deleted file]
extensions/libxt_MARK.man [deleted file]
extensions/libxt_NFLOG.c [deleted file]
extensions/libxt_NFLOG.man [deleted file]
extensions/libxt_NFQUEUE.c [deleted file]
extensions/libxt_NFQUEUE.man [deleted file]
extensions/libxt_NOTRACK.c [deleted file]
extensions/libxt_NOTRACK.man [deleted file]
extensions/libxt_RATEEST.c [deleted file]
extensions/libxt_RATEEST.man [deleted file]
extensions/libxt_SECMARK.c [deleted file]
extensions/libxt_SECMARK.man [deleted file]
extensions/libxt_TCPMSS.c [deleted file]
extensions/libxt_TCPMSS.man [deleted file]
extensions/libxt_TCPOPTSTRIP.c [deleted file]
extensions/libxt_TCPOPTSTRIP.man [deleted file]
extensions/libxt_TOS.c [deleted file]
extensions/libxt_TOS.man [deleted file]
extensions/libxt_TRACE.c [deleted file]
extensions/libxt_TRACE.man [deleted file]
extensions/libxt_comment.c [deleted file]
extensions/libxt_comment.man [deleted file]
extensions/libxt_connbytes.c [deleted file]
extensions/libxt_connbytes.man [deleted file]
extensions/libxt_connlimit.c [deleted file]
extensions/libxt_connlimit.man [deleted file]
extensions/libxt_connmark.c [deleted file]
extensions/libxt_connmark.man [deleted file]
extensions/libxt_conntrack.c [deleted file]
extensions/libxt_conntrack.man [deleted file]
extensions/libxt_dccp.c [deleted file]
extensions/libxt_dccp.man [deleted file]
extensions/libxt_dscp.c [deleted file]
extensions/libxt_dscp.man [deleted file]
extensions/libxt_esp.c [deleted file]
extensions/libxt_esp.man [deleted file]
extensions/libxt_hashlimit.c [deleted file]
extensions/libxt_hashlimit.man [deleted file]
extensions/libxt_helper.c [deleted file]
extensions/libxt_helper.man [deleted file]
extensions/libxt_iprange.c [deleted file]
extensions/libxt_iprange.man [deleted file]
extensions/libxt_length.c [deleted file]
extensions/libxt_length.man [deleted file]
extensions/libxt_limit.c [deleted file]
extensions/libxt_limit.man [deleted file]
extensions/libxt_mac.c [deleted file]
extensions/libxt_mac.man [deleted file]
extensions/libxt_mark.c [deleted file]
extensions/libxt_mark.man [deleted file]
extensions/libxt_multiport.c [deleted file]
extensions/libxt_multiport.man [deleted file]
extensions/libxt_owner.c [deleted file]
extensions/libxt_owner.man [deleted file]
extensions/libxt_physdev.c [deleted file]
extensions/libxt_physdev.man [deleted file]
extensions/libxt_pkttype.c [deleted file]
extensions/libxt_pkttype.man [deleted file]
extensions/libxt_policy.man [deleted file]
extensions/libxt_quota.c [deleted file]
extensions/libxt_quota.man [deleted file]
extensions/libxt_rateest.c [deleted file]
extensions/libxt_sctp.c [deleted file]
extensions/libxt_sctp.man [deleted file]
extensions/libxt_standard.c [deleted file]
extensions/libxt_state.c [deleted file]
extensions/libxt_state.man [deleted file]
extensions/libxt_statistic.c [deleted file]
extensions/libxt_statistic.man [deleted file]
extensions/libxt_string.c [deleted file]
extensions/libxt_string.man [deleted file]
extensions/libxt_tcp.c [deleted file]
extensions/libxt_tcp.man [deleted file]
extensions/libxt_tcpmss.c [deleted file]
extensions/libxt_tcpmss.man [deleted file]
extensions/libxt_time.c [deleted file]
extensions/libxt_time.man [deleted file]
extensions/libxt_tos.c [deleted file]
extensions/libxt_tos.man [deleted file]
extensions/libxt_u32.c [deleted file]
extensions/libxt_u32.man [deleted file]
extensions/libxt_udp.c [deleted file]
extensions/libxt_udp.man [deleted file]
extensions/tos_values.c [deleted file]
include/ip6tables.h [deleted file]
include/iptables.h [deleted file]
include/libipq/libipq.h [deleted file]
include/libiptc/ipt_kernel_headers.h [deleted file]
include/libiptc/libip6tc.h [deleted file]
include/libiptc/libiptc.h [deleted file]
include/libiptc/libxtc.h [deleted file]
include/libipulog/libipulog.h [deleted file]
include/linux/netfilter.h [deleted file]
include/linux/netfilter/nf_conntrack_common.h [deleted file]
include/linux/netfilter/nf_conntrack_tuple.h [deleted file]
include/linux/netfilter/nf_conntrack_tuple_common.h [deleted file]
include/linux/netfilter/nf_nat.h [deleted file]
include/linux/netfilter/x_tables.h [deleted file]
include/linux/netfilter/xt_CLASSIFY.h [deleted file]
include/linux/netfilter/xt_CLASSIFY.h.orig [deleted file]
include/linux/netfilter/xt_CONNMARK.h [deleted file]
include/linux/netfilter/xt_CONNSECMARK.h [deleted file]
include/linux/netfilter/xt_DSCP.h [deleted file]
include/linux/netfilter/xt_MARK.h [deleted file]
include/linux/netfilter/xt_MARK.h.orig [deleted file]
include/linux/netfilter/xt_NFLOG.h [deleted file]
include/linux/netfilter/xt_NFQUEUE.h [deleted file]
include/linux/netfilter/xt_RATEEST.h [deleted file]
include/linux/netfilter/xt_SECMARK.h [deleted file]
include/linux/netfilter/xt_TCPMSS.h [deleted file]
include/linux/netfilter/xt_TCPOPTSTRIP.h [deleted file]
include/linux/netfilter/xt_comment.h [deleted file]
include/linux/netfilter/xt_connbytes.h [deleted file]
include/linux/netfilter/xt_connlimit.h [deleted file]
include/linux/netfilter/xt_connmark.h [deleted file]
include/linux/netfilter/xt_conntrack.h [deleted file]
include/linux/netfilter/xt_dccp.h [deleted file]
include/linux/netfilter/xt_dscp.h [deleted file]
include/linux/netfilter/xt_esp.h [deleted file]
include/linux/netfilter/xt_hashlimit.h [deleted file]
include/linux/netfilter/xt_helper.h [deleted file]
include/linux/netfilter/xt_iprange.h [deleted file]
include/linux/netfilter/xt_length.h [deleted file]
include/linux/netfilter/xt_limit.h [deleted file]
include/linux/netfilter/xt_mac.h [deleted file]
include/linux/netfilter/xt_mark.h [deleted file]
include/linux/netfilter/xt_multiport.h [deleted file]
include/linux/netfilter/xt_owner.h [deleted file]
include/linux/netfilter/xt_physdev.h [deleted file]
include/linux/netfilter/xt_pkttype.h [deleted file]
include/linux/netfilter/xt_policy.h [deleted file]
include/linux/netfilter/xt_quota.h [deleted file]
include/linux/netfilter/xt_rateest.h [deleted file]
include/linux/netfilter/xt_realm.h [deleted file]
include/linux/netfilter/xt_sctp.h [deleted file]
include/linux/netfilter/xt_state.h [deleted file]
include/linux/netfilter/xt_statistic.h [deleted file]
include/linux/netfilter/xt_string.h [deleted file]
include/linux/netfilter/xt_tcpmss.h [deleted file]
include/linux/netfilter/xt_tcpudp.h [deleted file]
include/linux/netfilter/xt_time.h [deleted file]
include/linux/netfilter/xt_u32.h [deleted file]
include/linux/netfilter_ipv4.h [deleted file]
include/linux/netfilter_ipv4/ip_set.h [deleted file]
include/linux/netfilter_ipv4/ip_tables.h [deleted file]
include/linux/netfilter_ipv4/ipt_CLUSTERIP.h [deleted file]
include/linux/netfilter_ipv4/ipt_DSCP.h [deleted file]
include/linux/netfilter_ipv4/ipt_ECN.h [deleted file]
include/linux/netfilter_ipv4/ipt_FTOS.h [deleted file]
include/linux/netfilter_ipv4/ipt_LOG.h [deleted file]
include/linux/netfilter_ipv4/ipt_REJECT.h [deleted file]
include/linux/netfilter_ipv4/ipt_SAME.h [deleted file]
include/linux/netfilter_ipv4/ipt_TOS.h [deleted file]
include/linux/netfilter_ipv4/ipt_TTL.h [deleted file]
include/linux/netfilter_ipv4/ipt_ULOG.h [deleted file]
include/linux/netfilter_ipv4/ipt_addrtype.h [deleted file]
include/linux/netfilter_ipv4/ipt_ah.h [deleted file]
include/linux/netfilter_ipv4/ipt_connlimit.h [deleted file]
include/linux/netfilter_ipv4/ipt_dscp.h [deleted file]
include/linux/netfilter_ipv4/ipt_dstlimit.h [deleted file]
include/linux/netfilter_ipv4/ipt_ecn.h [deleted file]
include/linux/netfilter_ipv4/ipt_iprange.h [deleted file]
include/linux/netfilter_ipv4/ipt_owner.h [deleted file]
include/linux/netfilter_ipv4/ipt_policy.h [deleted file]
include/linux/netfilter_ipv4/ipt_realm.h [deleted file]
include/linux/netfilter_ipv4/ipt_recent.h [deleted file]
include/linux/netfilter_ipv4/ipt_rpc.h [deleted file]
include/linux/netfilter_ipv4/ipt_set.h [deleted file]
include/linux/netfilter_ipv4/ipt_tos.h [deleted file]
include/linux/netfilter_ipv4/ipt_ttl.h [deleted file]
include/linux/netfilter_ipv6.h [deleted file]
include/linux/netfilter_ipv6/ip6_tables.h [deleted file]
include/linux/netfilter_ipv6/ip6t_HL.h [deleted file]
include/linux/netfilter_ipv6/ip6t_LOG.h [deleted file]
include/linux/netfilter_ipv6/ip6t_REJECT.h [deleted file]
include/linux/netfilter_ipv6/ip6t_TCPMSS.h [deleted file]
include/linux/netfilter_ipv6/ip6t_ah.h [deleted file]
include/linux/netfilter_ipv6/ip6t_frag.h [deleted file]
include/linux/netfilter_ipv6/ip6t_hl.h [deleted file]
include/linux/netfilter_ipv6/ip6t_ipv6header.h [deleted file]
include/linux/netfilter_ipv6/ip6t_mh.h [deleted file]
include/linux/netfilter_ipv6/ip6t_opts.h [deleted file]
include/linux/netfilter_ipv6/ip6t_owner.h [deleted file]
include/linux/netfilter_ipv6/ip6t_policy.h [deleted file]
include/linux/netfilter_ipv6/ip6t_rt.h [deleted file]
include/linux/types.h [deleted file]
include/xtables.h.in [deleted file]
include/xtables/internal.h [deleted file]
install-sh [deleted file]
ip6tables-multi.c [deleted file]
ip6tables-multi.h [deleted file]
ip6tables-restore.8 [deleted file]
ip6tables-restore.c [deleted file]
ip6tables-save.8 [deleted file]
ip6tables-save.c [deleted file]
ip6tables-standalone.c [deleted file]
ip6tables.8.in [deleted file]
ip6tables.c [deleted file]
iptables-apply [deleted file]
iptables-apply.8 [deleted file]
iptables-config
iptables-multi.c [deleted file]
iptables-multi.h [deleted file]
iptables-restore.8 [deleted file]
iptables-restore.c [deleted file]
iptables-save.8 [deleted file]
iptables-save.c [deleted file]
iptables-standalone.c [deleted file]
iptables-xml.8 [deleted file]
iptables-xml.c [deleted file]
iptables.8.in [deleted file]
iptables.c [deleted file]
iptables.init [changed mode: 0755->0644]
iptables.spec
iptables.xslt [deleted file]
libipq/Makefile.am [deleted file]
libipq/Makefile.in [deleted file]
libipq/ipq_create_handle.3 [deleted file]
libipq/ipq_destroy_handle.3 [deleted file]
libipq/ipq_errstr.3 [deleted file]
libipq/ipq_get_msgerr.3 [deleted file]
libipq/ipq_get_packet.3 [deleted file]
libipq/ipq_message_type.3 [deleted file]
libipq/ipq_perror.3 [deleted file]
libipq/ipq_read.3 [deleted file]
libipq/ipq_set_mode.3 [deleted file]
libipq/ipq_set_verdict.3 [deleted file]
libipq/libipq.3 [deleted file]
libipq/libipq.c [deleted file]
libiptc/libip4tc.c [deleted file]
libiptc/libip6tc.c [deleted file]
libiptc/libiptc.c [deleted file]
libiptc/linux_list.h [deleted file]
libiptc/linux_stddef.h [deleted file]
ltmain.sh [deleted file]
missing [deleted file]
xtables.c [deleted file]

diff --git a/COPYING b/COPYING
deleted file mode 100644 (file)
index a43ea21..0000000
--- a/COPYING
+++ /dev/null
@@ -1,339 +0,0 @@
-                   GNU GENERAL PUBLIC LICENSE
-                      Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-                          675 Mass Ave, Cambridge, MA 02139, USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                           Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-\f
-                   GNU GENERAL PUBLIC LICENSE
-   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-\f
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-\f
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-\f
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-                           NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-                    END OF TERMS AND CONDITIONS
-\f
-       Appendix: How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) 19yy  <name of author>
-
-    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 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, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-    Gnomovision version 69, Copyright (C) 19yy name of author
-    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  Here is a sample; alter the names:
-
-  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-  `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-  <signature of Ty Coon>, 1 April 1989
-  Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs.  If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library.  If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/INCOMPATIBILITIES b/INCOMPATIBILITIES
deleted file mode 100644 (file)
index ddb2408..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-INCOMPATIBILITIES:
-
-- The REJECT target has an '--reject-with admin-prohib' option which used
-  with kernels that do not support it, will result in a plain DROP instead
-  of REJECT.  Use with caution.
-  Kernels that do support it:
-       2.4 - since 2.4.22-pre9
-       2.6 - all
-
-- There are some issues related to upgrading from 1.2.x to 1.3.x on a system
-  with dynamic ruleset changes during runtime. (Please see 
-  https://bugzilla.netfilter.org/bugzilla/show_bug.cgi?id=334).
-  After upgrading from 1.2 to 1.3, it suggest go do an iptables-save, then
-  iptables-restore to ensure your dynamic rule changes continue to work.
diff --git a/INSTALL b/INSTALL
deleted file mode 100644 (file)
index 4a44989..0000000
--- a/INSTALL
+++ /dev/null
@@ -1,80 +0,0 @@
-Installation instructions for iptables
-======================================
-
-iptables uses the well-known configure(autotools) infrastructure.
-
-       $ ./configure
-       $ make
-       # make install
-
-
-Prerequisites
-=============
-
-       * no kernel-source required
-
-       * but obviously a compiler, glibc-devel and linux-kernel-headers
-         (/usr/include/linux)
-
-
-Configuring and compiling
-=========================
-
-./configure [options]
-
---prefix=
-
-       The prefix to put all installed files under. It defaults to
-       /usr/local, so the binaries will go into /usr/local/bin, sbin,
-       manpages into /usr/local/share/man, etc.
-
---with-xtlibdir=
-
-       The path to where Xtables extensions should be installed to. It
-       defaults to ${prefix}/libexec/xtables.
-
---enable-devel (or --disable-devel)
-
-       This option causes development files to be installed to
-       ${includedir}, which is needed for building additional packages,
-       such as Xtables-addons or other 3rd-party extensions.
-
-       It is enabled by default.
-
---enable-libipq
-
-       This option causes libipq to be installed into ${libdir} and
-       ${includedir}.
-
---enable-static
-
-       Enable building single standalone multipurpose binaries,
-       (iptables-static and ip6tables-static), which contain every
-       extension compiled-in (and does not support additional
-       extensions).
-
---with-ksource=
-
-       Xtables does not depend on kernel headers anymore, but you can
-       optionally specify a search path to include anyway. This is
-       probably only useful for development.
-
-If you want to enable debugging, use
-
-       ./configure CFLAGS="-ggdb3 -O0"
-
-(-O0 is used to turn off instruction reordering, which makes debugging
-much easier.)
-
-
-Other notes
-===========
-
-The make process will automatically build multipurpose binaries.
-These have the core (iptables), -save, -restore and -xml code
-compiled into one binary, but extensions remain as modules.
-
-If you want to build a statically linked version of the iptables binary,
-without the need for loading the plugins at runtime (e.g. for an
-embedded device or router-on-a-disk), you can use the --enable-static
-configure flag.
diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..3c3167f
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,62 @@
+# $Id$
+# $URL$
+#
+WEBFETCH               := wget
+SHA1SUM                        := sha1sum
+
+ALL                    += iptables
+iptables-URL           := http://www.netfilter.org/projects/iptables/files/iptables-1.4.7.tar.bz2
+iptables-SHA1SUM       := 825594a2c5017852b03ce441f592c67070b4b29c
+iptables               := $(notdir $(iptables-URL))
+
+all: $(ALL)
+.PHONY: all
+
+##############################
+define download_target
+$(1): $($(1))
+.PHONY: $($(1))
+$($(1)): 
+       @if [ ! -e "$($(1))" ] ; then echo "$(WEBFETCH) $($(1)-URL)" ; $(WEBFETCH) $($(1)-URL) ; fi
+       @if [ ! -e "$($(1))" ] ; then echo "Could not download source file: $($(1)) does not exist" ; exit 1 ; fi
+       @if test "$$$$($(SHA1SUM) $($(1)) | awk '{print $$$$1}')" != "$($(1)-SHA1SUM)" ; then \
+           echo "sha1sum of the downloaded $($(1)) does not match the one from 'Makefile'" ; \
+           echo "Local copy: $$$$($(SHA1SUM) $($(1)))" ; \
+           echo "In Makefile: $($(1)-SHA1SUM)" ; \
+           false ; \
+       else \
+           ls -l $($(1)) ; \
+       fi
+endef
+
+$(eval $(call download_target,iptables))
+
+sources: $(ALL) 
+.PHONY: sources
+
+####################
+# default - overridden by the build
+SPECFILE = iptables.spec
+
+PWD=$(shell pwd)
+PREPARCH ?= noarch
+RPMDIRDEFS = --define "_sourcedir $(PWD)" --define "_builddir $(PWD)" --define "_srcrpmdir $(PWD)" --define "_rpmdir $(PWD)"
+trees: sources
+       rpmbuild $(RPMDIRDEFS) $(RPMDEFS) --nodeps -bp --target $(PREPARCH) $(SPECFILE)
+
+srpm: sources
+       rpmbuild $(RPMDIRDEFS) $(RPMDEFS) --nodeps -bs $(SPECFILE)
+
+TARGET ?= $(shell uname -m)
+rpm: sources
+       rpmbuild $(RPMDIRDEFS) $(RPMDEFS) --nodeps --target $(TARGET) -bb $(SPECFILE)
+
+clean:
+       rm -f *.rpm *.tgz *.bz2 *.gz
+
+++%: varname=$(subst +,,$@)
+++%:
+       @echo "$(varname)=$($(varname))"
++%: varname=$(subst +,,$@)
++%:
+       @echo "$($(varname))"
diff --git a/Makefile.am b/Makefile.am
deleted file mode 100644 (file)
index 49edbf8..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-# -*- Makefile -*-
-
-AUTOMAKE_OPTIONS = foreign subdir-objects
-
-AM_CFLAGS        = ${regular_CFLAGS} -I${top_builddir}/include -I${top_srcdir}/include ${kinclude_CFLAGS}
-SUBDIRS         := extensions
-if ENABLE_LIBIPQ
-SUBDIRS         += libipq
-endif
-
-# libiptc
-libiptc_libiptc_a_SOURCES = libiptc/libip4tc.c libiptc/libip6tc.c
-
-# iptables, dynamic
-iptables_SOURCES          = iptables-standalone.c iptables.c xtables.c
-iptables_LDFLAGS          = -rdynamic
-iptables_LDADD            = -ldl -lm libiptc/libiptc.a extensions/libext4.a
-
-iptables_multi_SOURCES    = iptables-multi.c iptables-save.c \
-                            iptables-restore.c iptables-xml.c \
-                            iptables-standalone.c iptables.c xtables.c
-iptables_multi_CFLAGS     = ${AM_CFLAGS} -DIPTABLES_MULTI
-iptables_multi_LDFLAGS    = ${iptables_LDFLAGS}
-iptables_multi_LDADD      = ${iptables_LDADD}
-
-iptables_restore_SOURCES  = iptables-restore.c iptables.c xtables.c
-iptables_restore_LDFLAGS  = ${iptables_LDFLAGS}
-iptables_restore_LDADD    = ${iptables_LDADD}
-
-iptables_save_SOURCES     = iptables-save.c iptables.c xtables.c
-iptables_save_LDFLAGS     = ${iptables_LDFLAGS}
-iptables_save_LDADD       = ${iptables_LDADD}
-
-# iptables-multi, semi-static
-iptables_static_SOURCES   = ${iptables_multi_SOURCES}
-iptables_static_CFLAGS    = ${iptables_multi_CFLAGS} -DNO_SHARED_LIBS=1
-iptables_static_LDADD     = -lm libiptc/libiptc.a extensions/libext4.a
-
-iptables_xml_SOURCES      = iptables-xml.c
-
-# ip6tables, dynamic
-ip6tables_SOURCES         = ip6tables-standalone.c ip6tables.c xtables.c
-ip6tables_LDFLAGS         = -rdynamic
-ip6tables_LDADD           = -ldl -lm libiptc/libiptc.a extensions/libext6.a
-
-ip6tables_multi_SOURCES   = ip6tables-multi.c ip6tables-save.c \
-                            ip6tables-restore.c ip6tables-standalone.c \
-                            ip6tables.c xtables.c
-ip6tables_multi_CFLAGS    = ${AM_CFLAGS} -DIPTABLES_MULTI
-ip6tables_multi_LDFLAGS   = ${ip6tables_LDFLAGS}
-ip6tables_multi_LDADD     = ${ip6tables_LDADD}
-
-ip6tables_restore_SOURCES = ip6tables-restore.c ip6tables.c xtables.c
-ip6tables_restore_LDFLAGS = ${ip6tables_LDFLAGS}
-ip6tables_restore_LDADD   = ${ip6tables_LDADD}
-
-ip6tables_save_SOURCES    = ip6tables-save.c ip6tables.c xtables.c
-ip6tables_save_LDFLAGS    = ${ip6tables_LDFLAGS}
-ip6tables_save_LDADD      = ${ip6tables_LDADD}
-
-# iptables-multi, semi-static
-ip6tables_static_SOURCES    = ${ip6tables_multi_SOURCES}
-ip6tables_static_CFLAGS     = ${ip6tables_multi_CFLAGS} -DNO_SHARED_LIBS=1
-ip6tables_static_LDADD      = -lm libiptc/libiptc.a extensions/libext6.a
-
-noinst_LIBRARIES := libiptc/libiptc.a
-bin_PROGRAMS     := iptables-xml
-sbin_PROGRAMS    :=
-noinst_PROGRAMS  :=
-man_MANS         := iptables.8 iptables-restore.8 iptables-save.8 \
-                    iptables-xml.8 ip6tables.8 ip6tables-restore.8 \
-                    ip6tables-save.8
-CLEANFILES       := iptables.8 ip6tables.8
-if ENABLE_DEVEL
-include_HEADERS  := include/xtables.h include/iptables.h include/ip6tables.h
-iptcdir           = ${includedir}/libiptc
-iptc_HEADERS     := include/libiptc/libxtc.h \
-                    include/libiptc/ipt_kernel_headers.h
-endif
-
-if ENABLE_STATIC
-sbin_PROGRAMS += iptables-static ip6tables-static
-endif
-if ENABLE_SHARED
-sbin_PROGRAMS += iptables iptables-multi iptables-restore iptables-save \
-                 ip6tables ip6tables-multi ip6tables-restore ip6tables-save
-endif
-
-iptables.8: ${srcdir}/iptables.8.in extensions/matches4.man extensions/targets4.man
-       ${AM_VERBOSE_GEN} sed -e '/@MATCH@/ r extensions/matches4.man' -e '/@TARGET@/ r extensions/targets4.man' $< >$@;
-
-ip6tables.8: ${srcdir}/ip6tables.8.in extensions/matches6.man extensions/targets6.man
-       ${AM_VERBOSE_GEN} sed -e '/@MATCH@/ r extensions/matches6.man' -e '/@TARGET@/ r extensions/targets6.man' $< >$@;
-
-extensions/%:
-       ${MAKE} ${AM_MAKEFLAGS} -C $(@D) $(@F)
-
-.PHONY: tarball
-tarball:
-       rm -Rf /tmp/${PACKAGE_TARNAME}-${PACKAGE_VERSION};
-       pushd ${top_srcdir} && git-archive --prefix=${PACKAGE_TARNAME}-${PACKAGE_VERSION}/ HEAD | tar -C /tmp -x && popd;
-       pushd /tmp/${PACKAGE_TARNAME}-${PACKAGE_VERSION} && ./autogen.sh && popd;
-       tar -C /tmp -cjf ${PACKAGE_TARNAME}-${PACKAGE_VERSION}.tar.bz2 --owner=root --group=root ${PACKAGE_TARNAME}-${PACKAGE_VERSION}/;
-       rm -Rf /tmp/${PACKAGE_TARNAME}-${PACKAGE_VERSION};
diff --git a/Makefile.in b/Makefile.in
deleted file mode 100644 (file)
index dbd8e5f..0000000
+++ /dev/null
@@ -1,1511 +0,0 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005  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@
-
-# -*- Makefile -*-
-
-
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = .
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
-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@
-@ENABLE_LIBIPQ_TRUE@am__append_1 = libipq
-bin_PROGRAMS = iptables-xml$(EXEEXT)
-sbin_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2)
-noinst_PROGRAMS =
-@ENABLE_STATIC_TRUE@am__append_2 = iptables-static ip6tables-static
-@ENABLE_SHARED_TRUE@am__append_3 = iptables iptables-multi iptables-restore iptables-save \
-@ENABLE_SHARED_TRUE@                 ip6tables ip6tables-multi ip6tables-restore ip6tables-save
-
-DIST_COMMON = $(am__configure_deps) $(am__include_HEADERS_DIST) \
-       $(am__iptc_HEADERS_DIST) $(srcdir)/Makefile.am \
-       $(srcdir)/Makefile.in $(srcdir)/config.h.in \
-       $(top_srcdir)/configure \
-       $(top_srcdir)/extensions/GNUmakefile.in \
-       $(top_srcdir)/include/xtables.h.in COPYING INSTALL compile \
-       config.guess config.sub depcomp install-sh ltmain.sh missing
-subdir = .
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-       $(ACLOCAL_M4)
-am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
- configure.lineno configure.status.lineno
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = config.h
-CONFIG_CLEAN_FILES = extensions/GNUmakefile include/xtables.h
-LIBRARIES = $(noinst_LIBRARIES)
-ARFLAGS = cru
-libiptc_libiptc_a_AR = $(AR) $(ARFLAGS)
-libiptc_libiptc_a_LIBADD =
-am__dirstamp = $(am__leading_dot)dirstamp
-am_libiptc_libiptc_a_OBJECTS = libiptc/libip4tc.$(OBJEXT) \
-       libiptc/libip6tc.$(OBJEXT)
-libiptc_libiptc_a_OBJECTS = $(am_libiptc_libiptc_a_OBJECTS)
-am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" \
-       "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(includedir)" \
-       "$(DESTDIR)$(iptcdir)"
-binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
-@ENABLE_STATIC_TRUE@am__EXEEXT_1 = iptables-static$(EXEEXT) \
-@ENABLE_STATIC_TRUE@   ip6tables-static$(EXEEXT)
-@ENABLE_SHARED_TRUE@am__EXEEXT_2 = iptables$(EXEEXT) \
-@ENABLE_SHARED_TRUE@   iptables-multi$(EXEEXT) \
-@ENABLE_SHARED_TRUE@   iptables-restore$(EXEEXT) \
-@ENABLE_SHARED_TRUE@   iptables-save$(EXEEXT) ip6tables$(EXEEXT) \
-@ENABLE_SHARED_TRUE@   ip6tables-multi$(EXEEXT) \
-@ENABLE_SHARED_TRUE@   ip6tables-restore$(EXEEXT) \
-@ENABLE_SHARED_TRUE@   ip6tables-save$(EXEEXT)
-sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
-PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) $(sbin_PROGRAMS)
-am_ip6tables_OBJECTS = ip6tables-standalone.$(OBJEXT) \
-       ip6tables.$(OBJEXT) xtables.$(OBJEXT)
-ip6tables_OBJECTS = $(am_ip6tables_OBJECTS)
-ip6tables_DEPENDENCIES = libiptc/libiptc.a extensions/libext6.a
-am_ip6tables_multi_OBJECTS =  \
-       ip6tables_multi-ip6tables-multi.$(OBJEXT) \
-       ip6tables_multi-ip6tables-save.$(OBJEXT) \
-       ip6tables_multi-ip6tables-restore.$(OBJEXT) \
-       ip6tables_multi-ip6tables-standalone.$(OBJEXT) \
-       ip6tables_multi-ip6tables.$(OBJEXT) \
-       ip6tables_multi-xtables.$(OBJEXT)
-ip6tables_multi_OBJECTS = $(am_ip6tables_multi_OBJECTS)
-am__DEPENDENCIES_1 = libiptc/libiptc.a extensions/libext6.a
-ip6tables_multi_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am_ip6tables_restore_OBJECTS = ip6tables-restore.$(OBJEXT) \
-       ip6tables.$(OBJEXT) xtables.$(OBJEXT)
-ip6tables_restore_OBJECTS = $(am_ip6tables_restore_OBJECTS)
-ip6tables_restore_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am_ip6tables_save_OBJECTS = ip6tables-save.$(OBJEXT) \
-       ip6tables.$(OBJEXT) xtables.$(OBJEXT)
-ip6tables_save_OBJECTS = $(am_ip6tables_save_OBJECTS)
-ip6tables_save_DEPENDENCIES = $(am__DEPENDENCIES_1)
-am__objects_1 = ip6tables_static-ip6tables-multi.$(OBJEXT) \
-       ip6tables_static-ip6tables-save.$(OBJEXT) \
-       ip6tables_static-ip6tables-restore.$(OBJEXT) \
-       ip6tables_static-ip6tables-standalone.$(OBJEXT) \
-       ip6tables_static-ip6tables.$(OBJEXT) \
-       ip6tables_static-xtables.$(OBJEXT)
-am_ip6tables_static_OBJECTS = $(am__objects_1)
-ip6tables_static_OBJECTS = $(am_ip6tables_static_OBJECTS)
-ip6tables_static_DEPENDENCIES = libiptc/libiptc.a extensions/libext6.a
-am_iptables_OBJECTS = iptables-standalone.$(OBJEXT) iptables.$(OBJEXT) \
-       xtables.$(OBJEXT)
-iptables_OBJECTS = $(am_iptables_OBJECTS)
-iptables_DEPENDENCIES = libiptc/libiptc.a extensions/libext4.a
-am_iptables_multi_OBJECTS = iptables_multi-iptables-multi.$(OBJEXT) \
-       iptables_multi-iptables-save.$(OBJEXT) \
-       iptables_multi-iptables-restore.$(OBJEXT) \
-       iptables_multi-iptables-xml.$(OBJEXT) \
-       iptables_multi-iptables-standalone.$(OBJEXT) \
-       iptables_multi-iptables.$(OBJEXT) \
-       iptables_multi-xtables.$(OBJEXT)
-iptables_multi_OBJECTS = $(am_iptables_multi_OBJECTS)
-am__DEPENDENCIES_2 = libiptc/libiptc.a extensions/libext4.a
-iptables_multi_DEPENDENCIES = $(am__DEPENDENCIES_2)
-am_iptables_restore_OBJECTS = iptables-restore.$(OBJEXT) \
-       iptables.$(OBJEXT) xtables.$(OBJEXT)
-iptables_restore_OBJECTS = $(am_iptables_restore_OBJECTS)
-iptables_restore_DEPENDENCIES = $(am__DEPENDENCIES_2)
-am_iptables_save_OBJECTS = iptables-save.$(OBJEXT) iptables.$(OBJEXT) \
-       xtables.$(OBJEXT)
-iptables_save_OBJECTS = $(am_iptables_save_OBJECTS)
-iptables_save_DEPENDENCIES = $(am__DEPENDENCIES_2)
-am__objects_2 = iptables_static-iptables-multi.$(OBJEXT) \
-       iptables_static-iptables-save.$(OBJEXT) \
-       iptables_static-iptables-restore.$(OBJEXT) \
-       iptables_static-iptables-xml.$(OBJEXT) \
-       iptables_static-iptables-standalone.$(OBJEXT) \
-       iptables_static-iptables.$(OBJEXT) \
-       iptables_static-xtables.$(OBJEXT)
-am_iptables_static_OBJECTS = $(am__objects_2)
-iptables_static_OBJECTS = $(am_iptables_static_OBJECTS)
-iptables_static_DEPENDENCIES = libiptc/libiptc.a extensions/libext4.a
-am_iptables_xml_OBJECTS = iptables-xml.$(OBJEXT)
-iptables_xml_OBJECTS = $(am_iptables_xml_OBJECTS)
-iptables_xml_LDADD = $(LDADD)
-DEFAULT_INCLUDES = -I. -I$(srcdir) -I.
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
-       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-       $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-       $(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(libiptc_libiptc_a_SOURCES) $(ip6tables_SOURCES) \
-       $(ip6tables_multi_SOURCES) $(ip6tables_restore_SOURCES) \
-       $(ip6tables_save_SOURCES) $(ip6tables_static_SOURCES) \
-       $(iptables_SOURCES) $(iptables_multi_SOURCES) \
-       $(iptables_restore_SOURCES) $(iptables_save_SOURCES) \
-       $(iptables_static_SOURCES) $(iptables_xml_SOURCES)
-DIST_SOURCES = $(libiptc_libiptc_a_SOURCES) $(ip6tables_SOURCES) \
-       $(ip6tables_multi_SOURCES) $(ip6tables_restore_SOURCES) \
-       $(ip6tables_save_SOURCES) $(ip6tables_static_SOURCES) \
-       $(iptables_SOURCES) $(iptables_multi_SOURCES) \
-       $(iptables_restore_SOURCES) $(iptables_save_SOURCES) \
-       $(iptables_static_SOURCES) $(iptables_xml_SOURCES)
-RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
-       html-recursive info-recursive install-data-recursive \
-       install-exec-recursive install-info-recursive \
-       install-recursive installcheck-recursive installdirs-recursive \
-       pdf-recursive ps-recursive uninstall-info-recursive \
-       uninstall-recursive
-man8dir = $(mandir)/man8
-NROFF = nroff
-MANS = $(man_MANS)
-am__include_HEADERS_DIST = include/xtables.h include/iptables.h \
-       include/ip6tables.h
-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 = `echo $$p | sed -e 's|^.*/||'`;
-includeHEADERS_INSTALL = $(INSTALL_HEADER)
-am__iptc_HEADERS_DIST = include/libiptc/libxtc.h \
-       include/libiptc/ipt_kernel_headers.h
-iptcHEADERS_INSTALL = $(INSTALL_HEADER)
-HEADERS = $(include_HEADERS) $(iptc_HEADERS)
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = extensions libipq
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-distdir = $(PACKAGE)-$(VERSION)
-top_distdir = $(distdir)
-am__remove_distdir = \
-  { test ! -d $(distdir) \
-    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
-         && rm -fr $(distdir); }; }
-DIST_ARCHIVES = $(distdir).tar.gz
-GZIP_ENV = --best
-distuninstallcheck_listfiles = find . -type f -print
-distcleancheck_listfiles = find . -type f -print
-ACLOCAL = @ACLOCAL@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
-AMTAR = @AMTAR@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DSYMUTIL = @DSYMUTIL@
-ECHO = @ECHO@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-ENABLE_DEVEL_FALSE = @ENABLE_DEVEL_FALSE@
-ENABLE_DEVEL_TRUE = @ENABLE_DEVEL_TRUE@
-ENABLE_LIBIPQ_FALSE = @ENABLE_LIBIPQ_FALSE@
-ENABLE_LIBIPQ_TRUE = @ENABLE_LIBIPQ_TRUE@
-ENABLE_SHARED_FALSE = @ENABLE_SHARED_FALSE@
-ENABLE_SHARED_TRUE = @ENABLE_SHARED_TRUE@
-ENABLE_STATIC_FALSE = @ENABLE_STATIC_FALSE@
-ENABLE_STATIC_TRUE = @ENABLE_STATIC_TRUE@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FFLAGS = @FFLAGS@
-GREP = @GREP@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-NMEDIT = @NMEDIT@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-VERSION = @VERSION@
-XTABLES_VERSION_EXTRA = @XTABLES_VERSION_EXTRA@
-XTABLES_VERSION_MAJOR = @XTABLES_VERSION_MAJOR@
-XTABLES_VERSION_MINOR = @XTABLES_VERSION_MINOR@
-XTABLES_VERSION_PATCH = @XTABLES_VERSION_PATCH@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_F77 = @ac_ct_F77@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-blacklist_modules = @blacklist_modules@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-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@
-kbuilddir = @kbuilddir@
-kinclude_CFLAGS = @kinclude_CFLAGS@
-ksourcedir = @ksourcedir@
-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@
-regular_CFLAGS = @regular_CFLAGS@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-xtlibdir = @xtlibdir@
-AUTOMAKE_OPTIONS = foreign subdir-objects
-AM_CFLAGS = ${regular_CFLAGS} -I${top_builddir}/include -I${top_srcdir}/include ${kinclude_CFLAGS}
-SUBDIRS := extensions $(am__append_1)
-
-# libiptc
-libiptc_libiptc_a_SOURCES = libiptc/libip4tc.c libiptc/libip6tc.c
-
-# iptables, dynamic
-iptables_SOURCES = iptables-standalone.c iptables.c xtables.c
-iptables_LDFLAGS = -rdynamic
-iptables_LDADD = -ldl -lm libiptc/libiptc.a extensions/libext4.a
-iptables_multi_SOURCES = iptables-multi.c iptables-save.c \
-                            iptables-restore.c iptables-xml.c \
-                            iptables-standalone.c iptables.c xtables.c
-
-iptables_multi_CFLAGS = ${AM_CFLAGS} -DIPTABLES_MULTI
-iptables_multi_LDFLAGS = ${iptables_LDFLAGS}
-iptables_multi_LDADD = ${iptables_LDADD}
-iptables_restore_SOURCES = iptables-restore.c iptables.c xtables.c
-iptables_restore_LDFLAGS = ${iptables_LDFLAGS}
-iptables_restore_LDADD = ${iptables_LDADD}
-iptables_save_SOURCES = iptables-save.c iptables.c xtables.c
-iptables_save_LDFLAGS = ${iptables_LDFLAGS}
-iptables_save_LDADD = ${iptables_LDADD}
-
-# iptables-multi, semi-static
-iptables_static_SOURCES = ${iptables_multi_SOURCES}
-iptables_static_CFLAGS = ${iptables_multi_CFLAGS} -DNO_SHARED_LIBS=1
-iptables_static_LDADD = -lm libiptc/libiptc.a extensions/libext4.a
-iptables_xml_SOURCES = iptables-xml.c
-
-# ip6tables, dynamic
-ip6tables_SOURCES = ip6tables-standalone.c ip6tables.c xtables.c
-ip6tables_LDFLAGS = -rdynamic
-ip6tables_LDADD = -ldl -lm libiptc/libiptc.a extensions/libext6.a
-ip6tables_multi_SOURCES = ip6tables-multi.c ip6tables-save.c \
-                            ip6tables-restore.c ip6tables-standalone.c \
-                            ip6tables.c xtables.c
-
-ip6tables_multi_CFLAGS = ${AM_CFLAGS} -DIPTABLES_MULTI
-ip6tables_multi_LDFLAGS = ${ip6tables_LDFLAGS}
-ip6tables_multi_LDADD = ${ip6tables_LDADD}
-ip6tables_restore_SOURCES = ip6tables-restore.c ip6tables.c xtables.c
-ip6tables_restore_LDFLAGS = ${ip6tables_LDFLAGS}
-ip6tables_restore_LDADD = ${ip6tables_LDADD}
-ip6tables_save_SOURCES = ip6tables-save.c ip6tables.c xtables.c
-ip6tables_save_LDFLAGS = ${ip6tables_LDFLAGS}
-ip6tables_save_LDADD = ${ip6tables_LDADD}
-
-# iptables-multi, semi-static
-ip6tables_static_SOURCES = ${ip6tables_multi_SOURCES}
-ip6tables_static_CFLAGS = ${ip6tables_multi_CFLAGS} -DNO_SHARED_LIBS=1
-ip6tables_static_LDADD = -lm libiptc/libiptc.a extensions/libext6.a
-noinst_LIBRARIES := libiptc/libiptc.a
-man_MANS := iptables.8 iptables-restore.8 iptables-save.8 \
-                    iptables-xml.8 ip6tables.8 ip6tables-restore.8 \
-                    ip6tables-save.8
-
-CLEANFILES := iptables.8 ip6tables.8
-@ENABLE_DEVEL_TRUE@include_HEADERS := include/xtables.h include/iptables.h include/ip6tables.h
-@ENABLE_DEVEL_TRUE@iptcdir = ${includedir}/libiptc
-@ENABLE_DEVEL_TRUE@iptc_HEADERS := include/libiptc/libxtc.h \
-@ENABLE_DEVEL_TRUE@                    include/libiptc/ipt_kernel_headers.h
-
-all: config.h
-       $(MAKE) $(AM_MAKEFLAGS) all-recursive
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-am--refresh:
-       @:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-       @for dep in $?; do \
-         case '$(am__configure_deps)' in \
-           *$$dep*) \
-             echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \
-             cd $(srcdir) && $(AUTOMAKE) --foreign  \
-               && exit 0; \
-             exit 1;; \
-         esac; \
-       done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  Makefile'; \
-       cd $(top_srcdir) && \
-         $(AUTOMAKE) --foreign  Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-       @case '$?' in \
-         *config.status*) \
-           echo ' $(SHELL) ./config.status'; \
-           $(SHELL) ./config.status;; \
-         *) \
-           echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
-           cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
-       esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-       $(SHELL) ./config.status --recheck
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-       cd $(srcdir) && $(AUTOCONF)
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-       cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
-
-config.h: stamp-h1
-       @if test ! -f $@; then \
-         rm -f stamp-h1; \
-         $(MAKE) stamp-h1; \
-       else :; fi
-
-stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
-       @rm -f stamp-h1
-       cd $(top_builddir) && $(SHELL) ./config.status config.h
-$(srcdir)/config.h.in:  $(am__configure_deps) 
-       cd $(top_srcdir) && $(AUTOHEADER)
-       rm -f stamp-h1
-       touch $@
-
-distclean-hdr:
-       -rm -f config.h stamp-h1
-extensions/GNUmakefile: $(top_builddir)/config.status $(top_srcdir)/extensions/GNUmakefile.in
-       cd $(top_builddir) && $(SHELL) ./config.status $@
-include/xtables.h: $(top_builddir)/config.status $(top_srcdir)/include/xtables.h.in
-       cd $(top_builddir) && $(SHELL) ./config.status $@
-
-clean-noinstLIBRARIES:
-       -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-libiptc/$(am__dirstamp):
-       @$(mkdir_p) libiptc
-       @: > libiptc/$(am__dirstamp)
-libiptc/$(DEPDIR)/$(am__dirstamp):
-       @$(mkdir_p) libiptc/$(DEPDIR)
-       @: > libiptc/$(DEPDIR)/$(am__dirstamp)
-libiptc/libip4tc.$(OBJEXT): libiptc/$(am__dirstamp) \
-       libiptc/$(DEPDIR)/$(am__dirstamp)
-libiptc/libip6tc.$(OBJEXT): libiptc/$(am__dirstamp) \
-       libiptc/$(DEPDIR)/$(am__dirstamp)
-libiptc/libiptc.a: $(libiptc_libiptc_a_OBJECTS) $(libiptc_libiptc_a_DEPENDENCIES) libiptc/$(am__dirstamp)
-       -rm -f libiptc/libiptc.a
-       $(libiptc_libiptc_a_AR) libiptc/libiptc.a $(libiptc_libiptc_a_OBJECTS) $(libiptc_libiptc_a_LIBADD)
-       $(RANLIB) libiptc/libiptc.a
-install-binPROGRAMS: $(bin_PROGRAMS)
-       @$(NORMAL_INSTALL)
-       test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
-       @list='$(bin_PROGRAMS)'; for p in $$list; do \
-         p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-         if test -f $$p \
-            || test -f $$p1 \
-         ; then \
-           f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
-          echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
-          $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
-         else :; fi; \
-       done
-
-uninstall-binPROGRAMS:
-       @$(NORMAL_UNINSTALL)
-       @list='$(bin_PROGRAMS)'; for p in $$list; do \
-         f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
-         echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
-         rm -f "$(DESTDIR)$(bindir)/$$f"; \
-       done
-
-clean-binPROGRAMS:
-       @list='$(bin_PROGRAMS)'; for p in $$list; do \
-         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-         echo " rm -f $$p $$f"; \
-         rm -f $$p $$f ; \
-       done
-
-clean-noinstPROGRAMS:
-       @list='$(noinst_PROGRAMS)'; for p in $$list; do \
-         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-         echo " rm -f $$p $$f"; \
-         rm -f $$p $$f ; \
-       done
-install-sbinPROGRAMS: $(sbin_PROGRAMS)
-       @$(NORMAL_INSTALL)
-       test -z "$(sbindir)" || $(mkdir_p) "$(DESTDIR)$(sbindir)"
-       @list='$(sbin_PROGRAMS)'; for p in $$list; do \
-         p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-         if test -f $$p \
-            || test -f $$p1 \
-         ; then \
-           f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
-          echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(sbinPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(sbindir)/$$f'"; \
-          $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(sbinPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(sbindir)/$$f" || exit 1; \
-         else :; fi; \
-       done
-
-uninstall-sbinPROGRAMS:
-       @$(NORMAL_UNINSTALL)
-       @list='$(sbin_PROGRAMS)'; for p in $$list; do \
-         f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
-         echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \
-         rm -f "$(DESTDIR)$(sbindir)/$$f"; \
-       done
-
-clean-sbinPROGRAMS:
-       @list='$(sbin_PROGRAMS)'; for p in $$list; do \
-         f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-         echo " rm -f $$p $$f"; \
-         rm -f $$p $$f ; \
-       done
-ip6tables$(EXEEXT): $(ip6tables_OBJECTS) $(ip6tables_DEPENDENCIES) 
-       @rm -f ip6tables$(EXEEXT)
-       $(LINK) $(ip6tables_LDFLAGS) $(ip6tables_OBJECTS) $(ip6tables_LDADD) $(LIBS)
-ip6tables-multi$(EXEEXT): $(ip6tables_multi_OBJECTS) $(ip6tables_multi_DEPENDENCIES) 
-       @rm -f ip6tables-multi$(EXEEXT)
-       $(LINK) $(ip6tables_multi_LDFLAGS) $(ip6tables_multi_OBJECTS) $(ip6tables_multi_LDADD) $(LIBS)
-ip6tables-restore$(EXEEXT): $(ip6tables_restore_OBJECTS) $(ip6tables_restore_DEPENDENCIES) 
-       @rm -f ip6tables-restore$(EXEEXT)
-       $(LINK) $(ip6tables_restore_LDFLAGS) $(ip6tables_restore_OBJECTS) $(ip6tables_restore_LDADD) $(LIBS)
-ip6tables-save$(EXEEXT): $(ip6tables_save_OBJECTS) $(ip6tables_save_DEPENDENCIES) 
-       @rm -f ip6tables-save$(EXEEXT)
-       $(LINK) $(ip6tables_save_LDFLAGS) $(ip6tables_save_OBJECTS) $(ip6tables_save_LDADD) $(LIBS)
-ip6tables-static$(EXEEXT): $(ip6tables_static_OBJECTS) $(ip6tables_static_DEPENDENCIES) 
-       @rm -f ip6tables-static$(EXEEXT)
-       $(LINK) $(ip6tables_static_LDFLAGS) $(ip6tables_static_OBJECTS) $(ip6tables_static_LDADD) $(LIBS)
-iptables$(EXEEXT): $(iptables_OBJECTS) $(iptables_DEPENDENCIES) 
-       @rm -f iptables$(EXEEXT)
-       $(LINK) $(iptables_LDFLAGS) $(iptables_OBJECTS) $(iptables_LDADD) $(LIBS)
-iptables-multi$(EXEEXT): $(iptables_multi_OBJECTS) $(iptables_multi_DEPENDENCIES) 
-       @rm -f iptables-multi$(EXEEXT)
-       $(LINK) $(iptables_multi_LDFLAGS) $(iptables_multi_OBJECTS) $(iptables_multi_LDADD) $(LIBS)
-iptables-restore$(EXEEXT): $(iptables_restore_OBJECTS) $(iptables_restore_DEPENDENCIES) 
-       @rm -f iptables-restore$(EXEEXT)
-       $(LINK) $(iptables_restore_LDFLAGS) $(iptables_restore_OBJECTS) $(iptables_restore_LDADD) $(LIBS)
-iptables-save$(EXEEXT): $(iptables_save_OBJECTS) $(iptables_save_DEPENDENCIES) 
-       @rm -f iptables-save$(EXEEXT)
-       $(LINK) $(iptables_save_LDFLAGS) $(iptables_save_OBJECTS) $(iptables_save_LDADD) $(LIBS)
-iptables-static$(EXEEXT): $(iptables_static_OBJECTS) $(iptables_static_DEPENDENCIES) 
-       @rm -f iptables-static$(EXEEXT)
-       $(LINK) $(iptables_static_LDFLAGS) $(iptables_static_OBJECTS) $(iptables_static_LDADD) $(LIBS)
-iptables-xml$(EXEEXT): $(iptables_xml_OBJECTS) $(iptables_xml_DEPENDENCIES) 
-       @rm -f iptables-xml$(EXEEXT)
-       $(LINK) $(iptables_xml_LDFLAGS) $(iptables_xml_OBJECTS) $(iptables_xml_LDADD) $(LIBS)
-
-mostlyclean-compile:
-       -rm -f *.$(OBJEXT)
-       -rm -f libiptc/libip4tc.$(OBJEXT)
-       -rm -f libiptc/libip6tc.$(OBJEXT)
-
-distclean-compile:
-       -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ip6tables-restore.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ip6tables-save.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ip6tables-standalone.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ip6tables.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ip6tables_multi-ip6tables-multi.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ip6tables_multi-ip6tables-restore.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ip6tables_multi-ip6tables-save.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ip6tables_multi-ip6tables-standalone.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ip6tables_multi-ip6tables.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ip6tables_multi-xtables.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ip6tables_static-ip6tables-multi.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ip6tables_static-ip6tables-restore.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ip6tables_static-ip6tables-save.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ip6tables_static-ip6tables-standalone.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ip6tables_static-ip6tables.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ip6tables_static-xtables.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iptables-restore.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iptables-save.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iptables-standalone.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iptables-xml.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iptables.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iptables_multi-iptables-multi.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iptables_multi-iptables-restore.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iptables_multi-iptables-save.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iptables_multi-iptables-standalone.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iptables_multi-iptables-xml.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iptables_multi-iptables.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iptables_multi-xtables.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iptables_static-iptables-multi.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iptables_static-iptables-restore.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iptables_static-iptables-save.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iptables_static-iptables-standalone.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iptables_static-iptables-xml.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iptables_static-iptables.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iptables_static-xtables.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtables.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@libiptc/$(DEPDIR)/libip4tc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@libiptc/$(DEPDIR)/libip6tc.Po@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@   depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`; \
-@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$$depbase.Tpo" -c -o $@ $<; \
-@am__fastdepCC_TRUE@   then mv -f "$$depbase.Tpo" "$$depbase.Po"; else rm -f "$$depbase.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(COMPILE) -c -o $@ $<
-
-.c.obj:
-@am__fastdepCC_TRUE@   depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`; \
-@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$$depbase.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-@am__fastdepCC_TRUE@   then mv -f "$$depbase.Tpo" "$$depbase.Po"; else rm -f "$$depbase.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.c.lo:
-@am__fastdepCC_TRUE@   depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`; \
-@am__fastdepCC_TRUE@   if $(LTCOMPILE) -MT $@ -MD -MP -MF "$$depbase.Tpo" -c -o $@ $<; \
-@am__fastdepCC_TRUE@   then mv -f "$$depbase.Tpo" "$$depbase.Plo"; else rm -f "$$depbase.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
-
-ip6tables_multi-ip6tables-multi.o: ip6tables-multi.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_multi_CFLAGS) $(CFLAGS) -MT ip6tables_multi-ip6tables-multi.o -MD -MP -MF "$(DEPDIR)/ip6tables_multi-ip6tables-multi.Tpo" -c -o ip6tables_multi-ip6tables-multi.o `test -f 'ip6tables-multi.c' || echo '$(srcdir)/'`ip6tables-multi.c; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/ip6tables_multi-ip6tables-multi.Tpo" "$(DEPDIR)/ip6tables_multi-ip6tables-multi.Po"; else rm -f "$(DEPDIR)/ip6tables_multi-ip6tables-multi.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='ip6tables-multi.c' object='ip6tables_multi-ip6tables-multi.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_multi_CFLAGS) $(CFLAGS) -c -o ip6tables_multi-ip6tables-multi.o `test -f 'ip6tables-multi.c' || echo '$(srcdir)/'`ip6tables-multi.c
-
-ip6tables_multi-ip6tables-multi.obj: ip6tables-multi.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_multi_CFLAGS) $(CFLAGS) -MT ip6tables_multi-ip6tables-multi.obj -MD -MP -MF "$(DEPDIR)/ip6tables_multi-ip6tables-multi.Tpo" -c -o ip6tables_multi-ip6tables-multi.obj `if test -f 'ip6tables-multi.c'; then $(CYGPATH_W) 'ip6tables-multi.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables-multi.c'; fi`; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/ip6tables_multi-ip6tables-multi.Tpo" "$(DEPDIR)/ip6tables_multi-ip6tables-multi.Po"; else rm -f "$(DEPDIR)/ip6tables_multi-ip6tables-multi.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='ip6tables-multi.c' object='ip6tables_multi-ip6tables-multi.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_multi_CFLAGS) $(CFLAGS) -c -o ip6tables_multi-ip6tables-multi.obj `if test -f 'ip6tables-multi.c'; then $(CYGPATH_W) 'ip6tables-multi.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables-multi.c'; fi`
-
-ip6tables_multi-ip6tables-save.o: ip6tables-save.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_multi_CFLAGS) $(CFLAGS) -MT ip6tables_multi-ip6tables-save.o -MD -MP -MF "$(DEPDIR)/ip6tables_multi-ip6tables-save.Tpo" -c -o ip6tables_multi-ip6tables-save.o `test -f 'ip6tables-save.c' || echo '$(srcdir)/'`ip6tables-save.c; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/ip6tables_multi-ip6tables-save.Tpo" "$(DEPDIR)/ip6tables_multi-ip6tables-save.Po"; else rm -f "$(DEPDIR)/ip6tables_multi-ip6tables-save.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='ip6tables-save.c' object='ip6tables_multi-ip6tables-save.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_multi_CFLAGS) $(CFLAGS) -c -o ip6tables_multi-ip6tables-save.o `test -f 'ip6tables-save.c' || echo '$(srcdir)/'`ip6tables-save.c
-
-ip6tables_multi-ip6tables-save.obj: ip6tables-save.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_multi_CFLAGS) $(CFLAGS) -MT ip6tables_multi-ip6tables-save.obj -MD -MP -MF "$(DEPDIR)/ip6tables_multi-ip6tables-save.Tpo" -c -o ip6tables_multi-ip6tables-save.obj `if test -f 'ip6tables-save.c'; then $(CYGPATH_W) 'ip6tables-save.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables-save.c'; fi`; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/ip6tables_multi-ip6tables-save.Tpo" "$(DEPDIR)/ip6tables_multi-ip6tables-save.Po"; else rm -f "$(DEPDIR)/ip6tables_multi-ip6tables-save.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='ip6tables-save.c' object='ip6tables_multi-ip6tables-save.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_multi_CFLAGS) $(CFLAGS) -c -o ip6tables_multi-ip6tables-save.obj `if test -f 'ip6tables-save.c'; then $(CYGPATH_W) 'ip6tables-save.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables-save.c'; fi`
-
-ip6tables_multi-ip6tables-restore.o: ip6tables-restore.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_multi_CFLAGS) $(CFLAGS) -MT ip6tables_multi-ip6tables-restore.o -MD -MP -MF "$(DEPDIR)/ip6tables_multi-ip6tables-restore.Tpo" -c -o ip6tables_multi-ip6tables-restore.o `test -f 'ip6tables-restore.c' || echo '$(srcdir)/'`ip6tables-restore.c; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/ip6tables_multi-ip6tables-restore.Tpo" "$(DEPDIR)/ip6tables_multi-ip6tables-restore.Po"; else rm -f "$(DEPDIR)/ip6tables_multi-ip6tables-restore.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='ip6tables-restore.c' object='ip6tables_multi-ip6tables-restore.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_multi_CFLAGS) $(CFLAGS) -c -o ip6tables_multi-ip6tables-restore.o `test -f 'ip6tables-restore.c' || echo '$(srcdir)/'`ip6tables-restore.c
-
-ip6tables_multi-ip6tables-restore.obj: ip6tables-restore.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_multi_CFLAGS) $(CFLAGS) -MT ip6tables_multi-ip6tables-restore.obj -MD -MP -MF "$(DEPDIR)/ip6tables_multi-ip6tables-restore.Tpo" -c -o ip6tables_multi-ip6tables-restore.obj `if test -f 'ip6tables-restore.c'; then $(CYGPATH_W) 'ip6tables-restore.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables-restore.c'; fi`; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/ip6tables_multi-ip6tables-restore.Tpo" "$(DEPDIR)/ip6tables_multi-ip6tables-restore.Po"; else rm -f "$(DEPDIR)/ip6tables_multi-ip6tables-restore.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='ip6tables-restore.c' object='ip6tables_multi-ip6tables-restore.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_multi_CFLAGS) $(CFLAGS) -c -o ip6tables_multi-ip6tables-restore.obj `if test -f 'ip6tables-restore.c'; then $(CYGPATH_W) 'ip6tables-restore.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables-restore.c'; fi`
-
-ip6tables_multi-ip6tables-standalone.o: ip6tables-standalone.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_multi_CFLAGS) $(CFLAGS) -MT ip6tables_multi-ip6tables-standalone.o -MD -MP -MF "$(DEPDIR)/ip6tables_multi-ip6tables-standalone.Tpo" -c -o ip6tables_multi-ip6tables-standalone.o `test -f 'ip6tables-standalone.c' || echo '$(srcdir)/'`ip6tables-standalone.c; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/ip6tables_multi-ip6tables-standalone.Tpo" "$(DEPDIR)/ip6tables_multi-ip6tables-standalone.Po"; else rm -f "$(DEPDIR)/ip6tables_multi-ip6tables-standalone.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='ip6tables-standalone.c' object='ip6tables_multi-ip6tables-standalone.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_multi_CFLAGS) $(CFLAGS) -c -o ip6tables_multi-ip6tables-standalone.o `test -f 'ip6tables-standalone.c' || echo '$(srcdir)/'`ip6tables-standalone.c
-
-ip6tables_multi-ip6tables-standalone.obj: ip6tables-standalone.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_multi_CFLAGS) $(CFLAGS) -MT ip6tables_multi-ip6tables-standalone.obj -MD -MP -MF "$(DEPDIR)/ip6tables_multi-ip6tables-standalone.Tpo" -c -o ip6tables_multi-ip6tables-standalone.obj `if test -f 'ip6tables-standalone.c'; then $(CYGPATH_W) 'ip6tables-standalone.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables-standalone.c'; fi`; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/ip6tables_multi-ip6tables-standalone.Tpo" "$(DEPDIR)/ip6tables_multi-ip6tables-standalone.Po"; else rm -f "$(DEPDIR)/ip6tables_multi-ip6tables-standalone.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='ip6tables-standalone.c' object='ip6tables_multi-ip6tables-standalone.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_multi_CFLAGS) $(CFLAGS) -c -o ip6tables_multi-ip6tables-standalone.obj `if test -f 'ip6tables-standalone.c'; then $(CYGPATH_W) 'ip6tables-standalone.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables-standalone.c'; fi`
-
-ip6tables_multi-ip6tables.o: ip6tables.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_multi_CFLAGS) $(CFLAGS) -MT ip6tables_multi-ip6tables.o -MD -MP -MF "$(DEPDIR)/ip6tables_multi-ip6tables.Tpo" -c -o ip6tables_multi-ip6tables.o `test -f 'ip6tables.c' || echo '$(srcdir)/'`ip6tables.c; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/ip6tables_multi-ip6tables.Tpo" "$(DEPDIR)/ip6tables_multi-ip6tables.Po"; else rm -f "$(DEPDIR)/ip6tables_multi-ip6tables.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='ip6tables.c' object='ip6tables_multi-ip6tables.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_multi_CFLAGS) $(CFLAGS) -c -o ip6tables_multi-ip6tables.o `test -f 'ip6tables.c' || echo '$(srcdir)/'`ip6tables.c
-
-ip6tables_multi-ip6tables.obj: ip6tables.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_multi_CFLAGS) $(CFLAGS) -MT ip6tables_multi-ip6tables.obj -MD -MP -MF "$(DEPDIR)/ip6tables_multi-ip6tables.Tpo" -c -o ip6tables_multi-ip6tables.obj `if test -f 'ip6tables.c'; then $(CYGPATH_W) 'ip6tables.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables.c'; fi`; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/ip6tables_multi-ip6tables.Tpo" "$(DEPDIR)/ip6tables_multi-ip6tables.Po"; else rm -f "$(DEPDIR)/ip6tables_multi-ip6tables.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='ip6tables.c' object='ip6tables_multi-ip6tables.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_multi_CFLAGS) $(CFLAGS) -c -o ip6tables_multi-ip6tables.obj `if test -f 'ip6tables.c'; then $(CYGPATH_W) 'ip6tables.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables.c'; fi`
-
-ip6tables_multi-xtables.o: xtables.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_multi_CFLAGS) $(CFLAGS) -MT ip6tables_multi-xtables.o -MD -MP -MF "$(DEPDIR)/ip6tables_multi-xtables.Tpo" -c -o ip6tables_multi-xtables.o `test -f 'xtables.c' || echo '$(srcdir)/'`xtables.c; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/ip6tables_multi-xtables.Tpo" "$(DEPDIR)/ip6tables_multi-xtables.Po"; else rm -f "$(DEPDIR)/ip6tables_multi-xtables.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='xtables.c' object='ip6tables_multi-xtables.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_multi_CFLAGS) $(CFLAGS) -c -o ip6tables_multi-xtables.o `test -f 'xtables.c' || echo '$(srcdir)/'`xtables.c
-
-ip6tables_multi-xtables.obj: xtables.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_multi_CFLAGS) $(CFLAGS) -MT ip6tables_multi-xtables.obj -MD -MP -MF "$(DEPDIR)/ip6tables_multi-xtables.Tpo" -c -o ip6tables_multi-xtables.obj `if test -f 'xtables.c'; then $(CYGPATH_W) 'xtables.c'; else $(CYGPATH_W) '$(srcdir)/xtables.c'; fi`; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/ip6tables_multi-xtables.Tpo" "$(DEPDIR)/ip6tables_multi-xtables.Po"; else rm -f "$(DEPDIR)/ip6tables_multi-xtables.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='xtables.c' object='ip6tables_multi-xtables.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_multi_CFLAGS) $(CFLAGS) -c -o ip6tables_multi-xtables.obj `if test -f 'xtables.c'; then $(CYGPATH_W) 'xtables.c'; else $(CYGPATH_W) '$(srcdir)/xtables.c'; fi`
-
-ip6tables_static-ip6tables-multi.o: ip6tables-multi.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_static_CFLAGS) $(CFLAGS) -MT ip6tables_static-ip6tables-multi.o -MD -MP -MF "$(DEPDIR)/ip6tables_static-ip6tables-multi.Tpo" -c -o ip6tables_static-ip6tables-multi.o `test -f 'ip6tables-multi.c' || echo '$(srcdir)/'`ip6tables-multi.c; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/ip6tables_static-ip6tables-multi.Tpo" "$(DEPDIR)/ip6tables_static-ip6tables-multi.Po"; else rm -f "$(DEPDIR)/ip6tables_static-ip6tables-multi.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='ip6tables-multi.c' object='ip6tables_static-ip6tables-multi.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_static_CFLAGS) $(CFLAGS) -c -o ip6tables_static-ip6tables-multi.o `test -f 'ip6tables-multi.c' || echo '$(srcdir)/'`ip6tables-multi.c
-
-ip6tables_static-ip6tables-multi.obj: ip6tables-multi.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_static_CFLAGS) $(CFLAGS) -MT ip6tables_static-ip6tables-multi.obj -MD -MP -MF "$(DEPDIR)/ip6tables_static-ip6tables-multi.Tpo" -c -o ip6tables_static-ip6tables-multi.obj `if test -f 'ip6tables-multi.c'; then $(CYGPATH_W) 'ip6tables-multi.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables-multi.c'; fi`; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/ip6tables_static-ip6tables-multi.Tpo" "$(DEPDIR)/ip6tables_static-ip6tables-multi.Po"; else rm -f "$(DEPDIR)/ip6tables_static-ip6tables-multi.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='ip6tables-multi.c' object='ip6tables_static-ip6tables-multi.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_static_CFLAGS) $(CFLAGS) -c -o ip6tables_static-ip6tables-multi.obj `if test -f 'ip6tables-multi.c'; then $(CYGPATH_W) 'ip6tables-multi.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables-multi.c'; fi`
-
-ip6tables_static-ip6tables-save.o: ip6tables-save.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_static_CFLAGS) $(CFLAGS) -MT ip6tables_static-ip6tables-save.o -MD -MP -MF "$(DEPDIR)/ip6tables_static-ip6tables-save.Tpo" -c -o ip6tables_static-ip6tables-save.o `test -f 'ip6tables-save.c' || echo '$(srcdir)/'`ip6tables-save.c; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/ip6tables_static-ip6tables-save.Tpo" "$(DEPDIR)/ip6tables_static-ip6tables-save.Po"; else rm -f "$(DEPDIR)/ip6tables_static-ip6tables-save.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='ip6tables-save.c' object='ip6tables_static-ip6tables-save.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_static_CFLAGS) $(CFLAGS) -c -o ip6tables_static-ip6tables-save.o `test -f 'ip6tables-save.c' || echo '$(srcdir)/'`ip6tables-save.c
-
-ip6tables_static-ip6tables-save.obj: ip6tables-save.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_static_CFLAGS) $(CFLAGS) -MT ip6tables_static-ip6tables-save.obj -MD -MP -MF "$(DEPDIR)/ip6tables_static-ip6tables-save.Tpo" -c -o ip6tables_static-ip6tables-save.obj `if test -f 'ip6tables-save.c'; then $(CYGPATH_W) 'ip6tables-save.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables-save.c'; fi`; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/ip6tables_static-ip6tables-save.Tpo" "$(DEPDIR)/ip6tables_static-ip6tables-save.Po"; else rm -f "$(DEPDIR)/ip6tables_static-ip6tables-save.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='ip6tables-save.c' object='ip6tables_static-ip6tables-save.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_static_CFLAGS) $(CFLAGS) -c -o ip6tables_static-ip6tables-save.obj `if test -f 'ip6tables-save.c'; then $(CYGPATH_W) 'ip6tables-save.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables-save.c'; fi`
-
-ip6tables_static-ip6tables-restore.o: ip6tables-restore.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_static_CFLAGS) $(CFLAGS) -MT ip6tables_static-ip6tables-restore.o -MD -MP -MF "$(DEPDIR)/ip6tables_static-ip6tables-restore.Tpo" -c -o ip6tables_static-ip6tables-restore.o `test -f 'ip6tables-restore.c' || echo '$(srcdir)/'`ip6tables-restore.c; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/ip6tables_static-ip6tables-restore.Tpo" "$(DEPDIR)/ip6tables_static-ip6tables-restore.Po"; else rm -f "$(DEPDIR)/ip6tables_static-ip6tables-restore.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='ip6tables-restore.c' object='ip6tables_static-ip6tables-restore.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_static_CFLAGS) $(CFLAGS) -c -o ip6tables_static-ip6tables-restore.o `test -f 'ip6tables-restore.c' || echo '$(srcdir)/'`ip6tables-restore.c
-
-ip6tables_static-ip6tables-restore.obj: ip6tables-restore.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_static_CFLAGS) $(CFLAGS) -MT ip6tables_static-ip6tables-restore.obj -MD -MP -MF "$(DEPDIR)/ip6tables_static-ip6tables-restore.Tpo" -c -o ip6tables_static-ip6tables-restore.obj `if test -f 'ip6tables-restore.c'; then $(CYGPATH_W) 'ip6tables-restore.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables-restore.c'; fi`; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/ip6tables_static-ip6tables-restore.Tpo" "$(DEPDIR)/ip6tables_static-ip6tables-restore.Po"; else rm -f "$(DEPDIR)/ip6tables_static-ip6tables-restore.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='ip6tables-restore.c' object='ip6tables_static-ip6tables-restore.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_static_CFLAGS) $(CFLAGS) -c -o ip6tables_static-ip6tables-restore.obj `if test -f 'ip6tables-restore.c'; then $(CYGPATH_W) 'ip6tables-restore.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables-restore.c'; fi`
-
-ip6tables_static-ip6tables-standalone.o: ip6tables-standalone.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_static_CFLAGS) $(CFLAGS) -MT ip6tables_static-ip6tables-standalone.o -MD -MP -MF "$(DEPDIR)/ip6tables_static-ip6tables-standalone.Tpo" -c -o ip6tables_static-ip6tables-standalone.o `test -f 'ip6tables-standalone.c' || echo '$(srcdir)/'`ip6tables-standalone.c; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/ip6tables_static-ip6tables-standalone.Tpo" "$(DEPDIR)/ip6tables_static-ip6tables-standalone.Po"; else rm -f "$(DEPDIR)/ip6tables_static-ip6tables-standalone.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='ip6tables-standalone.c' object='ip6tables_static-ip6tables-standalone.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_static_CFLAGS) $(CFLAGS) -c -o ip6tables_static-ip6tables-standalone.o `test -f 'ip6tables-standalone.c' || echo '$(srcdir)/'`ip6tables-standalone.c
-
-ip6tables_static-ip6tables-standalone.obj: ip6tables-standalone.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_static_CFLAGS) $(CFLAGS) -MT ip6tables_static-ip6tables-standalone.obj -MD -MP -MF "$(DEPDIR)/ip6tables_static-ip6tables-standalone.Tpo" -c -o ip6tables_static-ip6tables-standalone.obj `if test -f 'ip6tables-standalone.c'; then $(CYGPATH_W) 'ip6tables-standalone.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables-standalone.c'; fi`; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/ip6tables_static-ip6tables-standalone.Tpo" "$(DEPDIR)/ip6tables_static-ip6tables-standalone.Po"; else rm -f "$(DEPDIR)/ip6tables_static-ip6tables-standalone.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='ip6tables-standalone.c' object='ip6tables_static-ip6tables-standalone.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_static_CFLAGS) $(CFLAGS) -c -o ip6tables_static-ip6tables-standalone.obj `if test -f 'ip6tables-standalone.c'; then $(CYGPATH_W) 'ip6tables-standalone.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables-standalone.c'; fi`
-
-ip6tables_static-ip6tables.o: ip6tables.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_static_CFLAGS) $(CFLAGS) -MT ip6tables_static-ip6tables.o -MD -MP -MF "$(DEPDIR)/ip6tables_static-ip6tables.Tpo" -c -o ip6tables_static-ip6tables.o `test -f 'ip6tables.c' || echo '$(srcdir)/'`ip6tables.c; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/ip6tables_static-ip6tables.Tpo" "$(DEPDIR)/ip6tables_static-ip6tables.Po"; else rm -f "$(DEPDIR)/ip6tables_static-ip6tables.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='ip6tables.c' object='ip6tables_static-ip6tables.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_static_CFLAGS) $(CFLAGS) -c -o ip6tables_static-ip6tables.o `test -f 'ip6tables.c' || echo '$(srcdir)/'`ip6tables.c
-
-ip6tables_static-ip6tables.obj: ip6tables.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_static_CFLAGS) $(CFLAGS) -MT ip6tables_static-ip6tables.obj -MD -MP -MF "$(DEPDIR)/ip6tables_static-ip6tables.Tpo" -c -o ip6tables_static-ip6tables.obj `if test -f 'ip6tables.c'; then $(CYGPATH_W) 'ip6tables.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables.c'; fi`; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/ip6tables_static-ip6tables.Tpo" "$(DEPDIR)/ip6tables_static-ip6tables.Po"; else rm -f "$(DEPDIR)/ip6tables_static-ip6tables.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='ip6tables.c' object='ip6tables_static-ip6tables.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_static_CFLAGS) $(CFLAGS) -c -o ip6tables_static-ip6tables.obj `if test -f 'ip6tables.c'; then $(CYGPATH_W) 'ip6tables.c'; else $(CYGPATH_W) '$(srcdir)/ip6tables.c'; fi`
-
-ip6tables_static-xtables.o: xtables.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_static_CFLAGS) $(CFLAGS) -MT ip6tables_static-xtables.o -MD -MP -MF "$(DEPDIR)/ip6tables_static-xtables.Tpo" -c -o ip6tables_static-xtables.o `test -f 'xtables.c' || echo '$(srcdir)/'`xtables.c; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/ip6tables_static-xtables.Tpo" "$(DEPDIR)/ip6tables_static-xtables.Po"; else rm -f "$(DEPDIR)/ip6tables_static-xtables.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='xtables.c' object='ip6tables_static-xtables.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_static_CFLAGS) $(CFLAGS) -c -o ip6tables_static-xtables.o `test -f 'xtables.c' || echo '$(srcdir)/'`xtables.c
-
-ip6tables_static-xtables.obj: xtables.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_static_CFLAGS) $(CFLAGS) -MT ip6tables_static-xtables.obj -MD -MP -MF "$(DEPDIR)/ip6tables_static-xtables.Tpo" -c -o ip6tables_static-xtables.obj `if test -f 'xtables.c'; then $(CYGPATH_W) 'xtables.c'; else $(CYGPATH_W) '$(srcdir)/xtables.c'; fi`; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/ip6tables_static-xtables.Tpo" "$(DEPDIR)/ip6tables_static-xtables.Po"; else rm -f "$(DEPDIR)/ip6tables_static-xtables.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='xtables.c' object='ip6tables_static-xtables.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ip6tables_static_CFLAGS) $(CFLAGS) -c -o ip6tables_static-xtables.obj `if test -f 'xtables.c'; then $(CYGPATH_W) 'xtables.c'; else $(CYGPATH_W) '$(srcdir)/xtables.c'; fi`
-
-iptables_multi-iptables-multi.o: iptables-multi.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -MT iptables_multi-iptables-multi.o -MD -MP -MF "$(DEPDIR)/iptables_multi-iptables-multi.Tpo" -c -o iptables_multi-iptables-multi.o `test -f 'iptables-multi.c' || echo '$(srcdir)/'`iptables-multi.c; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_multi-iptables-multi.Tpo" "$(DEPDIR)/iptables_multi-iptables-multi.Po"; else rm -f "$(DEPDIR)/iptables_multi-iptables-multi.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='iptables-multi.c' object='iptables_multi-iptables-multi.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -c -o iptables_multi-iptables-multi.o `test -f 'iptables-multi.c' || echo '$(srcdir)/'`iptables-multi.c
-
-iptables_multi-iptables-multi.obj: iptables-multi.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -MT iptables_multi-iptables-multi.obj -MD -MP -MF "$(DEPDIR)/iptables_multi-iptables-multi.Tpo" -c -o iptables_multi-iptables-multi.obj `if test -f 'iptables-multi.c'; then $(CYGPATH_W) 'iptables-multi.c'; else $(CYGPATH_W) '$(srcdir)/iptables-multi.c'; fi`; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_multi-iptables-multi.Tpo" "$(DEPDIR)/iptables_multi-iptables-multi.Po"; else rm -f "$(DEPDIR)/iptables_multi-iptables-multi.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='iptables-multi.c' object='iptables_multi-iptables-multi.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -c -o iptables_multi-iptables-multi.obj `if test -f 'iptables-multi.c'; then $(CYGPATH_W) 'iptables-multi.c'; else $(CYGPATH_W) '$(srcdir)/iptables-multi.c'; fi`
-
-iptables_multi-iptables-save.o: iptables-save.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -MT iptables_multi-iptables-save.o -MD -MP -MF "$(DEPDIR)/iptables_multi-iptables-save.Tpo" -c -o iptables_multi-iptables-save.o `test -f 'iptables-save.c' || echo '$(srcdir)/'`iptables-save.c; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_multi-iptables-save.Tpo" "$(DEPDIR)/iptables_multi-iptables-save.Po"; else rm -f "$(DEPDIR)/iptables_multi-iptables-save.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='iptables-save.c' object='iptables_multi-iptables-save.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -c -o iptables_multi-iptables-save.o `test -f 'iptables-save.c' || echo '$(srcdir)/'`iptables-save.c
-
-iptables_multi-iptables-save.obj: iptables-save.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -MT iptables_multi-iptables-save.obj -MD -MP -MF "$(DEPDIR)/iptables_multi-iptables-save.Tpo" -c -o iptables_multi-iptables-save.obj `if test -f 'iptables-save.c'; then $(CYGPATH_W) 'iptables-save.c'; else $(CYGPATH_W) '$(srcdir)/iptables-save.c'; fi`; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_multi-iptables-save.Tpo" "$(DEPDIR)/iptables_multi-iptables-save.Po"; else rm -f "$(DEPDIR)/iptables_multi-iptables-save.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='iptables-save.c' object='iptables_multi-iptables-save.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -c -o iptables_multi-iptables-save.obj `if test -f 'iptables-save.c'; then $(CYGPATH_W) 'iptables-save.c'; else $(CYGPATH_W) '$(srcdir)/iptables-save.c'; fi`
-
-iptables_multi-iptables-restore.o: iptables-restore.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -MT iptables_multi-iptables-restore.o -MD -MP -MF "$(DEPDIR)/iptables_multi-iptables-restore.Tpo" -c -o iptables_multi-iptables-restore.o `test -f 'iptables-restore.c' || echo '$(srcdir)/'`iptables-restore.c; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_multi-iptables-restore.Tpo" "$(DEPDIR)/iptables_multi-iptables-restore.Po"; else rm -f "$(DEPDIR)/iptables_multi-iptables-restore.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='iptables-restore.c' object='iptables_multi-iptables-restore.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -c -o iptables_multi-iptables-restore.o `test -f 'iptables-restore.c' || echo '$(srcdir)/'`iptables-restore.c
-
-iptables_multi-iptables-restore.obj: iptables-restore.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -MT iptables_multi-iptables-restore.obj -MD -MP -MF "$(DEPDIR)/iptables_multi-iptables-restore.Tpo" -c -o iptables_multi-iptables-restore.obj `if test -f 'iptables-restore.c'; then $(CYGPATH_W) 'iptables-restore.c'; else $(CYGPATH_W) '$(srcdir)/iptables-restore.c'; fi`; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_multi-iptables-restore.Tpo" "$(DEPDIR)/iptables_multi-iptables-restore.Po"; else rm -f "$(DEPDIR)/iptables_multi-iptables-restore.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='iptables-restore.c' object='iptables_multi-iptables-restore.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -c -o iptables_multi-iptables-restore.obj `if test -f 'iptables-restore.c'; then $(CYGPATH_W) 'iptables-restore.c'; else $(CYGPATH_W) '$(srcdir)/iptables-restore.c'; fi`
-
-iptables_multi-iptables-xml.o: iptables-xml.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -MT iptables_multi-iptables-xml.o -MD -MP -MF "$(DEPDIR)/iptables_multi-iptables-xml.Tpo" -c -o iptables_multi-iptables-xml.o `test -f 'iptables-xml.c' || echo '$(srcdir)/'`iptables-xml.c; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_multi-iptables-xml.Tpo" "$(DEPDIR)/iptables_multi-iptables-xml.Po"; else rm -f "$(DEPDIR)/iptables_multi-iptables-xml.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='iptables-xml.c' object='iptables_multi-iptables-xml.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -c -o iptables_multi-iptables-xml.o `test -f 'iptables-xml.c' || echo '$(srcdir)/'`iptables-xml.c
-
-iptables_multi-iptables-xml.obj: iptables-xml.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -MT iptables_multi-iptables-xml.obj -MD -MP -MF "$(DEPDIR)/iptables_multi-iptables-xml.Tpo" -c -o iptables_multi-iptables-xml.obj `if test -f 'iptables-xml.c'; then $(CYGPATH_W) 'iptables-xml.c'; else $(CYGPATH_W) '$(srcdir)/iptables-xml.c'; fi`; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_multi-iptables-xml.Tpo" "$(DEPDIR)/iptables_multi-iptables-xml.Po"; else rm -f "$(DEPDIR)/iptables_multi-iptables-xml.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='iptables-xml.c' object='iptables_multi-iptables-xml.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -c -o iptables_multi-iptables-xml.obj `if test -f 'iptables-xml.c'; then $(CYGPATH_W) 'iptables-xml.c'; else $(CYGPATH_W) '$(srcdir)/iptables-xml.c'; fi`
-
-iptables_multi-iptables-standalone.o: iptables-standalone.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -MT iptables_multi-iptables-standalone.o -MD -MP -MF "$(DEPDIR)/iptables_multi-iptables-standalone.Tpo" -c -o iptables_multi-iptables-standalone.o `test -f 'iptables-standalone.c' || echo '$(srcdir)/'`iptables-standalone.c; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_multi-iptables-standalone.Tpo" "$(DEPDIR)/iptables_multi-iptables-standalone.Po"; else rm -f "$(DEPDIR)/iptables_multi-iptables-standalone.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='iptables-standalone.c' object='iptables_multi-iptables-standalone.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -c -o iptables_multi-iptables-standalone.o `test -f 'iptables-standalone.c' || echo '$(srcdir)/'`iptables-standalone.c
-
-iptables_multi-iptables-standalone.obj: iptables-standalone.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -MT iptables_multi-iptables-standalone.obj -MD -MP -MF "$(DEPDIR)/iptables_multi-iptables-standalone.Tpo" -c -o iptables_multi-iptables-standalone.obj `if test -f 'iptables-standalone.c'; then $(CYGPATH_W) 'iptables-standalone.c'; else $(CYGPATH_W) '$(srcdir)/iptables-standalone.c'; fi`; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_multi-iptables-standalone.Tpo" "$(DEPDIR)/iptables_multi-iptables-standalone.Po"; else rm -f "$(DEPDIR)/iptables_multi-iptables-standalone.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='iptables-standalone.c' object='iptables_multi-iptables-standalone.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -c -o iptables_multi-iptables-standalone.obj `if test -f 'iptables-standalone.c'; then $(CYGPATH_W) 'iptables-standalone.c'; else $(CYGPATH_W) '$(srcdir)/iptables-standalone.c'; fi`
-
-iptables_multi-iptables.o: iptables.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -MT iptables_multi-iptables.o -MD -MP -MF "$(DEPDIR)/iptables_multi-iptables.Tpo" -c -o iptables_multi-iptables.o `test -f 'iptables.c' || echo '$(srcdir)/'`iptables.c; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_multi-iptables.Tpo" "$(DEPDIR)/iptables_multi-iptables.Po"; else rm -f "$(DEPDIR)/iptables_multi-iptables.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='iptables.c' object='iptables_multi-iptables.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -c -o iptables_multi-iptables.o `test -f 'iptables.c' || echo '$(srcdir)/'`iptables.c
-
-iptables_multi-iptables.obj: iptables.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -MT iptables_multi-iptables.obj -MD -MP -MF "$(DEPDIR)/iptables_multi-iptables.Tpo" -c -o iptables_multi-iptables.obj `if test -f 'iptables.c'; then $(CYGPATH_W) 'iptables.c'; else $(CYGPATH_W) '$(srcdir)/iptables.c'; fi`; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_multi-iptables.Tpo" "$(DEPDIR)/iptables_multi-iptables.Po"; else rm -f "$(DEPDIR)/iptables_multi-iptables.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='iptables.c' object='iptables_multi-iptables.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -c -o iptables_multi-iptables.obj `if test -f 'iptables.c'; then $(CYGPATH_W) 'iptables.c'; else $(CYGPATH_W) '$(srcdir)/iptables.c'; fi`
-
-iptables_multi-xtables.o: xtables.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -MT iptables_multi-xtables.o -MD -MP -MF "$(DEPDIR)/iptables_multi-xtables.Tpo" -c -o iptables_multi-xtables.o `test -f 'xtables.c' || echo '$(srcdir)/'`xtables.c; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_multi-xtables.Tpo" "$(DEPDIR)/iptables_multi-xtables.Po"; else rm -f "$(DEPDIR)/iptables_multi-xtables.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='xtables.c' object='iptables_multi-xtables.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -c -o iptables_multi-xtables.o `test -f 'xtables.c' || echo '$(srcdir)/'`xtables.c
-
-iptables_multi-xtables.obj: xtables.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -MT iptables_multi-xtables.obj -MD -MP -MF "$(DEPDIR)/iptables_multi-xtables.Tpo" -c -o iptables_multi-xtables.obj `if test -f 'xtables.c'; then $(CYGPATH_W) 'xtables.c'; else $(CYGPATH_W) '$(srcdir)/xtables.c'; fi`; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_multi-xtables.Tpo" "$(DEPDIR)/iptables_multi-xtables.Po"; else rm -f "$(DEPDIR)/iptables_multi-xtables.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='xtables.c' object='iptables_multi-xtables.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_multi_CFLAGS) $(CFLAGS) -c -o iptables_multi-xtables.obj `if test -f 'xtables.c'; then $(CYGPATH_W) 'xtables.c'; else $(CYGPATH_W) '$(srcdir)/xtables.c'; fi`
-
-iptables_static-iptables-multi.o: iptables-multi.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -MT iptables_static-iptables-multi.o -MD -MP -MF "$(DEPDIR)/iptables_static-iptables-multi.Tpo" -c -o iptables_static-iptables-multi.o `test -f 'iptables-multi.c' || echo '$(srcdir)/'`iptables-multi.c; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_static-iptables-multi.Tpo" "$(DEPDIR)/iptables_static-iptables-multi.Po"; else rm -f "$(DEPDIR)/iptables_static-iptables-multi.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='iptables-multi.c' object='iptables_static-iptables-multi.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -c -o iptables_static-iptables-multi.o `test -f 'iptables-multi.c' || echo '$(srcdir)/'`iptables-multi.c
-
-iptables_static-iptables-multi.obj: iptables-multi.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -MT iptables_static-iptables-multi.obj -MD -MP -MF "$(DEPDIR)/iptables_static-iptables-multi.Tpo" -c -o iptables_static-iptables-multi.obj `if test -f 'iptables-multi.c'; then $(CYGPATH_W) 'iptables-multi.c'; else $(CYGPATH_W) '$(srcdir)/iptables-multi.c'; fi`; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_static-iptables-multi.Tpo" "$(DEPDIR)/iptables_static-iptables-multi.Po"; else rm -f "$(DEPDIR)/iptables_static-iptables-multi.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='iptables-multi.c' object='iptables_static-iptables-multi.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -c -o iptables_static-iptables-multi.obj `if test -f 'iptables-multi.c'; then $(CYGPATH_W) 'iptables-multi.c'; else $(CYGPATH_W) '$(srcdir)/iptables-multi.c'; fi`
-
-iptables_static-iptables-save.o: iptables-save.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -MT iptables_static-iptables-save.o -MD -MP -MF "$(DEPDIR)/iptables_static-iptables-save.Tpo" -c -o iptables_static-iptables-save.o `test -f 'iptables-save.c' || echo '$(srcdir)/'`iptables-save.c; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_static-iptables-save.Tpo" "$(DEPDIR)/iptables_static-iptables-save.Po"; else rm -f "$(DEPDIR)/iptables_static-iptables-save.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='iptables-save.c' object='iptables_static-iptables-save.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -c -o iptables_static-iptables-save.o `test -f 'iptables-save.c' || echo '$(srcdir)/'`iptables-save.c
-
-iptables_static-iptables-save.obj: iptables-save.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -MT iptables_static-iptables-save.obj -MD -MP -MF "$(DEPDIR)/iptables_static-iptables-save.Tpo" -c -o iptables_static-iptables-save.obj `if test -f 'iptables-save.c'; then $(CYGPATH_W) 'iptables-save.c'; else $(CYGPATH_W) '$(srcdir)/iptables-save.c'; fi`; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_static-iptables-save.Tpo" "$(DEPDIR)/iptables_static-iptables-save.Po"; else rm -f "$(DEPDIR)/iptables_static-iptables-save.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='iptables-save.c' object='iptables_static-iptables-save.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -c -o iptables_static-iptables-save.obj `if test -f 'iptables-save.c'; then $(CYGPATH_W) 'iptables-save.c'; else $(CYGPATH_W) '$(srcdir)/iptables-save.c'; fi`
-
-iptables_static-iptables-restore.o: iptables-restore.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -MT iptables_static-iptables-restore.o -MD -MP -MF "$(DEPDIR)/iptables_static-iptables-restore.Tpo" -c -o iptables_static-iptables-restore.o `test -f 'iptables-restore.c' || echo '$(srcdir)/'`iptables-restore.c; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_static-iptables-restore.Tpo" "$(DEPDIR)/iptables_static-iptables-restore.Po"; else rm -f "$(DEPDIR)/iptables_static-iptables-restore.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='iptables-restore.c' object='iptables_static-iptables-restore.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -c -o iptables_static-iptables-restore.o `test -f 'iptables-restore.c' || echo '$(srcdir)/'`iptables-restore.c
-
-iptables_static-iptables-restore.obj: iptables-restore.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -MT iptables_static-iptables-restore.obj -MD -MP -MF "$(DEPDIR)/iptables_static-iptables-restore.Tpo" -c -o iptables_static-iptables-restore.obj `if test -f 'iptables-restore.c'; then $(CYGPATH_W) 'iptables-restore.c'; else $(CYGPATH_W) '$(srcdir)/iptables-restore.c'; fi`; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_static-iptables-restore.Tpo" "$(DEPDIR)/iptables_static-iptables-restore.Po"; else rm -f "$(DEPDIR)/iptables_static-iptables-restore.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='iptables-restore.c' object='iptables_static-iptables-restore.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -c -o iptables_static-iptables-restore.obj `if test -f 'iptables-restore.c'; then $(CYGPATH_W) 'iptables-restore.c'; else $(CYGPATH_W) '$(srcdir)/iptables-restore.c'; fi`
-
-iptables_static-iptables-xml.o: iptables-xml.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -MT iptables_static-iptables-xml.o -MD -MP -MF "$(DEPDIR)/iptables_static-iptables-xml.Tpo" -c -o iptables_static-iptables-xml.o `test -f 'iptables-xml.c' || echo '$(srcdir)/'`iptables-xml.c; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_static-iptables-xml.Tpo" "$(DEPDIR)/iptables_static-iptables-xml.Po"; else rm -f "$(DEPDIR)/iptables_static-iptables-xml.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='iptables-xml.c' object='iptables_static-iptables-xml.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -c -o iptables_static-iptables-xml.o `test -f 'iptables-xml.c' || echo '$(srcdir)/'`iptables-xml.c
-
-iptables_static-iptables-xml.obj: iptables-xml.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -MT iptables_static-iptables-xml.obj -MD -MP -MF "$(DEPDIR)/iptables_static-iptables-xml.Tpo" -c -o iptables_static-iptables-xml.obj `if test -f 'iptables-xml.c'; then $(CYGPATH_W) 'iptables-xml.c'; else $(CYGPATH_W) '$(srcdir)/iptables-xml.c'; fi`; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_static-iptables-xml.Tpo" "$(DEPDIR)/iptables_static-iptables-xml.Po"; else rm -f "$(DEPDIR)/iptables_static-iptables-xml.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='iptables-xml.c' object='iptables_static-iptables-xml.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -c -o iptables_static-iptables-xml.obj `if test -f 'iptables-xml.c'; then $(CYGPATH_W) 'iptables-xml.c'; else $(CYGPATH_W) '$(srcdir)/iptables-xml.c'; fi`
-
-iptables_static-iptables-standalone.o: iptables-standalone.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -MT iptables_static-iptables-standalone.o -MD -MP -MF "$(DEPDIR)/iptables_static-iptables-standalone.Tpo" -c -o iptables_static-iptables-standalone.o `test -f 'iptables-standalone.c' || echo '$(srcdir)/'`iptables-standalone.c; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_static-iptables-standalone.Tpo" "$(DEPDIR)/iptables_static-iptables-standalone.Po"; else rm -f "$(DEPDIR)/iptables_static-iptables-standalone.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='iptables-standalone.c' object='iptables_static-iptables-standalone.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -c -o iptables_static-iptables-standalone.o `test -f 'iptables-standalone.c' || echo '$(srcdir)/'`iptables-standalone.c
-
-iptables_static-iptables-standalone.obj: iptables-standalone.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -MT iptables_static-iptables-standalone.obj -MD -MP -MF "$(DEPDIR)/iptables_static-iptables-standalone.Tpo" -c -o iptables_static-iptables-standalone.obj `if test -f 'iptables-standalone.c'; then $(CYGPATH_W) 'iptables-standalone.c'; else $(CYGPATH_W) '$(srcdir)/iptables-standalone.c'; fi`; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_static-iptables-standalone.Tpo" "$(DEPDIR)/iptables_static-iptables-standalone.Po"; else rm -f "$(DEPDIR)/iptables_static-iptables-standalone.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='iptables-standalone.c' object='iptables_static-iptables-standalone.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -c -o iptables_static-iptables-standalone.obj `if test -f 'iptables-standalone.c'; then $(CYGPATH_W) 'iptables-standalone.c'; else $(CYGPATH_W) '$(srcdir)/iptables-standalone.c'; fi`
-
-iptables_static-iptables.o: iptables.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -MT iptables_static-iptables.o -MD -MP -MF "$(DEPDIR)/iptables_static-iptables.Tpo" -c -o iptables_static-iptables.o `test -f 'iptables.c' || echo '$(srcdir)/'`iptables.c; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_static-iptables.Tpo" "$(DEPDIR)/iptables_static-iptables.Po"; else rm -f "$(DEPDIR)/iptables_static-iptables.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='iptables.c' object='iptables_static-iptables.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -c -o iptables_static-iptables.o `test -f 'iptables.c' || echo '$(srcdir)/'`iptables.c
-
-iptables_static-iptables.obj: iptables.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -MT iptables_static-iptables.obj -MD -MP -MF "$(DEPDIR)/iptables_static-iptables.Tpo" -c -o iptables_static-iptables.obj `if test -f 'iptables.c'; then $(CYGPATH_W) 'iptables.c'; else $(CYGPATH_W) '$(srcdir)/iptables.c'; fi`; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_static-iptables.Tpo" "$(DEPDIR)/iptables_static-iptables.Po"; else rm -f "$(DEPDIR)/iptables_static-iptables.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='iptables.c' object='iptables_static-iptables.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -c -o iptables_static-iptables.obj `if test -f 'iptables.c'; then $(CYGPATH_W) 'iptables.c'; else $(CYGPATH_W) '$(srcdir)/iptables.c'; fi`
-
-iptables_static-xtables.o: xtables.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -MT iptables_static-xtables.o -MD -MP -MF "$(DEPDIR)/iptables_static-xtables.Tpo" -c -o iptables_static-xtables.o `test -f 'xtables.c' || echo '$(srcdir)/'`xtables.c; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_static-xtables.Tpo" "$(DEPDIR)/iptables_static-xtables.Po"; else rm -f "$(DEPDIR)/iptables_static-xtables.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='xtables.c' object='iptables_static-xtables.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -c -o iptables_static-xtables.o `test -f 'xtables.c' || echo '$(srcdir)/'`xtables.c
-
-iptables_static-xtables.obj: xtables.c
-@am__fastdepCC_TRUE@   if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -MT iptables_static-xtables.obj -MD -MP -MF "$(DEPDIR)/iptables_static-xtables.Tpo" -c -o iptables_static-xtables.obj `if test -f 'xtables.c'; then $(CYGPATH_W) 'xtables.c'; else $(CYGPATH_W) '$(srcdir)/xtables.c'; fi`; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/iptables_static-xtables.Tpo" "$(DEPDIR)/iptables_static-xtables.Po"; else rm -f "$(DEPDIR)/iptables_static-xtables.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='xtables.c' object='iptables_static-xtables.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iptables_static_CFLAGS) $(CFLAGS) -c -o iptables_static-xtables.obj `if test -f 'xtables.c'; then $(CYGPATH_W) 'xtables.c'; else $(CYGPATH_W) '$(srcdir)/xtables.c'; fi`
-
-mostlyclean-libtool:
-       -rm -f *.lo
-
-clean-libtool:
-       -rm -rf .libs _libs
-
-distclean-libtool:
-       -rm -f libtool
-uninstall-info-am:
-install-man8: $(man8_MANS) $(man_MANS)
-       @$(NORMAL_INSTALL)
-       test -z "$(man8dir)" || $(mkdir_p) "$(DESTDIR)$(man8dir)"
-       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
-       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-       for i in $$l2; do \
-         case "$$i" in \
-           *.8*) list="$$list $$i" ;; \
-         esac; \
-       done; \
-       for i in $$list; do \
-         if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
-         else file=$$i; fi; \
-         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-         case "$$ext" in \
-           8*) ;; \
-           *) ext='8' ;; \
-         esac; \
-         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-         inst=`echo $$inst | sed -e 's/^.*\///'`; \
-         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
-         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
-       done
-uninstall-man8:
-       @$(NORMAL_UNINSTALL)
-       @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
-       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-       for i in $$l2; do \
-         case "$$i" in \
-           *.8*) list="$$list $$i" ;; \
-         esac; \
-       done; \
-       for i in $$list; do \
-         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-         case "$$ext" in \
-           8*) ;; \
-           *) ext='8' ;; \
-         esac; \
-         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-         inst=`echo $$inst | sed -e 's/^.*\///'`; \
-         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-         echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
-         rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
-       done
-install-includeHEADERS: $(include_HEADERS)
-       @$(NORMAL_INSTALL)
-       test -z "$(includedir)" || $(mkdir_p) "$(DESTDIR)$(includedir)"
-       @list='$(include_HEADERS)'; for p in $$list; do \
-         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-         f=$(am__strip_dir) \
-         echo " $(includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \
-         $(includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \
-       done
-
-uninstall-includeHEADERS:
-       @$(NORMAL_UNINSTALL)
-       @list='$(include_HEADERS)'; for p in $$list; do \
-         f=$(am__strip_dir) \
-         echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \
-         rm -f "$(DESTDIR)$(includedir)/$$f"; \
-       done
-install-iptcHEADERS: $(iptc_HEADERS)
-       @$(NORMAL_INSTALL)
-       test -z "$(iptcdir)" || $(mkdir_p) "$(DESTDIR)$(iptcdir)"
-       @list='$(iptc_HEADERS)'; for p in $$list; do \
-         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-         f=$(am__strip_dir) \
-         echo " $(iptcHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(iptcdir)/$$f'"; \
-         $(iptcHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(iptcdir)/$$f"; \
-       done
-
-uninstall-iptcHEADERS:
-       @$(NORMAL_UNINSTALL)
-       @list='$(iptc_HEADERS)'; for p in $$list; do \
-         f=$(am__strip_dir) \
-         echo " rm -f '$(DESTDIR)$(iptcdir)/$$f'"; \
-         rm -f "$(DESTDIR)$(iptcdir)/$$f"; \
-       done
-
-# 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.
-$(RECURSIVE_TARGETS):
-       @failcom='exit 1'; \
-       for f in x $$MAKEFLAGS; do \
-         case $$f in \
-           *=* | --[!k]*);; \
-           *k*) failcom='fail=yes';; \
-         esac; \
-       done; \
-       dot_seen=no; \
-       target=`echo $@ | sed s/-recursive//`; \
-       list='$(SUBDIRS)'; 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; \
-         (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"
-
-mostlyclean-recursive clean-recursive distclean-recursive \
-maintainer-clean-recursive:
-       @failcom='exit 1'; \
-       for f in x $$MAKEFLAGS; do \
-         case $$f in \
-           *=* | --[!k]*);; \
-           *k*) failcom='fail=yes';; \
-         esac; \
-       done; \
-       dot_seen=no; \
-       case "$@" in \
-         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-         *) list='$(SUBDIRS)' ;; \
-       esac; \
-       rev=''; for subdir in $$list; do \
-         if test "$$subdir" = "."; then :; else \
-           rev="$$subdir $$rev"; \
-         fi; \
-       done; \
-       rev="$$rev ."; \
-       target=`echo $@ | sed s/-recursive//`; \
-       for subdir in $$rev; do \
-         echo "Making $$target in $$subdir"; \
-         if test "$$subdir" = "."; then \
-           local_target="$$target-am"; \
-         else \
-           local_target="$$target"; \
-         fi; \
-         (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-         || eval $$failcom; \
-       done && test -z "$$fail"
-tags-recursive:
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
-       done
-ctags-recursive:
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
-       done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '    { files[$$0] = 1; } \
-              END { for (i in files) print i; }'`; \
-       mkid -fID $$unique
-tags: TAGS
-
-TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       tags=; \
-       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 || \
-             tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
-         fi; \
-       done; \
-       list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '    { files[$$0] = 1; } \
-              END { for (i in files) print i; }'`; \
-       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-         test -n "$$unique" || unique=$$empty_fix; \
-         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-           $$tags $$unique; \
-       fi
-ctags: CTAGS
-CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       tags=; \
-       here=`pwd`; \
-       list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '    { files[$$0] = 1; } \
-              END { for (i in files) print i; }'`; \
-       test -z "$(CTAGS_ARGS)$$tags$$unique" \
-         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-            $$tags $$unique
-
-GTAGS:
-       here=`$(am__cd) $(top_builddir) && pwd` \
-         && cd $(top_srcdir) \
-         && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
-       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-       $(am__remove_distdir)
-       mkdir $(distdir)
-       $(mkdir_p) $(distdir)/extensions $(distdir)/include $(distdir)/include/libiptc
-       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-       list='$(DISTFILES)'; for file in $$list; do \
-         case $$file in \
-           $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-           $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-         esac; \
-         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-         dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-         if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-           dir="/$$dir"; \
-           $(mkdir_p) "$(distdir)$$dir"; \
-         else \
-           dir=''; \
-         fi; \
-         if test -d $$d/$$file; then \
-           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-           fi; \
-           cp -pR $$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 \
-           test -d "$(distdir)/$$subdir" \
-           || $(mkdir_p) "$(distdir)/$$subdir" \
-           || exit 1; \
-           distdir=`$(am__cd) $(distdir) && pwd`; \
-           top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
-           (cd $$subdir && \
-             $(MAKE) $(AM_MAKEFLAGS) \
-               top_distdir="$$top_distdir" \
-               distdir="$$distdir/$$subdir" \
-               distdir) \
-             || exit 1; \
-         fi; \
-       done
-       -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -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 $(SHELL) $(install_sh) -c -m a+r {} {} \; \
-       || chmod -R a+r $(distdir)
-dist-gzip: distdir
-       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-       $(am__remove_distdir)
-
-dist-bzip2: distdir
-       tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
-       $(am__remove_distdir)
-
-dist-tarZ: distdir
-       tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
-       $(am__remove_distdir)
-
-dist-shar: distdir
-       shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
-       $(am__remove_distdir)
-
-dist-zip: distdir
-       -rm -f $(distdir).zip
-       zip -rq $(distdir).zip $(distdir)
-       $(am__remove_distdir)
-
-dist dist-all: distdir
-       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-       $(am__remove_distdir)
-
-# This target untars the dist file and tries a VPATH configuration.  Then
-# it guarantees that the distribution is self-contained by making another
-# tarfile.
-distcheck: dist
-       case '$(DIST_ARCHIVES)' in \
-       *.tar.gz*) \
-         GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
-       *.tar.bz2*) \
-         bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
-       *.tar.Z*) \
-         uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
-       *.shar.gz*) \
-         GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
-       *.zip*) \
-         unzip $(distdir).zip ;;\
-       esac
-       chmod -R a-w $(distdir); chmod a+w $(distdir)
-       mkdir $(distdir)/_build
-       mkdir $(distdir)/_inst
-       chmod a-w $(distdir)
-       dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
-         && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
-         && cd $(distdir)/_build \
-         && ../configure --srcdir=.. --prefix="$$dc_install_base" \
-           $(DISTCHECK_CONFIGURE_FLAGS) \
-         && $(MAKE) $(AM_MAKEFLAGS) \
-         && $(MAKE) $(AM_MAKEFLAGS) dvi \
-         && $(MAKE) $(AM_MAKEFLAGS) check \
-         && $(MAKE) $(AM_MAKEFLAGS) install \
-         && $(MAKE) $(AM_MAKEFLAGS) installcheck \
-         && $(MAKE) $(AM_MAKEFLAGS) uninstall \
-         && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
-               distuninstallcheck \
-         && chmod -R a-w "$$dc_install_base" \
-         && ({ \
-              (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
-              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
-              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
-              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
-                   distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
-             } || { rm -rf "$$dc_destdir"; exit 1; }) \
-         && rm -rf "$$dc_destdir" \
-         && $(MAKE) $(AM_MAKEFLAGS) dist \
-         && rm -rf $(DIST_ARCHIVES) \
-         && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
-       $(am__remove_distdir)
-       @(echo "$(distdir) archives ready for distribution: "; \
-         list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
-         sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}'
-distuninstallcheck:
-       @cd $(distuninstallcheck_dir) \
-       && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
-          || { 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 $(LIBRARIES) $(PROGRAMS) $(MANS) $(HEADERS) config.h
-installdirs: installdirs-recursive
-installdirs-am:
-       for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(includedir)" "$(DESTDIR)$(iptcdir)"; 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:
-       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-         `test -z '$(STRIP)' || \
-           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-       -rm -f libiptc/$(DEPDIR)/$(am__dirstamp)
-       -rm -f libiptc/$(am__dirstamp)
-
-maintainer-clean-generic:
-       @echo "This command is intended for maintainers to use"
-       @echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
-
-clean-am: clean-binPROGRAMS clean-generic clean-libtool \
-       clean-noinstLIBRARIES clean-noinstPROGRAMS clean-sbinPROGRAMS \
-       mostlyclean-am
-
-distclean: distclean-recursive
-       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
-       -rm -rf ./$(DEPDIR) libiptc/$(DEPDIR)
-       -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-       distclean-hdr distclean-libtool distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-info: info-recursive
-
-info-am:
-
-install-data-am: install-includeHEADERS install-iptcHEADERS \
-       install-man
-
-install-exec-am: install-binPROGRAMS install-sbinPROGRAMS
-
-install-info: install-info-recursive
-
-install-man: install-man8
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
-       -rm -rf $(top_srcdir)/autom4te.cache
-       -rm -rf ./$(DEPDIR) libiptc/$(DEPDIR)
-       -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-       mostlyclean-libtool
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am: uninstall-binPROGRAMS uninstall-includeHEADERS \
-       uninstall-info-am uninstall-iptcHEADERS uninstall-man \
-       uninstall-sbinPROGRAMS
-
-uninstall-info: uninstall-info-recursive
-
-uninstall-man: uninstall-man8
-
-.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \
-       check-am clean clean-binPROGRAMS clean-generic clean-libtool \
-       clean-noinstLIBRARIES clean-noinstPROGRAMS clean-recursive \
-       clean-sbinPROGRAMS ctags ctags-recursive dist dist-all \
-       dist-bzip2 dist-gzip dist-shar dist-tarZ dist-zip distcheck \
-       distclean distclean-compile distclean-generic distclean-hdr \
-       distclean-libtool distclean-recursive distclean-tags \
-       distcleancheck distdir distuninstallcheck dvi dvi-am html \
-       html-am info info-am install install-am install-binPROGRAMS \
-       install-data install-data-am install-exec install-exec-am \
-       install-includeHEADERS install-info install-info-am \
-       install-iptcHEADERS install-man install-man8 \
-       install-sbinPROGRAMS install-strip installcheck \
-       installcheck-am installdirs installdirs-am maintainer-clean \
-       maintainer-clean-generic maintainer-clean-recursive \
-       mostlyclean mostlyclean-compile mostlyclean-generic \
-       mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \
-       tags tags-recursive uninstall uninstall-am \
-       uninstall-binPROGRAMS uninstall-includeHEADERS \
-       uninstall-info-am uninstall-iptcHEADERS uninstall-man \
-       uninstall-man8 uninstall-sbinPROGRAMS
-
-
-iptables.8: ${srcdir}/iptables.8.in extensions/matches4.man extensions/targets4.man
-       ${AM_VERBOSE_GEN} sed -e '/@MATCH@/ r extensions/matches4.man' -e '/@TARGET@/ r extensions/targets4.man' $< >$@;
-
-ip6tables.8: ${srcdir}/ip6tables.8.in extensions/matches6.man extensions/targets6.man
-       ${AM_VERBOSE_GEN} sed -e '/@MATCH@/ r extensions/matches6.man' -e '/@TARGET@/ r extensions/targets6.man' $< >$@;
-
-extensions/%:
-       ${MAKE} ${AM_MAKEFLAGS} -C $(@D) $(@F)
-
-.PHONY: tarball
-tarball:
-       rm -Rf /tmp/${PACKAGE_TARNAME}-${PACKAGE_VERSION};
-       pushd ${top_srcdir} && git-archive --prefix=${PACKAGE_TARNAME}-${PACKAGE_VERSION}/ HEAD | tar -C /tmp -x && popd;
-       pushd /tmp/${PACKAGE_TARNAME}-${PACKAGE_VERSION} && ./autogen.sh && popd;
-       tar -C /tmp -cjf ${PACKAGE_TARNAME}-${PACKAGE_VERSION}.tar.bz2 --owner=root --group=root ${PACKAGE_TARNAME}-${PACKAGE_VERSION}/;
-       rm -Rf /tmp/${PACKAGE_TARNAME}-${PACKAGE_VERSION};
-# 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/aclocal.m4 b/aclocal.m4
deleted file mode 100644 (file)
index f136e80..0000000
+++ /dev/null
@@ -1,7530 +0,0 @@
-# generated automatically by aclocal 1.9.6 -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
-# 2005  Free Software Foundation, Inc.
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# 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.
-
-# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
-
-# serial 52 Debian 1.5.26-4 AC_PROG_LIBTOOL
-
-
-# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
-# -----------------------------------------------------------
-# If this macro is not defined by Autoconf, define it here.
-m4_ifdef([AC_PROVIDE_IFELSE],
-         [],
-         [m4_define([AC_PROVIDE_IFELSE],
-                [m4_ifdef([AC_PROVIDE_$1],
-                          [$2], [$3])])])
-
-
-# AC_PROG_LIBTOOL
-# ---------------
-AC_DEFUN([AC_PROG_LIBTOOL],
-[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl
-dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX
-dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX.
-  AC_PROVIDE_IFELSE([AC_PROG_CXX],
-    [AC_LIBTOOL_CXX],
-    [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX
-  ])])
-dnl And a similar setup for Fortran 77 support
-  AC_PROVIDE_IFELSE([AC_PROG_F77],
-    [AC_LIBTOOL_F77],
-    [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77
-])])
-
-dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly.
-dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run
-dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both.
-  AC_PROVIDE_IFELSE([AC_PROG_GCJ],
-    [AC_LIBTOOL_GCJ],
-    [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
-      [AC_LIBTOOL_GCJ],
-      [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],
-       [AC_LIBTOOL_GCJ],
-      [ifdef([AC_PROG_GCJ],
-            [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])
-       ifdef([A][M_PROG_GCJ],
-            [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])])
-       ifdef([LT_AC_PROG_GCJ],
-            [define([LT_AC_PROG_GCJ],
-               defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])])
-])])# AC_PROG_LIBTOOL
-
-
-# _AC_PROG_LIBTOOL
-# ----------------
-AC_DEFUN([_AC_PROG_LIBTOOL],
-[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
-AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl
-AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl
-AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-AC_SUBST(LIBTOOL)dnl
-
-# Prevent multiple expansion
-define([AC_PROG_LIBTOOL], [])
-])# _AC_PROG_LIBTOOL
-
-
-# AC_LIBTOOL_SETUP
-# ----------------
-AC_DEFUN([AC_LIBTOOL_SETUP],
-[AC_PREREQ(2.50)dnl
-AC_REQUIRE([AC_ENABLE_SHARED])dnl
-AC_REQUIRE([AC_ENABLE_STATIC])dnl
-AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_PROG_LD])dnl
-AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
-AC_REQUIRE([AC_PROG_NM])dnl
-
-AC_REQUIRE([AC_PROG_LN_S])dnl
-AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
-# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
-AC_REQUIRE([AC_OBJEXT])dnl
-AC_REQUIRE([AC_EXEEXT])dnl
-dnl
-AC_LIBTOOL_SYS_MAX_CMD_LEN
-AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
-AC_LIBTOOL_OBJDIR
-
-AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
-_LT_AC_PROG_ECHO_BACKSLASH
-
-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 "X${COLLECT_NAMES+set}" != Xset; then
-    COLLECT_NAMES=
-    export COLLECT_NAMES
-  fi
-  ;;
-esac
-
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e 1s/^X//'
-[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 avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
-# Constants:
-rm="rm -f"
-
-# Global variables:
-default_ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a `.a' archive for static linking (except MSVC,
-# which needs '.lib').
-libext=a
-ltmain="$ac_aux_dir/ltmain.sh"
-ofile="$default_ofile"
-with_gnu_ld="$lt_cv_prog_gnu_ld"
-
-AC_CHECK_TOOL(AR, ar, false)
-AC_CHECK_TOOL(RANLIB, ranlib, :)
-AC_CHECK_TOOL(STRIP, strip, :)
-
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-
-# Set sane defaults for various variables
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-test -z "$AS" && AS=as
-test -z "$CC" && CC=cc
-test -z "$LTCC" && LTCC=$CC
-test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-test -z "$LD" && LD=ld
-test -z "$LN_S" && LN_S="ln -s"
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-test -z "$NM" && NM=nm
-test -z "$SED" && SED=sed
-test -z "$OBJDUMP" && OBJDUMP=objdump
-test -z "$RANLIB" && RANLIB=:
-test -z "$STRIP" && STRIP=:
-test -z "$ac_objext" && ac_objext=o
-
-# 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
-  openbsd*)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
-    ;;
-  *)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
-    ;;
-  esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-fi
-
-_LT_CC_BASENAME([$compiler])
-
-# Only perform the check for file, if the check method requires it
-case $deplibs_check_method in
-file_magic*)
-  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
-    AC_PATH_MAGIC
-  fi
-  ;;
-esac
-
-_LT_REQUIRED_DARWIN_CHECKS
-
-AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
-AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
-enable_win32_dll=yes, enable_win32_dll=no)
-
-AC_ARG_ENABLE([libtool-lock],
-    [AC_HELP_STRING([--disable-libtool-lock],
-       [avoid locking (might break parallel builds)])])
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-AC_ARG_WITH([pic],
-    [AC_HELP_STRING([--with-pic],
-       [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
-    [pic_mode="$withval"],
-    [pic_mode=default])
-test -z "$pic_mode" && pic_mode=default
-
-# Use C for the default configuration in the libtool script
-tagname=
-AC_LIBTOOL_LANG_C_CONFIG
-_LT_AC_TAGCONFIG
-])# AC_LIBTOOL_SETUP
-
-
-# _LT_AC_SYS_COMPILER
-# -------------------
-AC_DEFUN([_LT_AC_SYS_COMPILER],
-[AC_REQUIRE([AC_PROG_CC])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_AC_SYS_COMPILER
-
-
-# _LT_CC_BASENAME(CC)
-# -------------------
-# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
-AC_DEFUN([_LT_CC_BASENAME],
-[for cc_temp in $1""; do
-  case $cc_temp in
-    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
-    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-])
-
-
-# _LT_COMPILER_BOILERPLATE
-# ------------------------
-# Check for compiler boilerplate output or warnings with
-# the simple compiler test code.
-AC_DEFUN([_LT_COMPILER_BOILERPLATE],
-[AC_REQUIRE([LT_AC_PROG_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.
-AC_DEFUN([_LT_LINKER_BOILERPLATE],
-[AC_REQUIRE([LT_AC_PROG_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
-# --------------------------
-# Check for some things on darwin
-AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS],[
-  case $host_os in
-    rhapsody* | darwin*)
-    AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
-    AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
-
-    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.
-   echo "int foo(void){return 1;}" > conftest.c
-   $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
-     -dynamiclib ${wl}-single_module conftest.c
-   if test -f libconftest.dylib; then
-     lt_cv_apple_cc_single_mod=yes
-     rm -rf libconftest.dylib*
-   fi
-   rm conftest.c
-      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"
-    ])
-    case $host_os in
-    rhapsody* | darwin1.[[0123]])
-      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
-    darwin1.*)
-     _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-    darwin*)
-      # 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 "$lt_cv_apple_cc_single_mod" = "yes"; then
-      _lt_dar_single_mod='$single_module'
-    fi
-    if test "$lt_cv_ld_exported_symbols_list" = "yes"; 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" != ":"; then
-      _lt_dsymutil="~$DSYMUTIL \$lib || :"
-    else
-      _lt_dsymutil=
-    fi
-    ;;
-  esac
-])
-
-# _LT_AC_SYS_LIBPATH_AIX
-# ----------------------
-# 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.
-AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_LINK_IFELSE(AC_LANG_PROGRAM,[
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-       /^0/ {
-           s/^0  *\(.*\)$/\1/
-           p
-       }
-    }'
-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 "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi],[])
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-])# _LT_AC_SYS_LIBPATH_AIX
-
-
-# _LT_AC_SHELL_INIT(ARG)
-# ----------------------
-AC_DEFUN([_LT_AC_SHELL_INIT],
-[ifdef([AC_DIVERSION_NOTICE],
-            [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
-        [AC_DIVERT_PUSH(NOTICE)])
-$1
-AC_DIVERT_POP
-])# _LT_AC_SHELL_INIT
-
-
-# _LT_AC_PROG_ECHO_BACKSLASH
-# --------------------------
-# Add some code to the start of the generated configure script which
-# will find an echo command which doesn't interpret backslashes.
-AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
-[_LT_AC_SHELL_INIT([
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$ECHO in
-X*--fallback-echo)
-  # Remove one level of quotation (which was required for Make).
-  ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
-  ;;
-esac
-
-echo=${ECHO-echo}
-if test "X[$]1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X[$]1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
-  # Yippee, $echo works!
-  :
-else
-  # Restart under the correct shell.
-  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
-fi
-
-if test "X[$]1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<EOF
-[$]*
-EOF
-  exit 0
-fi
-
-# 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
-
-if test -z "$ECHO"; then
-if test "X${echo_test_string+set}" != Xset; then
-# find a string as large as possible, as long as the shell can cope with it
-  for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
-    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-    if (echo_test_string=`eval $cmd`) 2>/dev/null &&
-       echo_test_string=`eval $cmd` &&
-       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
-    then
-      break
-    fi
-  done
-fi
-
-if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
-   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
-   test "X$echo_testing_string" = "X$echo_test_string"; then
-  :
-else
-  # The Solaris, AIX, and Digital Unix default echo programs unquote
-  # backslashes.  This makes it impossible to quote backslashes using
-  #   echo "$something" | sed 's/\\/\\\\/g'
-  #
-  # So, first we look for a working echo in the user's PATH.
-
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  for dir in $PATH /usr/ucb; do
-    IFS="$lt_save_ifs"
-    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
-       test "X$echo_testing_string" = "X$echo_test_string"; then
-      echo="$dir/echo"
-      break
-    fi
-  done
-  IFS="$lt_save_ifs"
-
-  if test "X$echo" = Xecho; then
-    # We didn't find a better echo, so look for alternatives.
-    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
-       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
-       test "X$echo_testing_string" = "X$echo_test_string"; then
-      # This shell has a builtin print -r that does the trick.
-      echo='print -r'
-    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
-        test "X$CONFIG_SHELL" != X/bin/ksh; then
-      # If we have ksh, try running configure again with it.
-      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-      export ORIGINAL_CONFIG_SHELL
-      CONFIG_SHELL=/bin/ksh
-      export CONFIG_SHELL
-      exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
-    else
-      # Try using printf.
-      echo='printf %s\n'
-      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
-        echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
-        test "X$echo_testing_string" = "X$echo_test_string"; then
-       # Cool, printf works
-       :
-      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-          test "X$echo_testing_string" = 'X\t' &&
-          echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-          test "X$echo_testing_string" = "X$echo_test_string"; then
-       CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
-       export CONFIG_SHELL
-       SHELL="$CONFIG_SHELL"
-       export SHELL
-       echo="$CONFIG_SHELL [$]0 --fallback-echo"
-      elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
-          test "X$echo_testing_string" = 'X\t' &&
-          echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-          test "X$echo_testing_string" = "X$echo_test_string"; then
-       echo="$CONFIG_SHELL [$]0 --fallback-echo"
-      else
-       # maybe with a smaller string...
-       prev=:
-
-       for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
-         if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
-         then
-           break
-         fi
-         prev="$cmd"
-       done
-
-       if test "$prev" != 'sed 50q "[$]0"'; then
-         echo_test_string=`eval $prev`
-         export echo_test_string
-         exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
-       else
-         # Oops.  We lost completely, so just stick with echo.
-         echo=echo
-       fi
-      fi
-    fi
-  fi
-fi
-fi
-
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-ECHO=$echo
-if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
-   ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
-fi
-
-AC_SUBST(ECHO)
-])])# _LT_AC_PROG_ECHO_BACKSLASH
-
-
-# _LT_AC_LOCK
-# -----------
-AC_DEFUN([_LT_AC_LOCK],
-[AC_ARG_ENABLE([libtool-lock],
-    [AC_HELP_STRING([--disable-libtool-lock],
-       [avoid locking (might break parallel builds)])])
-test "x$enable_libtool_lock" != xno && 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 which ABI we are using.
-  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 which ABI we are using.
-  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
-  if AC_TRY_EVAL(ac_compile); then
-   if test "$lt_cv_prog_gnu_ld" = yes; 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*
-  ;;
-
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
-s390*-*linux*|sparc*-*linux*)
-  # Find out which ABI we are using.
-  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*)
-          LD="${LD-ld} -m elf_i386"
-          ;;
-        ppc64-*linux*|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"
-          ;;
-        ppc*-*linux*|powerpc*-*linux*)
-          LD="${LD-ld} -m elf64ppc"
-          ;;
-        s390*-*linux*)
-          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_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
-     AC_LANG_POP])
-  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
-    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
-    CFLAGS="$SAVE_CFLAGS"
-  fi
-  ;;
-sparc*-*solaris*)
-  # Find out which ABI we are using.
-  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*) LD="${LD-ld} -m elf64_sparc" ;;
-      *)
-        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*
-  ;;
-
-AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
-[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
-  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
-  AC_CHECK_TOOL(AS, as, false)
-  AC_CHECK_TOOL(OBJDUMP, objdump, false)
-  ;;
-  ])
-esac
-
-need_locks="$enable_libtool_lock"
-
-])# _LT_AC_LOCK
-
-
-# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-#              [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
-# ----------------------------------------------------------------
-# Check whether the given compiler option works
-AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION],
-[AC_REQUIRE([LT_AC_PROG_SED])
-AC_CACHE_CHECK([$1], [$2],
-  [$2=no
-  ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$3"
-   # 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:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&AS_MESSAGE_LOG_FD
-   echo "$as_me:__oline__: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 x"[$]$2" = xyes; then
-    ifelse([$5], , :, [$5])
-else
-    ifelse([$6], , :, [$6])
-fi
-])# AC_LIBTOOL_COMPILER_OPTION
-
-
-# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
-#                          [ACTION-SUCCESS], [ACTION-FAILURE])
-# ------------------------------------------------------------
-# Check whether the given compiler option works
-AC_DEFUN([AC_LIBTOOL_LINKER_OPTION],
-[AC_REQUIRE([LT_AC_PROG_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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/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 x"[$]$2" = xyes; then
-    ifelse([$4], , :, [$4])
-else
-    ifelse([$5], , :, [$5])
-fi
-])# AC_LIBTOOL_LINKER_OPTION
-
-
-# AC_LIBTOOL_SYS_MAX_CMD_LEN
-# --------------------------
-AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN],
-[# 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*)
-    # 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;
-    ;;
-
-  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;
-    ;;
-
-  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
-    # 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
-    ;;
-
-  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"; 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
-      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
-      while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \
-              = "XX$teststring") >/dev/null 2>&1 &&
-             new_result=`expr "X$teststring" : ".*" 2>&1` &&
-             lt_cv_sys_max_cmd_len=$new_result &&
-             test $i != 17 # 1/2 MB should be enough
-      do
-        i=`expr $i + 1`
-        teststring=$teststring$teststring
-      done
-      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
-])# AC_LIBTOOL_SYS_MAX_CMD_LEN
-
-
-# _LT_AC_CHECK_DLFCN
-# ------------------
-AC_DEFUN([_LT_AC_CHECK_DLFCN],
-[AC_CHECK_HEADERS(dlfcn.h)dnl
-])# _LT_AC_CHECK_DLFCN
-
-
-# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
-#                           ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
-# ---------------------------------------------------------------------
-AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
-[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
-if test "$cross_compiling" = yes; then :
-  [$4]
-else
-  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
-  lt_status=$lt_dlunknown
-  cat > conftest.$ac_ext <<EOF
-[#line __oline__ "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
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=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;
-      /* dlclose (self); */
-    }
-  else
-    puts (dlerror ());
-
-    exit (status);
-}]
-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_AC_TRY_DLOPEN_SELF
-
-
-# AC_LIBTOOL_DLOPEN_SELF
-# ----------------------
-AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
-[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
-if test "x$enable_dlopen" != xyes; 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*)
-    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
-    ])
-   ;;
-
-  *)
-    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 "x$lt_cv_dlopen" != xno; then
-    enable_dlopen=yes
-  else
-    enable_dlopen=no
-  fi
-
-  case $lt_cv_dlopen in
-  dlopen)
-    save_CPPFLAGS="$CPPFLAGS"
-    test "x$ac_cv_header_dlfcn_h" = xyes && 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_AC_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 "x$lt_cv_dlopen_self" = xyes; 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_AC_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
-])# AC_LIBTOOL_DLOPEN_SELF
-
-
-# AC_LIBTOOL_PROG_CC_C_O([TAGNAME])
-# ---------------------------------
-# Check to see if options -c and -o are simultaneously supported by compiler
-AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
-AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
-  [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
-  [_LT_AC_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:__oline__: $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:__oline__: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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_AC_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 ..
-   rmdir conftest
-   $rm conftest*
-])
-])# AC_LIBTOOL_PROG_CC_C_O
-
-
-# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME])
-# -----------------------------------------
-# Check to see if we can do hard links to lock some files if needed
-AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS],
-[AC_REQUIRE([_LT_AC_LOCK])dnl
-
-hard_links="nottested"
-if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; 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 "$hard_links" = no; 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
-])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS
-
-
-# AC_LIBTOOL_OBJDIR
-# -----------------
-AC_DEFUN([AC_LIBTOOL_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
-])# AC_LIBTOOL_OBJDIR
-
-
-# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME])
-# ----------------------------------------------
-# Check hardcoding attributes.
-AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH],
-[AC_MSG_CHECKING([how to hardcode library paths into programs])
-_LT_AC_TAGVAR(hardcode_action, $1)=
-if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \
-   test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \
-   test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
-
-  # We can hardcode non-existant directories.
-  if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no &&
-     # 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 "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
-     test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then
-    # Linking always hardcodes the temporary library directory.
-    _LT_AC_TAGVAR(hardcode_action, $1)=relink
-  else
-    # We can link without hardcoding, and we can hardcode nonexisting dirs.
-    _LT_AC_TAGVAR(hardcode_action, $1)=immediate
-  fi
-else
-  # We cannot hardcode anything, or else we can only hardcode existing
-  # directories.
-  _LT_AC_TAGVAR(hardcode_action, $1)=unsupported
-fi
-AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)])
-
-if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then
-  # Fast installation is not supported
-  enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
-  # Fast installation is not necessary
-  enable_fast_install=needless
-fi
-])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH
-
-
-# AC_LIBTOOL_SYS_LIB_STRIP
-# ------------------------
-AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP],
-[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
-])# AC_LIBTOOL_SYS_LIB_STRIP
-
-
-# AC_LIBTOOL_SYS_DYNAMIC_LINKER
-# -----------------------------
-# PORTME Fill in your ld.so characteristics
-AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_MSG_CHECKING([dynamic linker characteristics])
-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"
-m4_if($1,[],[
-if test "$GCC" = yes; then
-  case $host_os in
-    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
-    *) lt_awk_arg="/^libraries:/" ;;
-  esac
-  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-  if echo "$lt_search_path_spec" | grep ';' >/dev/null ; then
-    # 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 -e 's/;/ /g'`
-  else
-    lt_search_path_spec=`echo "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-  fi
-  # 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`
-  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"
-    else
-      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; }
-}'`
-  sys_lib_search_path_spec=`echo $lt_search_path_spec`
-else
-  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi])
-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
-  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
-  need_lib_prefix=no
-  need_version=no
-  hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; 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
-    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
-    # soname into executable. Probably we can add versioning support to
-    # collect2, so additional links can be useful in future.
-    if test "$aix_use_runtimelinking" = yes; then
-      # 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}'
-    else
-      # 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'
-    fi
-    shlibpath_var=LIBPATH
-  fi
-  ;;
-
-amigaos*)
-  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=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $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'
-  ;;
-
-beos*)
-  library_names_spec='${libname}${shared_ext}'
-  dynamic_linker="$host_os ld.so"
-  shlibpath_var=LIBRARY_PATH
-  ;;
-
-bsdi[[45]]*)
-  version_type=linux
-  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*)
-  version_type=windows
-  shrext_cmds=".dll"
-  need_version=no
-  need_lib_prefix=no
-
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32*)
-    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'
-    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="/usr/lib /lib/w32api /lib /usr/local/lib"
-      ;;
-    mingw*)
-      # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        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
-      ;;
-    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
-    ;;
-
-  *)
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
-    ;;
-  esac
-  dynamic_linker='Win32 ld.exe'
-  # 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}${versuffix}$shared_ext ${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
-  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
-  ;;
-
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
-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[[123]]*) 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} $libname${shared_ext}'
-      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
-  ;;
-
-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
-  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 "X$HPUX_IA64_MODE" = X32; then
-      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
-    else
-      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
-    fi
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-   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'
-  ;;
-
-interix[[3-9]]*)
-  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'
-  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 "$lt_cv_prog_gnu_ld" = yes; then
-               version_type=linux
-       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
-  ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-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'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  # 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
-
-  # Append ld.so.conf contents 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;/^$/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
-  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=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=yes
-  ;;
-
-openbsd*)
-  version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
-  need_lib_prefix=no
-  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-  case $host_os in
-    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
-    *)                         need_version=no  ;;
-  esac
-  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
-  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    case $host_os in
-      openbsd2.[[89]] | openbsd2.[[89]].*)
-       shlibpath_overrides_runpath=no
-       ;;
-      *)
-       shlibpath_overrides_runpath=yes
-       ;;
-      esac
-  else
-    shlibpath_overrides_runpath=yes
-  fi
-  ;;
-
-os2*)
-  libname_spec='$name'
-  shrext_cmds=".dll"
-  need_lib_prefix=no
-  library_names_spec='$libname${shared_ext} $libname.a'
-  dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
-  ;;
-
-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
-  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 "$with_gnu_ld" = yes; then
-    need_lib_prefix=no
-  fi
-  need_version=yes
-  ;;
-
-sysv4 | sysv4.3*)
-  version_type=linux
-  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
-      export_dynamic_flag_spec='${wl}-Blargedynsym'
-      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
-    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=freebsd-elf
-  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
-  hardcode_into_libs=yes
-  if test "$with_gnu_ld" = yes; then
-    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
-    shlibpath_overrides_runpath=no
-  else
-    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
-    shlibpath_overrides_runpath=yes
-    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'
-  ;;
-
-uts4*)
-  version_type=linux
-  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 "$dynamic_linker" = no && can_build_shared=no
-
-AC_CACHE_VAL([lt_cv_sys_lib_search_path_spec],
-[lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec"])
-sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-AC_CACHE_VAL([lt_cv_sys_lib_dlsearch_path_spec],
-[lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec"])
-sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
-  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-])# AC_LIBTOOL_SYS_DYNAMIC_LINKER
-
-
-# _LT_AC_TAGCONFIG
-# ----------------
-AC_DEFUN([_LT_AC_TAGCONFIG],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_ARG_WITH([tags],
-    [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@],
-        [include additional configurations @<:@automatic@:>@])],
-    [tagnames="$withval"])
-
-if test -f "$ltmain" && test -n "$tagnames"; then
-  if test ! -f "${ofile}"; then
-    AC_MSG_WARN([output file `$ofile' does not exist])
-  fi
-
-  if test -z "$LTCC"; then
-    eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
-    if test -z "$LTCC"; then
-      AC_MSG_WARN([output file `$ofile' does not look like a libtool script])
-    else
-      AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])
-    fi
-  fi
-  if test -z "$LTCFLAGS"; then
-    eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`"
-  fi
-
-  # Extract list of available tagged configurations in $ofile.
-  # Note that this assumes the entire list is on one line.
-  available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
-
-  lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-  for tagname in $tagnames; do
-    IFS="$lt_save_ifs"
-    # Check whether tagname contains only valid characters
-    case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in
-    "") ;;
-    *)  AC_MSG_ERROR([invalid tag name: $tagname])
-       ;;
-    esac
-
-    if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
-    then
-      AC_MSG_ERROR([tag name \"$tagname\" already exists])
-    fi
-
-    # Update the list of available tags.
-    if test -n "$tagname"; then
-      echo appending configuration tag \"$tagname\" to $ofile
-
-      case $tagname in
-      CXX)
-       if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-           ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-           (test "X$CXX" != "Xg++"))) ; then
-         AC_LIBTOOL_LANG_CXX_CONFIG
-       else
-         tagname=""
-       fi
-       ;;
-
-      F77)
-       if test -n "$F77" && test "X$F77" != "Xno"; then
-         AC_LIBTOOL_LANG_F77_CONFIG
-       else
-         tagname=""
-       fi
-       ;;
-
-      GCJ)
-       if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
-         AC_LIBTOOL_LANG_GCJ_CONFIG
-       else
-         tagname=""
-       fi
-       ;;
-
-      RC)
-       AC_LIBTOOL_LANG_RC_CONFIG
-       ;;
-
-      *)
-       AC_MSG_ERROR([Unsupported tag name: $tagname])
-       ;;
-      esac
-
-      # Append the new tag name to the list of available tags.
-      if test -n "$tagname" ; then
-      available_tags="$available_tags $tagname"
-    fi
-    fi
-  done
-  IFS="$lt_save_ifs"
-
-  # Now substitute the updated list of available tags.
-  if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
-    mv "${ofile}T" "$ofile"
-    chmod +x "$ofile"
-  else
-    rm -f "${ofile}T"
-    AC_MSG_ERROR([unable to update list of available tagged configurations.])
-  fi
-fi
-])# _LT_AC_TAGCONFIG
-
-
-# AC_LIBTOOL_DLOPEN
-# -----------------
-# enable checks for dlopen support
-AC_DEFUN([AC_LIBTOOL_DLOPEN],
- [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])
-])# AC_LIBTOOL_DLOPEN
-
-
-# AC_LIBTOOL_WIN32_DLL
-# --------------------
-# declare package support for building win32 DLLs
-AC_DEFUN([AC_LIBTOOL_WIN32_DLL],
-[AC_BEFORE([$0], [AC_LIBTOOL_SETUP])
-])# AC_LIBTOOL_WIN32_DLL
-
-
-# AC_ENABLE_SHARED([DEFAULT])
-# ---------------------------
-# implement the --enable-shared flag
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-AC_DEFUN([AC_ENABLE_SHARED],
-[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE([shared],
-    [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
-       [build shared libraries @<:@default=]AC_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=]AC_ENABLE_SHARED_DEFAULT)
-])# AC_ENABLE_SHARED
-
-
-# AC_DISABLE_SHARED
-# -----------------
-# set the default shared flag to --disable-shared
-AC_DEFUN([AC_DISABLE_SHARED],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_SHARED(no)
-])# AC_DISABLE_SHARED
-
-
-# AC_ENABLE_STATIC([DEFAULT])
-# ---------------------------
-# implement the --enable-static flag
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-AC_DEFUN([AC_ENABLE_STATIC],
-[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE([static],
-    [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@],
-       [build static libraries @<:@default=]AC_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=]AC_ENABLE_STATIC_DEFAULT)
-])# AC_ENABLE_STATIC
-
-
-# AC_DISABLE_STATIC
-# -----------------
-# set the default static flag to --disable-static
-AC_DEFUN([AC_DISABLE_STATIC],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_STATIC(no)
-])# AC_DISABLE_STATIC
-
-
-# AC_ENABLE_FAST_INSTALL([DEFAULT])
-# ---------------------------------
-# implement the --enable-fast-install flag
-# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
-AC_DEFUN([AC_ENABLE_FAST_INSTALL],
-[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
-AC_ARG_ENABLE([fast-install],
-    [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
-    [optimize for fast installation @<:@default=]AC_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=]AC_ENABLE_FAST_INSTALL_DEFAULT)
-])# AC_ENABLE_FAST_INSTALL
-
-
-# AC_DISABLE_FAST_INSTALL
-# -----------------------
-# set the default to --disable-fast-install
-AC_DEFUN([AC_DISABLE_FAST_INSTALL],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-AC_ENABLE_FAST_INSTALL(no)
-])# AC_DISABLE_FAST_INSTALL
-
-
-# AC_LIBTOOL_PICMODE([MODE])
-# --------------------------
-# implement the --with-pic flag
-# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
-AC_DEFUN([AC_LIBTOOL_PICMODE],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-pic_mode=ifelse($#,1,$1,default)
-])# AC_LIBTOOL_PICMODE
-
-
-# AC_PROG_EGREP
-# -------------
-# This is predefined starting with Autoconf 2.54, so this conditional
-# definition can be removed once we require Autoconf 2.54 or later.
-m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP],
-[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
-   [if echo a | (grep -E '(a|b)') >/dev/null 2>&1
-    then ac_cv_prog_egrep='grep -E'
-    else ac_cv_prog_egrep='egrep'
-    fi])
- EGREP=$ac_cv_prog_egrep
- AC_SUBST([EGREP])
-])])
-
-
-# AC_PATH_TOOL_PREFIX
-# -------------------
-# find a file program which can recognize shared library
-AC_DEFUN([AC_PATH_TOOL_PREFIX],
-[AC_REQUIRE([AC_PROG_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="ifelse([$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 <<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
-
-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
-])# AC_PATH_TOOL_PREFIX
-
-
-# AC_PATH_MAGIC
-# -------------
-# find a file program which can recognize a shared library
-AC_DEFUN([AC_PATH_MAGIC],
-[AC_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
-    AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
-  else
-    MAGIC_CMD=:
-  fi
-fi
-])# AC_PATH_MAGIC
-
-
-# AC_PROG_LD
-# ----------
-# find the pathname to the GNU or non-GNU linker
-AC_DEFUN([AC_PROG_LD],
-[AC_ARG_WITH([gnu-ld],
-    [AC_HELP_STRING([--with-gnu-ld],
-       [assume the C compiler uses GNU ld @<:@default=no@:>@])],
-    [test "$withval" = no || with_gnu_ld=yes],
-    [with_gnu_ld=no])
-AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_REQUIRE([AC_PROG_CC])dnl
-AC_REQUIRE([AC_CANONICAL_HOST])dnl
-AC_REQUIRE([AC_CANONICAL_BUILD])dnl
-ac_prog=ld
-if test "$GCC" = yes; 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 "$with_gnu_ld" = yes; 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 "$with_gnu_ld" != no && break
-       ;;
-      *)
-       test "$with_gnu_ld" != yes && 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])
-AC_PROG_LD_GNU
-])# AC_PROG_LD
-
-
-# AC_PROG_LD_GNU
-# --------------
-AC_DEFUN([AC_PROG_LD_GNU],
-[AC_REQUIRE([AC_PROG_EGREP])dnl
-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
-])# AC_PROG_LD_GNU
-
-
-# AC_PROG_LD_RELOAD_FLAG
-# ----------------------
-# find reload flag for linker
-#   -- PORTME Some linkers may need a different reload flag.
-AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
-[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
-  darwin*)
-    if test "$GCC" = yes; then
-      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
-    else
-      reload_cmds='$LD$reload_flag -o $output$reload_objs'
-    fi
-    ;;
-esac
-])# AC_PROG_LD_RELOAD_FLAG
-
-
-# AC_DEPLIBS_CHECK_METHOD
-# -----------------------
-# how to check for library dependencies
-#  -- PORTME fill in with the dynamic library characteristics
-AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
-[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
-# which 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
-    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-    lt_cv_file_magic_cmd='$OBJDUMP -f'
-  fi
-  ;;
-
-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
-  ;;
-
-gnu*)
-  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]) 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 Linux ELF.
-linux* | k*bsd*-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=unknown
-  ;;
-
-openbsd*)
-  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; 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
-  ;;
-
-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
-  ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-esac
-])
-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
-])# AC_DEPLIBS_CHECK_METHOD
-
-
-# AC_PROG_NM
-# ----------
-# find the pathname to a BSD-compatible name lister
-AC_DEFUN([AC_PROG_NM],
-[AC_CACHE_CHECK([for BSD-compatible 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
-       case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
-       */dev/null* | *'Invalid file or object type'*)
-         lt_cv_path_NM="$tmp_nm -B"
-         break
-         ;;
-       *)
-         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
-         */dev/null*)
-           lt_cv_path_NM="$tmp_nm -p"
-           break
-           ;;
-         *)
-           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
-  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
-fi])
-NM="$lt_cv_path_NM"
-])# AC_PROG_NM
-
-
-# AC_CHECK_LIBM
-# -------------
-# check for math library
-AC_DEFUN([AC_CHECK_LIBM],
-[AC_REQUIRE([AC_CANONICAL_HOST])dnl
-LIBM=
-case $host in
-*-*-beos* | *-*-cygwin* | *-*-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_CHECK_LIBM
-
-
-# AC_LIBLTDL_CONVENIENCE([DIRECTORY])
-# -----------------------------------
-# sets LIBLTDL to the link flags for the libltdl convenience library and
-# LTDLINCL to the include flags for the libltdl header and adds
-# --enable-ltdl-convenience to the configure arguments.  Note that
-# AC_CONFIG_SUBDIRS is not called here.  If DIRECTORY is not provided,
-# it is assumed to be `libltdl'.  LIBLTDL will be prefixed with
-# '${top_builddir}/' and LTDLINCL will be prefixed with '${top_srcdir}/'
-# (note the single quotes!).  If your package is not flat and you're not
-# using automake, define top_builddir and top_srcdir appropriately in
-# the Makefiles.
-AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-  case $enable_ltdl_convenience in
-  no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
-  "") enable_ltdl_convenience=yes
-      ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
-  esac
-  LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
-  LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
-  # For backwards non-gettext consistent compatibility...
-  INCLTDL="$LTDLINCL"
-])# AC_LIBLTDL_CONVENIENCE
-
-
-# AC_LIBLTDL_INSTALLABLE([DIRECTORY])
-# -----------------------------------
-# sets LIBLTDL to the link flags for the libltdl installable library and
-# LTDLINCL to the include flags for the libltdl header and adds
-# --enable-ltdl-install to the configure arguments.  Note that
-# AC_CONFIG_SUBDIRS is not called here.  If DIRECTORY is not provided,
-# and an installed libltdl is not found, it is assumed to be `libltdl'.
-# LIBLTDL will be prefixed with '${top_builddir}/'# and LTDLINCL with
-# '${top_srcdir}/' (note the single quotes!).  If your package is not
-# flat and you're not using automake, define top_builddir and top_srcdir
-# appropriately in the Makefiles.
-# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
-AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
-[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
-  AC_CHECK_LIB(ltdl, lt_dlinit,
-  [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
-  [if test x"$enable_ltdl_install" = xno; then
-     AC_MSG_WARN([libltdl not installed, but installation disabled])
-   else
-     enable_ltdl_install=yes
-   fi
-  ])
-  if test x"$enable_ltdl_install" = x"yes"; then
-    ac_configure_args="$ac_configure_args --enable-ltdl-install"
-    LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
-    LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
-  else
-    ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
-    LIBLTDL="-lltdl"
-    LTDLINCL=
-  fi
-  # For backwards non-gettext consistent compatibility...
-  INCLTDL="$LTDLINCL"
-])# AC_LIBLTDL_INSTALLABLE
-
-
-# AC_LIBTOOL_CXX
-# --------------
-# enable support for C++ libraries
-AC_DEFUN([AC_LIBTOOL_CXX],
-[AC_REQUIRE([_LT_AC_LANG_CXX])
-])# AC_LIBTOOL_CXX
-
-
-# _LT_AC_LANG_CXX
-# ---------------
-AC_DEFUN([_LT_AC_LANG_CXX],
-[AC_REQUIRE([AC_PROG_CXX])
-AC_REQUIRE([_LT_AC_PROG_CXXCPP])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX])
-])# _LT_AC_LANG_CXX
-
-# _LT_AC_PROG_CXXCPP
-# ------------------
-AC_DEFUN([_LT_AC_PROG_CXXCPP],
-[
-AC_REQUIRE([AC_PROG_CXX])
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-    (test "X$CXX" != "Xg++"))) ; then
-  AC_PROG_CXXCPP
-fi
-])# _LT_AC_PROG_CXXCPP
-
-# AC_LIBTOOL_F77
-# --------------
-# enable support for Fortran 77 libraries
-AC_DEFUN([AC_LIBTOOL_F77],
-[AC_REQUIRE([_LT_AC_LANG_F77])
-])# AC_LIBTOOL_F77
-
-
-# _LT_AC_LANG_F77
-# ---------------
-AC_DEFUN([_LT_AC_LANG_F77],
-[AC_REQUIRE([AC_PROG_F77])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77])
-])# _LT_AC_LANG_F77
-
-
-# AC_LIBTOOL_GCJ
-# --------------
-# enable support for GCJ libraries
-AC_DEFUN([AC_LIBTOOL_GCJ],
-[AC_REQUIRE([_LT_AC_LANG_GCJ])
-])# AC_LIBTOOL_GCJ
-
-
-# _LT_AC_LANG_GCJ
-# ---------------
-AC_DEFUN([_LT_AC_LANG_GCJ],
-[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[],
-  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[],
-    [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[],
-      [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])],
-        [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])],
-          [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ])
-])# _LT_AC_LANG_GCJ
-
-
-# AC_LIBTOOL_RC
-# -------------
-# enable support for Windows resource files
-AC_DEFUN([AC_LIBTOOL_RC],
-[AC_REQUIRE([LT_AC_PROG_RC])
-_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC])
-])# AC_LIBTOOL_RC
-
-
-# AC_LIBTOOL_LANG_C_CONFIG
-# ------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined.  Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG])
-AC_DEFUN([_LT_AC_LANG_C_CONFIG],
-[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_AC_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_AC_SYS_COMPILER
-
-# save warnings/boilerplate of simple test code
-_LT_COMPILER_BOILERPLATE
-_LT_LINKER_BOILERPLATE
-
-AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-AC_LIBTOOL_SYS_LIB_STRIP
-AC_LIBTOOL_DLOPEN_SELF
-
-# Report which 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 "$can_build_shared" = "no" && 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 "$enable_shared" = yes && enable_static=no
-  if test -n "$RANLIB"; then
-    archive_cmds="$archive_cmds~\$RANLIB \$lib"
-    postinstall_cmds='$RANLIB $lib'
-  fi
-  ;;
-
-aix[[4-9]]*)
-  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-    test "$enable_shared" = yes && enable_static=no
-  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 "$enable_shared" = yes || enable_static=yes
-AC_MSG_RESULT([$enable_static])
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_POP
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_C_CONFIG
-
-
-# AC_LIBTOOL_LANG_CXX_CONFIG
-# --------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined.  Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)])
-AC_DEFUN([_LT_AC_LANG_CXX_CONFIG],
-[AC_LANG_PUSH(C++)
-AC_REQUIRE([AC_PROG_CXX])
-AC_REQUIRE([_LT_AC_PROG_CXXCPP])
-
-_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_AC_TAGVAR(allow_undefined_flag, $1)=
-_LT_AC_TAGVAR(always_export_symbols, $1)=no
-_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
-_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_direct, $1)=no
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
-_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-_LT_AC_TAGVAR(hardcode_automatic, $1)=no
-_LT_AC_TAGVAR(module_cmds, $1)=
-_LT_AC_TAGVAR(module_expsym_cmds, $1)=
-_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_AC_TAGVAR(no_undefined_flag, $1)=
-_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-
-# Dependencies to place before and after the object being linked:
-_LT_AC_TAGVAR(predep_objects, $1)=
-_LT_AC_TAGVAR(postdep_objects, $1)=
-_LT_AC_TAGVAR(predeps, $1)=
-_LT_AC_TAGVAR(postdeps, $1)=
-_LT_AC_TAGVAR(compiler_lib_search_path, $1)=
-_LT_AC_TAGVAR(compiler_lib_search_dirs, $1)=
-
-# Source file extension for C++ test sources.
-ac_ext=cpp
-
-# Object file extension for compiled C++ test sources.
-objext=o
-_LT_AC_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(int, char *[[]]) { return(0); }'
-
-# ltmain only uses $CC for tagged configurations so make sure $CC is set.
-_LT_AC_SYS_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_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++"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-
-# We don't want -fno-exception wen compiling C++ code, so set the
-# no_builtin_flag separately
-if test "$GXX" = yes; then
-  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-else
-  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-fi
-
-if test "$GXX" = yes; then
-  # Set up default GNU C++ configuration
-
-  AC_PROG_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 "$with_gnu_ld" = yes; then
-    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-
-    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
-    _LT_AC_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_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-    else
-      _LT_AC_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_AC_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 "\-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_AC_TAGVAR(ld_shlibs, $1)=yes
-case $host_os in
-  aix3*)
-    # FIXME: insert proper C++ library support
-    _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    ;;
-  aix[[4-9]]*)
-    if test "$host_cpu" = ia64; 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
-      # need to do runtime linking.
-      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
-       ;;
-      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_AC_TAGVAR(archive_cmds, $1)=''
-    _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
-    _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-
-    if test "$GXX" = yes; 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_AC_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_AC_TAGVAR(hardcode_minus_L, $1)=yes
-         _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-         _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
-       fi
-       ;;
-      esac
-      shared_flag='-shared'
-      if test "$aix_use_runtimelinking" = yes; then
-       shared_flag="$shared_flag "'${wl}-G'
-      fi
-    else
-      # not using gcc
-      if test "$host_cpu" = ia64; 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 "$aix_use_runtimelinking" = yes; then
-         shared_flag='${wl}-G'
-       else
-         shared_flag='${wl}-bM:SRE'
-       fi
-      fi
-    fi
-
-    # It seems that -bexpall does not export symbols beginning with
-    # underscore (_), so it is better to generate a list of symbols to export.
-    _LT_AC_TAGVAR(always_export_symbols, $1)=yes
-    if test "$aix_use_runtimelinking" = yes; then
-      # Warning - without using the other runtime loading flags (-brtl),
-      # -berok will link without error, but may produce a broken library.
-      _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
-      # Determine the default libpath from the value encoded in an empty executable.
-      _LT_AC_SYS_LIBPATH_AIX
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-
-      _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-     else
-      if test "$host_cpu" = ia64; then
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
-       _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-       _LT_AC_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_AC_SYS_LIBPATH_AIX
-       _LT_AC_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_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-       _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-       # Exported symbols can be pulled into shared objects from archives
-       _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
-       _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
-       # This is similar to how AIX traditionally builds its shared libraries.
-       _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-      fi
-    fi
-    ;;
-
-  beos*)
-    if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
-      # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
-      # support --undefined.  This deserves some investigation.  FIXME
-      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-    else
-      _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    fi
-    ;;
-
-  chorus*)
-    case $cc_basename in
-      *)
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-    esac
-    ;;
-
-  cygwin* | mingw* | pw32*)
-    # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-    # as there is no search path for DLLs.
-    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-    _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
-    _LT_AC_TAGVAR(always_export_symbols, $1)=no
-    _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-
-    if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-      _LT_AC_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 (1st line
-      # is EXPORTS), use it as is; otherwise, prepend...
-      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; 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_AC_TAGVAR(ld_shlibs, $1)=no
-    fi
-  ;;
-      darwin* | rhapsody*)
-      _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_AC_TAGVAR(hardcode_direct, $1)=no
-      _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
-      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-      _LT_AC_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
-      if test "$GXX" = yes ; then
-      output_verbose_link_cmd='echo'
-      _LT_AC_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_AC_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-      _LT_AC_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_AC_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}"
-      if test "$lt_cv_apple_cc_single_mod" != "yes"; then
-        _LT_AC_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_AC_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
-      case $cc_basename in
-        xlc*)
-         output_verbose_link_cmd='echo'
-          _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring'
-          _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-          _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          ;;
-       *)
-         _LT_AC_TAGVAR(ld_shlibs, $1)=no
-          ;;
-      esac
-      fi
-        ;;
-
-  dgux*)
-    case $cc_basename in
-      ec++*)
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-      ghcx*)
-       # Green Hills C++ Compiler
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-      *)
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-    esac
-    ;;
-  freebsd[[12]]*)
-    # C++ shared libraries reported to be fairly broken before switch to ELF
-    _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    ;;
-  freebsd-elf*)
-    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-    ;;
-  freebsd* | dragonfly*)
-    # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
-    # conventions
-    _LT_AC_TAGVAR(ld_shlibs, $1)=yes
-    ;;
-  gnu*)
-    ;;
-  hpux9*)
-    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-    _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-    _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
-      ;;
-    aCC*)
-      _LT_AC_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 $output_objdir/$soname = $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) | grep "[[-]]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-      ;;
-    *)
-      if test "$GXX" = yes; then
-        _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      else
-        # FIXME: insert proper C++ library support
-        _LT_AC_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-    esac
-    ;;
-  hpux10*|hpux11*)
-    if test $with_gnu_ld = no; then
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
-      case $host_cpu in
-      hppa*64*|ia64*) ;;
-      *)
-       _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-        ;;
-      esac
-    fi
-    case $host_cpu in
-    hppa*64*|ia64*)
-      _LT_AC_TAGVAR(hardcode_direct, $1)=no
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-    *)
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-      aCC*)
-       case $host_cpu in
-       hppa*64*)
-         _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-         ;;
-       ia64*)
-         _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-         ;;
-       *)
-         _LT_AC_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; echo $list'
-       ;;
-      *)
-       if test "$GXX" = yes; then
-         if test $with_gnu_ld = no; then
-           case $host_cpu in
-           hppa*64*)
-             _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-             ;;
-           ia64*)
-             _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-             ;;
-           *)
-             _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${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_AC_TAGVAR(ld_shlibs, $1)=no
-       fi
-       ;;
-    esac
-    ;;
-  interix[[3-9]]*)
-    _LT_AC_TAGVAR(hardcode_direct, $1)=no
-    _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-    _LT_AC_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_AC_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_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -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_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
-       ;;
-      *)
-       if test "$GXX" = yes; then
-         if test "$with_gnu_ld" = no; then
-           _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-         else
-           _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib'
-         fi
-       fi
-       _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-       ;;
-    esac
-    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-    ;;
-  linux* | k*bsd*-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_AC_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_AC_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; echo $list'
-
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir'
-       _LT_AC_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_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
-       ;;
-      icpc*)
-       # 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_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-         _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-         _LT_AC_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_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-       _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-       _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
-       ;;
-      pgCC* | pgcpp*)
-        # Portland Group C++ compiler
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
-       _LT_AC_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'
-
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
-       _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
-       _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-        ;;
-      cxx*)
-       # Compaq C++
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-       _LT_AC_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=`echo $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; echo $list'
-       ;;
-      *)
-       case `$CC -V 2>&1 | sed 5q` in
-       *Sun\ C*)
-         # Sun C++ 5.9
-         _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
-         _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-         _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-         _LT_AC_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; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-
-         # Not sure whether something based on
-         # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
-         # would be better.
-         output_verbose_link_cmd='echo'
-
-         # 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_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
-         ;;
-       esac
-       ;;
-    esac
-    ;;
-  lynxos*)
-    # FIXME: insert proper C++ library support
-    _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    ;;
-  m88k*)
-    # FIXME: insert proper C++ library support
-    _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    ;;
-  mvs*)
-    case $cc_basename in
-      cxx*)
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-      *)
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-    esac
-    ;;
-  netbsd* | netbsdelf*-gnu)
-    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
-      wlarc=
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_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::"'
-    ;;
-  openbsd2*)
-    # C++ shared libraries are fairly broken
-    _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    ;;
-  openbsd*)
-    if test -f /usr/libexec/ld.so; then
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-       _LT_AC_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_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-       _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-      fi
-      output_verbose_link_cmd='echo'
-    else
-      _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    fi
-    ;;
-  osf3*)
-    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_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-       _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
-       # Archives containing C++ object files must be created using
-       # "CC -Bstatic", where "CC" is the KAI C++ compiler.
-       _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
-
-       ;;
-      RCC*)
-       # Rational C++ 2.4.1
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-      cxx*)
-       _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-       _LT_AC_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=`echo $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; echo $list'
-       ;;
-      *)
-       if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-         _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-         _LT_AC_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" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-
-         _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-         _LT_AC_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 "\-L"'
-
-       else
-         # FIXME: insert proper C++ library support
-         _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       fi
-       ;;
-    esac
-    ;;
-  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_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-       _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
-       # Archives containing C++ object files must be created using
-       # the KAI C++ compiler.
-       _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs'
-       ;;
-      RCC*)
-       # Rational C++ 2.4.1
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-      cxx*)
-       _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-       _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-       _LT_AC_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=`echo $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; echo $list'
-       ;;
-      *)
-       if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-         _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-        _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-
-         _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-         _LT_AC_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 "\-L"'
-
-       else
-         # FIXME: insert proper C++ library support
-         _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       fi
-       ;;
-    esac
-    ;;
-  psos*)
-    # FIXME: insert proper C++ library support
-    _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    ;;
-  sunos4*)
-    case $cc_basename in
-      CC*)
-       # Sun C++ 4.x
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-      lcc*)
-       # Lucid
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-      *)
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-    esac
-    ;;
-  solaris*)
-    case $cc_basename in
-      CC*)
-       # Sun C++ 4.2, 5.x and Centerline C++
-        _LT_AC_TAGVAR(archive_cmds_need_lc,$1)=yes
-       _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-       _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-       _LT_AC_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_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
-           ;;
-       esac
-       _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-
-       output_verbose_link_cmd='echo'
-
-       # 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_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
-       ;;
-      gcx*)
-       # Green Hills C++ Compiler
-       _LT_AC_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_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
-       ;;
-      *)
-       # GNU C++ compiler with Solaris linker
-       if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-         _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
-         if $CC --version | grep -v '^2\.7' > /dev/null; then
-           _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-           _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-               $CC -shared -nostdlib ${wl}-M $wl$lib.exp -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 \"\-L\""
-         else
-           # g++ 2.7 appears to require `-G' NOT `-shared' on this
-           # platform.
-           _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
-           _LT_AC_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 -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 \"\-L\""
-         fi
-
-         _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
-         case $host_os in
-         solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
-         *)
-           _LT_AC_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_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-    _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-    runpath_var='LD_RUN_PATH'
-
-    case $cc_basename in
-      CC*)
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       ;;
-      *)
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       _LT_AC_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 can NOT 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.
-    # 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.
-    # So that behaviour is only enabled if SCOABSPATH is set to a
-    # non-empty value in the environment.  Most likely only useful for
-    # creating official distributions of packages.
-    # This is a hack until libtool officially supports absolute path
-    # names for shared libraries.
-    _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-    _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
-    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-    _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
-    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
-    _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
-    runpath_var='LD_RUN_PATH'
-
-    case $cc_basename in
-      CC*)
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-       _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-       ;;
-      *)
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-       _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$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_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-      *)
-       # FIXME: insert proper C++ library support
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       ;;
-    esac
-    ;;
-  vxworks*)
-    # FIXME: insert proper C++ library support
-    _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    ;;
-  *)
-    # FIXME: insert proper C++ library support
-    _LT_AC_TAGVAR(ld_shlibs, $1)=no
-    ;;
-esac
-AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
-test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-_LT_AC_TAGVAR(GCC, $1)="$GXX"
-_LT_AC_TAGVAR(LD, $1)="$LD"
-
-AC_LIBTOOL_POSTDEP_PREDEP($1)
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_POP
-CC=$lt_save_CC
-LDCXX=$LD
-LD=$lt_save_LD
-GCC=$lt_save_GCC
-with_gnu_ldcxx=$with_gnu_ld
-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
-])# AC_LIBTOOL_LANG_CXX_CONFIG
-
-# AC_LIBTOOL_POSTDEP_PREDEP([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.
-AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-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...
-ifelse([$1],[],[cat > conftest.$ac_ext <<EOF
-int a;
-void foo (void) { a = 0; }
-EOF
-],[$1],[CXX],[cat > conftest.$ac_ext <<EOF
-class Foo
-{
-public:
-  Foo (void) { a = 0; }
-private:
-  int a;
-};
-EOF
-],[$1],[F77],[cat > conftest.$ac_ext <<EOF
-      subroutine foo
-      implicit none
-      integer*4 a
-      a=0
-      return
-      end
-EOF
-],[$1],[GCJ],[cat > conftest.$ac_ext <<EOF
-public class foo {
-  private int a;
-  public void bar (void) {
-    a = 0;
-  }
-};
-EOF
-])
-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
-
-  # The `*' in the case matches for architectures that use `case' in
-  # $output_verbose_cmd can trigger glob expansion during the loop
-  # eval without this substitution.
-  output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"`
-
-  for p in `eval $output_verbose_link_cmd`; do
-    case $p in
-
-    -L* | -R* | -l*)
-       # Some compilers place space between "-{L,R}" and the path.
-       # Remove the space.
-       if test $p = "-L" \
-         || test $p = "-R"; then
-        prev=$p
-        continue
-       else
-        prev=
-       fi
-
-       if test "$pre_test_object_deps_done" = no; then
-        case $p 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_AC_TAGVAR(compiler_lib_search_path, $1)"; then
-            _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
-          else
-            _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${_LT_AC_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_AC_TAGVAR(postdeps, $1)"; then
-          _LT_AC_TAGVAR(postdeps, $1)="${prev}${p}"
-        else
-          _LT_AC_TAGVAR(postdeps, $1)="${_LT_AC_TAGVAR(postdeps, $1)} ${prev}${p}"
-        fi
-       fi
-       ;;
-
-    *.$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 "$pre_test_object_deps_done" = no; then
-        if test -z "$_LT_AC_TAGVAR(predep_objects, $1)"; then
-          _LT_AC_TAGVAR(predep_objects, $1)="$p"
-        else
-          _LT_AC_TAGVAR(predep_objects, $1)="$_LT_AC_TAGVAR(predep_objects, $1) $p"
-        fi
-       else
-        if test -z "$_LT_AC_TAGVAR(postdep_objects, $1)"; then
-          _LT_AC_TAGVAR(postdep_objects, $1)="$p"
-        else
-          _LT_AC_TAGVAR(postdep_objects, $1)="$_LT_AC_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
-
-_LT_AC_TAGVAR(compiler_lib_search_dirs, $1)=
-if test -n "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then
-  _LT_AC_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_AC_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
-fi
-
-# PORTME: override above test on systems where it is broken
-ifelse([$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_AC_TAGVAR(predep_objects,$1)=
-  _LT_AC_TAGVAR(postdep_objects,$1)=
-  _LT_AC_TAGVAR(postdeps,$1)=
-  ;;
-
-linux*)
-  case `$CC -V 2>&1 | sed 5q` in
-  *Sun\ C*)
-    # Sun C++ 5.9
-    #
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-    if test "$solaris_use_stlport4" != yes; then
-      _LT_AC_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
-
-solaris*)
-  case $cc_basename in
-  CC*)
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-
-    # Adding this requires a known-good setup of shared libraries for
-    # Sun compiler versions before 5.6, else PIC objects from an old
-    # archive will be linked into the output, leading to subtle bugs.
-    if test "$solaris_use_stlport4" != yes; then
-      _LT_AC_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
-esac
-])
-case " $_LT_AC_TAGVAR(postdeps, $1) " in
-*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;;
-esac
-])# AC_LIBTOOL_POSTDEP_PREDEP
-
-# AC_LIBTOOL_LANG_F77_CONFIG
-# --------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined.  Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)])
-AC_DEFUN([_LT_AC_LANG_F77_CONFIG],
-[AC_REQUIRE([AC_PROG_F77])
-AC_LANG_PUSH(Fortran 77)
-
-_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-_LT_AC_TAGVAR(allow_undefined_flag, $1)=
-_LT_AC_TAGVAR(always_export_symbols, $1)=no
-_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
-_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_direct, $1)=no
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
-_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
-_LT_AC_TAGVAR(hardcode_automatic, $1)=no
-_LT_AC_TAGVAR(module_cmds, $1)=
-_LT_AC_TAGVAR(module_expsym_cmds, $1)=
-_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
-_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-_LT_AC_TAGVAR(no_undefined_flag, $1)=
-_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
-_LT_AC_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_AC_TAGVAR(objext, $1)=$objext
-
-# 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_AC_SYS_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"
-CC=${F77-"f77"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-
-AC_MSG_CHECKING([if libtool supports shared libraries])
-AC_MSG_RESULT([$can_build_shared])
-
-AC_MSG_CHECKING([whether to build shared libraries])
-test "$can_build_shared" = "no" && 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 "$enable_shared" = yes && enable_static=no
-  if test -n "$RANLIB"; then
-    archive_cmds="$archive_cmds~\$RANLIB \$lib"
-    postinstall_cmds='$RANLIB $lib'
-  fi
-  ;;
-aix[[4-9]]*)
-  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-    test "$enable_shared" = yes && enable_static=no
-  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 "$enable_shared" = yes || enable_static=yes
-AC_MSG_RESULT([$enable_static])
-
-_LT_AC_TAGVAR(GCC, $1)="$G77"
-_LT_AC_TAGVAR(LD, $1)="$LD"
-
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_POP
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_F77_CONFIG
-
-
-# AC_LIBTOOL_LANG_GCJ_CONFIG
-# --------------------------
-# Ensure that the configuration vars for the C compiler are
-# suitably defined.  Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)])
-AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG],
-[AC_LANG_SAVE
-
-# Source file extension for Java test sources.
-ac_ext=java
-
-# Object file extension for compiled Java test sources.
-objext=o
-_LT_AC_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_AC_SYS_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"
-CC=${GCJ-"gcj"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-
-# GCJ did not exist at the time GCC didn't implicitly link libc in.
-_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-
-_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
-
-AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
-AC_LIBTOOL_PROG_COMPILER_PIC($1)
-AC_LIBTOOL_PROG_CC_C_O($1)
-AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
-AC_LIBTOOL_PROG_LD_SHLIBS($1)
-AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
-AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_RESTORE
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_GCJ_CONFIG
-
-
-# AC_LIBTOOL_LANG_RC_CONFIG
-# -------------------------
-# Ensure that the configuration vars for the Windows resource compiler are
-# suitably defined.  Those variables are subsequently used by
-# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
-AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)])
-AC_DEFUN([_LT_AC_LANG_RC_CONFIG],
-[AC_LANG_SAVE
-
-# Source file extension for RC test sources.
-ac_ext=rc
-
-# Object file extension for compiled RC test sources.
-objext=o
-_LT_AC_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_AC_SYS_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"
-CC=${RC-"windres"}
-compiler=$CC
-_LT_AC_TAGVAR(compiler, $1)=$CC
-_LT_CC_BASENAME([$compiler])
-_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
-
-AC_LIBTOOL_CONFIG($1)
-
-AC_LANG_RESTORE
-CC="$lt_save_CC"
-])# AC_LIBTOOL_LANG_RC_CONFIG
-
-
-# AC_LIBTOOL_CONFIG([TAGNAME])
-# ----------------------------
-# If TAGNAME is not passed, then 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
-# TAGNAME from the matching tagged config vars.
-AC_DEFUN([AC_LIBTOOL_CONFIG],
-[# The else clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
-  # See if we are running on zsh, and set the options which allow our commands through
-  # without removal of \ escapes.
-  if test -n "${ZSH_VERSION+set}" ; then
-    setopt NO_GLOB_SUBST
-  fi
-  # Now quote all the things that may contain metacharacters while being
-  # careful not to overquote the AC_SUBSTed values.  We take copies of the
-  # variables and quote the copies for generation of the libtool script.
-  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
-    SED SHELL STRIP \
-    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
-    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
-    deplibs_check_method reload_flag reload_cmds need_locks \
-    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
-    lt_cv_sys_global_symbol_to_c_name_address \
-    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
-    old_postinstall_cmds old_postuninstall_cmds \
-    _LT_AC_TAGVAR(compiler, $1) \
-    _LT_AC_TAGVAR(CC, $1) \
-    _LT_AC_TAGVAR(LD, $1) \
-    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \
-    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \
-    _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \
-    _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \
-    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \
-    _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \
-    _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \
-    _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \
-    _LT_AC_TAGVAR(old_archive_cmds, $1) \
-    _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \
-    _LT_AC_TAGVAR(predep_objects, $1) \
-    _LT_AC_TAGVAR(postdep_objects, $1) \
-    _LT_AC_TAGVAR(predeps, $1) \
-    _LT_AC_TAGVAR(postdeps, $1) \
-    _LT_AC_TAGVAR(compiler_lib_search_path, $1) \
-    _LT_AC_TAGVAR(compiler_lib_search_dirs, $1) \
-    _LT_AC_TAGVAR(archive_cmds, $1) \
-    _LT_AC_TAGVAR(archive_expsym_cmds, $1) \
-    _LT_AC_TAGVAR(postinstall_cmds, $1) \
-    _LT_AC_TAGVAR(postuninstall_cmds, $1) \
-    _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \
-    _LT_AC_TAGVAR(allow_undefined_flag, $1) \
-    _LT_AC_TAGVAR(no_undefined_flag, $1) \
-    _LT_AC_TAGVAR(export_symbols_cmds, $1) \
-    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \
-    _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \
-    _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \
-    _LT_AC_TAGVAR(hardcode_automatic, $1) \
-    _LT_AC_TAGVAR(module_cmds, $1) \
-    _LT_AC_TAGVAR(module_expsym_cmds, $1) \
-    _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \
-    _LT_AC_TAGVAR(fix_srcfile_path, $1) \
-    _LT_AC_TAGVAR(exclude_expsyms, $1) \
-    _LT_AC_TAGVAR(include_expsyms, $1); do
-
-    case $var in
-    _LT_AC_TAGVAR(old_archive_cmds, $1) | \
-    _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \
-    _LT_AC_TAGVAR(archive_cmds, $1) | \
-    _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \
-    _LT_AC_TAGVAR(module_cmds, $1) | \
-    _LT_AC_TAGVAR(module_expsym_cmds, $1) | \
-    _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \
-    _LT_AC_TAGVAR(export_symbols_cmds, $1) | \
-    extract_expsyms_cmds | reload_cmds | finish_cmds | \
-    postinstall_cmds | postuninstall_cmds | \
-    old_postinstall_cmds | old_postuninstall_cmds | \
-    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
-      # Double-quote double-evaled strings.
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
-      ;;
-    *)
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
-      ;;
-    esac
-  done
-
-  case $lt_echo in
-  *'\[$]0 --fallback-echo"')
-    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'`
-    ;;
-  esac
-
-ifelse([$1], [],
-  [cfgfile="${ofile}T"
-  trap "$rm \"$cfgfile\"; exit 1" 1 2 15
-  $rm -f "$cfgfile"
-  AC_MSG_NOTICE([creating $ofile])],
-  [cfgfile="$ofile"])
-
-  cat <<__EOF__ >> "$cfgfile"
-ifelse([$1], [],
-[#! $SHELL
-
-# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-#
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-# Free Software Foundation, Inc.
-#
-# This file is part of GNU Libtool:
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 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 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, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# 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.
-
-# 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//"
-
-# 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
-
-# The names of the tagged configurations supported by this script.
-available_tags=
-
-# ### BEGIN LIBTOOL CONFIG],
-[# ### BEGIN LIBTOOL TAG CONFIG: $tagname])
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)
-
-# Whether or not to disallow shared libs when runtime libs are static
-allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# 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
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A C compiler.
-LTCC=$lt_LTCC
-
-# LTCC compiler flags.
-LTCFLAGS=$lt_LTCFLAGS
-
-# A language-specific compiler.
-CC=$lt_[]_LT_AC_TAGVAR(compiler, $1)
-
-# Is the compiler the GNU C compiler?
-with_gcc=$_LT_AC_TAGVAR(GCC, $1)
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# The linker used to build libraries.
-LD=$lt_[]_LT_AC_TAGVAR(LD, $1)
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$lt_STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally ".so").
-shrext_cmds='$shrext_cmds'
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# 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
-
-# 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
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1)
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1)
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1)
-
-# Library versioning type.
-version_type=$version_type
-
-# 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
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1)
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1)
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)
-
-# Commands used to build and install a shared archive.
-archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1)
-archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1)
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to build a loadable module (assumed same as above if empty)
-module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1)
-module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1)
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1)
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1)
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1)
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1)
-
-# The directories searched by this compiler when creating a shared
-# library
-compiler_lib_search_dirs=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_dirs, $1)
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1)
-
-# 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
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1)
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1)
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# 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 in a C name address pair
-global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1)
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)
-
-# If ld is used when linking, flag to hardcode \$libdir into
-# a binary during linking. This must work even if \$libdir does
-# not exist.
-hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1)
-
-# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1)
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1)
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)
-
-# 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=$_LT_AC_TAGVAR(hardcode_automatic, $1)
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1)
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1)
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1)
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1)
-
-# Symbols that must always be exported.
-include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1)
-
-ifelse([$1],[],
-[# ### END LIBTOOL CONFIG],
-[# ### END LIBTOOL TAG CONFIG: $tagname])
-
-__EOF__
-
-ifelse([$1],[], [
-  case $host_os in
-  aix3*)
-    cat <<\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 "X${COLLECT_NAMES+set}" != Xset; then
-  COLLECT_NAMES=
-  export COLLECT_NAMES
-fi
-EOF
-    ;;
-  esac
-
-  # 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"
-])
-else
-  # If there is no Makefile yet, we rely on a make rule to execute
-  # `config.status --recheck' to rerun these tests and create the
-  # libtool script then.
-  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
-  if test -f "$ltmain_in"; then
-    test -f Makefile && make "$ltmain"
-  fi
-fi
-])# AC_LIBTOOL_CONFIG
-
-
-# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME])
-# -------------------------------------------
-AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI],
-[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
-
-_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
-
-if test "$GCC" = yes; then
-  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
-
-  AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
-    lt_cv_prog_compiler_rtti_exceptions,
-    [-fno-rtti -fno-exceptions], [],
-    [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
-fi
-])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI
-
-
-# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
-# ---------------------------------
-AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
-[AC_REQUIRE([AC_CANONICAL_HOST])
-AC_REQUIRE([LT_AC_PROG_SED])
-AC_REQUIRE([AC_PROG_NM])
-AC_REQUIRE([AC_OBJEXT])
-# 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]]*\)'
-
-# Transform an extracted symbol line into a proper C declaration
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
-
-# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
-
-# Define system-specific variables.
-case $host_os in
-aix*)
-  symcode='[[BCDT]]'
-  ;;
-cygwin* | mingw* | pw32*)
-  symcode='[[ABCDGISTW]]'
-  ;;
-hpux*) # Its linker distinguishes data from code symbols
-  if test "$host_cpu" = ia64; then
-    symcode='[[ABCDEGRST]]'
-  fi
-  lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-  lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
-  ;;
-linux* | k*bsd*-gnu)
-  if test "$host_cpu" = ia64; then
-    symcode='[[ABCDGIRSTW]]'
-    lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-    lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
-  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
-
-# 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
-
-# If we're using GNU nm, then use its standard symbol codes.
-case `$NM -V 2>&1` in
-*GNU* | *'with BFD'*)
-  symcode='[[ABCDGIRSTW]]' ;;
-esac
-
-# Try without a prefix undercore, 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.
-  lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[     ]]\($symcode$symcode*\)[[       ]][[    ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
-
-  # Check to see that the pipe works correctly.
-  pipe_works=no
-
-  rm -f conftest*
-  cat > conftest.$ac_ext <<EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-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 <<EOF > conftest.$ac_ext
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-EOF
-         # Now generate the symbol file.
-         eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
-
-         cat <<EOF >> conftest.$ac_ext
-#if defined (__STDC__) && __STDC__
-# define lt_ptr_t void *
-#else
-# define lt_ptr_t char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-const struct {
-  const char *name;
-  lt_ptr_t address;
-}
-lt_preloaded_symbols[[]] =
-{
-EOF
-         $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
-         cat <<\EOF >> conftest.$ac_ext
-  {0, (lt_ptr_t) 0}
-};
-
-#ifdef __cplusplus
-}
-#endif
-EOF
-         # Now try linking the two files.
-         mv conftest.$ac_objext conftstm.$ac_objext
-         lt_save_LIBS="$LIBS"
-         lt_save_CFLAGS="$CFLAGS"
-         LIBS="conftstm.$ac_objext"
-         CFLAGS="$CFLAGS$_LT_AC_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_save_LIBS"
-         CFLAGS="$lt_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 "$pipe_works" = yes; 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
-]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
-
-
-# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME])
-# ---------------------------------------
-AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC],
-[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=
-_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
-_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=
-
-AC_MSG_CHECKING([for $compiler option to produce PIC])
- ifelse([$1],[CXX],[
-  # C++ specific cases for pic, static, wl, etc.
-  if test "$GXX" = yes; then
-    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
-    case $host_os in
-    aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-       # AIX 5 now supports IA64 processor
-       _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-    amigaos*)
-      # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
-      ;;
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-    mingw* | cygwin* | os2* | pw32*)
-      # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-      ;;
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
-      ;;
-    *djgpp*)
-      # DJGPP does not support shared libraries at all
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $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_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
-      fi
-      ;;
-    hpux*)
-      # 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*)
-       ;;
-      *)
-       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-       ;;
-      esac
-      ;;
-    *)
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-      ;;
-    esac
-  else
-    case $host_os in
-      aix[[4-9]]*)
-       # All AIX code is PIC.
-       if test "$host_cpu" = ia64; then
-         # AIX 5 now supports IA64 processor
-         _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-       else
-         _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
-       fi
-       ;;
-      chorus*)
-       case $cc_basename in
-       cxch68*)
-         # Green Hills C++ Compiler
-         # _LT_AC_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
-       ;;
-       darwin*)
-         # PIC is the default on this platform
-         # Common symbols not allowed in MH_DYLIB files
-         case $cc_basename in
-           xlc*)
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
-           _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           ;;
-         esac
-       ;;
-      dgux*)
-       case $cc_basename in
-         ec++*)
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-           ;;
-         ghcx*)
-           # Green Hills C++ Compiler
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      freebsd* | dragonfly*)
-       # FreeBSD uses GNU C++
-       ;;
-      hpux9* | hpux10* | hpux11*)
-       case $cc_basename in
-         CC*)
-           _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-           if test "$host_cpu" != ia64; then
-             _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-           fi
-           ;;
-         aCC*)
-           _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-           case $host_cpu in
-           hppa*64*|ia64*)
-             # +Z the default
-             ;;
-           *)
-             _LT_AC_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_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-           # CC pic flag -KPIC is the default.
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      linux* | k*bsd*-gnu)
-       case $cc_basename in
-         KCC*)
-           # KAI C++ Compiler
-           _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-           ;;
-         icpc* | ecpc*)
-           # Intel C++
-           _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-           _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
-           ;;
-         pgCC* | pgcpp*)
-           # Portland Group C++ compiler.
-           _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
-           _LT_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)=
-           _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-           ;;
-         *)
-           case `$CC -V 2>&1 | sed 5q` in
-           *Sun\ C*)
-             # Sun C++ 5.9
-             _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-             _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-             _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-             ;;
-           esac
-           ;;
-       esac
-       ;;
-      lynxos*)
-       ;;
-      m88k*)
-       ;;
-      mvs*)
-       case $cc_basename in
-         cxx*)
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      netbsd* | netbsdelf*-gnu)
-       ;;
-      osf3* | osf4* | osf5*)
-       case $cc_basename in
-         KCC*)
-           _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
-           ;;
-         RCC*)
-           # Rational C++ 2.4.1
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-           ;;
-         cxx*)
-           # Digital/Compaq C++
-           _LT_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)=
-           _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      psos*)
-       ;;
-      solaris*)
-       case $cc_basename in
-         CC*)
-           # Sun C++ 4.2, 5.x and Centerline C++
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-           _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-           _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-           ;;
-         gcx*)
-           # Green Hills C++ Compiler
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      sunos4*)
-       case $cc_basename in
-         CC*)
-           # Sun C++ 4.x
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-           _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-           ;;
-         lcc*)
-           # Lucid
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      tandem*)
-       case $cc_basename in
-         NCC*)
-           # NonStop-UX NCC 3.20
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-           ;;
-         *)
-           ;;
-       esac
-       ;;
-      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-       case $cc_basename in
-         CC*)
-           _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-           _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-           ;;
-       esac
-       ;;
-      vxworks*)
-       ;;
-      *)
-       _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-       ;;
-    esac
-  fi
-],
-[
-  if test "$GCC" = yes; then
-    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
-
-    case $host_os in
-      aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-       # AIX 5 now supports IA64 processor
-       _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
-      ;;
-
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-
-    mingw* | cygwin* | pw32* | os2*)
-      # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-      ;;
-
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
-      ;;
-
-    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_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      enable_shared=no
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
-      fi
-      ;;
-
-    hpux*)
-      # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-       ;;
-      esac
-      ;;
-
-    *)
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
-      ;;
-    esac
-  else
-    # PORTME Check for flag to pass linker flags through the system compiler.
-    case $host_os in
-    aix*)
-      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      if test "$host_cpu" = ia64; then
-       # AIX 5 now supports IA64 processor
-       _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      else
-       _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
-      fi
-      ;;
-      darwin*)
-        # PIC is the default on this platform
-        # Common symbols not allowed in MH_DYLIB files
-       case $cc_basename in
-         xlc*)
-         _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
-         _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-         ;;
-       esac
-       ;;
-
-    mingw* | cygwin* | pw32* | os2*)
-      # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
-      ;;
-
-    hpux9* | hpux10* | hpux11*)
-      _LT_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
-       ;;
-      esac
-      # Is there a better lt_prog_compiler_static that works with the bundled CC?
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # PIC (with -KPIC) is the default.
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    newsos6)
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    linux* | k*bsd*-gnu)
-      case $cc_basename in
-      icc* | ecc*)
-       _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-       _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
-        ;;
-      pgcc* | pgf77* | pgf90* | pgf95*)
-        # Portland Group compilers (*not* the Pentium gcc compiler,
-       # which looks to be a dead project)
-       _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
-       _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-        ;;
-      ccc*)
-        _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-        # All Alpha code is PIC.
-        _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-        ;;
-      *)
-        case `$CC -V 2>&1 | sed 5q` in
-       *Sun\ C*)
-         # Sun C 5.9
-         _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-         _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-         _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-         ;;
-       *Sun\ F*)
-         # Sun Fortran 8.3 passes all unrecognized flags to the linker
-         _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-         _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-         _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=''
-         ;;
-       esac
-       ;;
-      esac
-      ;;
-
-    osf3* | osf4* | osf5*)
-      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      # All OSF/1 code is PIC.
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    rdos*)
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
-      ;;
-
-    solaris*)
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      case $cc_basename in
-      f77* | f90* | f95*)
-       _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
-      *)
-       _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
-      esac
-      ;;
-
-    sunos4*)
-      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    sysv4 | sysv4.2uw2* | sysv4.3*)
-      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec ;then
-       _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
-       _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      fi
-      ;;
-
-    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    unicos*)
-      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
-      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      ;;
-
-    uts4*)
-      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
-      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
-      ;;
-
-    *)
-      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
-      ;;
-    esac
-  fi
-])
-AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
-  AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],
-    _LT_AC_TAGVAR(lt_cv_prog_compiler_pic_works, $1),
-    [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [],
-    [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in
-     "" | " "*) ;;
-     *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;;
-     esac],
-    [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
-     _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
-fi
-case $host_os in
-  # For platforms which do not support PIC, -DPIC is meaningless:
-  *djgpp*)
-    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
-    ;;
-  *)
-    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])"
-    ;;
-esac
-
-#
-# Check to make sure the static flag actually works.
-#
-wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\"
-AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
-  _LT_AC_TAGVAR(lt_cv_prog_compiler_static_works, $1),
-  $lt_tmp_static_flag,
-  [],
-  [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])
-])
-
-
-# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME])
-# ------------------------------------
-# See if the linker supports building shared libraries.
-AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS],
-[AC_REQUIRE([LT_AC_PROG_SED])dnl
-AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
-ifelse([$1],[CXX],[
-  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  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 AIX nm, but means don't demangle with GNU nm
-    if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
-      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
-    else
-      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
-    fi
-    ;;
-  pw32*)
-    _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
-  ;;
-  cygwin* | mingw*)
-    _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
-  ;;
-  linux* | k*bsd*-gnu)
-    _LT_AC_TAGVAR(link_all_deplibs, $1)=no
-  ;;
-  *)
-    _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  esac
-  _LT_AC_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
-],[
-  runpath_var=
-  _LT_AC_TAGVAR(allow_undefined_flag, $1)=
-  _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
-  _LT_AC_TAGVAR(archive_cmds, $1)=
-  _LT_AC_TAGVAR(archive_expsym_cmds, $1)=
-  _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)=
-  _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)=
-  _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
-  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
-  _LT_AC_TAGVAR(thread_safe_flag_spec, $1)=
-  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
-  _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
-  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
-  _LT_AC_TAGVAR(hardcode_direct, $1)=no
-  _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
-  _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-  _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
-  _LT_AC_TAGVAR(hardcode_automatic, $1)=no
-  _LT_AC_TAGVAR(module_cmds, $1)=
-  _LT_AC_TAGVAR(module_expsym_cmds, $1)=
-  _LT_AC_TAGVAR(always_export_symbols, $1)=no
-  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  # include_expsyms should be a list of space-separated symbols to be *always*
-  # included in the symbol list
-  _LT_AC_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_AC_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=
-  # Just being paranoid about ensuring that cc_basename is set.
-  _LT_CC_BASENAME([$compiler])
-  case $host_os in
-  cygwin* | mingw* | pw32*)
-    # 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 "$GCC" != yes; then
-      with_gnu_ld=no
-    fi
-    ;;
-  interix*)
-    # we just hope/assume this is gcc and not c89 (= MSVC++)
-    with_gnu_ld=yes
-    ;;
-  openbsd*)
-    with_gnu_ld=no
-    ;;
-  esac
-
-  _LT_AC_TAGVAR(ld_shlibs, $1)=yes
-  if test "$with_gnu_ld" = yes; 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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
-    _LT_AC_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_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-      else
-       _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
-    fi
-    supports_anon_versioning=no
-    case `$LD -v 2>/dev/null` in
-      *\ [[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 "$host_cpu" != ia64; then
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-       cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, 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 modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-EOF
-      fi
-      ;;
-
-    amigaos*)
-      _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-
-      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
-      # that the semantics of dynamic libraries on AmigaOS, at least up
-      # to version 4, is to share data among multiple programs linked
-      # with the same dynamic library.  Since this doesn't match the
-      # behavior of shared libraries on other platforms, we can't use
-      # them.
-      _LT_AC_TAGVAR(ld_shlibs, $1)=no
-      ;;
-
-    beos*)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-       _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
-       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
-       # support --undefined.  This deserves some investigation.  FIXME
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-      else
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    cygwin* | mingw* | pw32*)
-      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
-      # as there is no search path for DLLs.
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_AC_TAGVAR(always_export_symbols, $1)=no
-      _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
-
-      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-        _LT_AC_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 (1st line
-       # is EXPORTS), use it as is; otherwise, prepend...
-       _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; 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_AC_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    interix[[3-9]]*)
-      _LT_AC_TAGVAR(hardcode_direct, $1)=no
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-      _LT_AC_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_AC_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_AC_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* | k*bsd*-gnu)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-       tmp_addflag=
-       case $cc_basename,$host_cpu in
-       pgcc*)                          # Portland Group C compiler
-         _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-         tmp_addflag=' $pic_flag'
-         ;;
-       pgf77* | pgf90* | pgf95*)       # Portland Group f77 and f90 compilers
-         _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$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' ;;
-       esac
-       case `$CC -V 2>&1 | sed 5q` in
-       *Sun\ C*)                       # Sun C 5.9
-         _LT_AC_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; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-         tmp_sharedflag='-G' ;;
-       *Sun\ F*)                       # Sun Fortran 8.3
-         tmp_sharedflag='-G' ;;
-       *)
-         tmp_sharedflag='-shared' ;;
-       esac
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
-       if test $supports_anon_versioning = yes; then
-         _LT_AC_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
-       _LT_AC_TAGVAR(link_all_deplibs, $1)=no
-      else
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    netbsd* | netbsdelf*-gnu)
-      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
-       wlarc=
-      else
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $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_AC_TAGVAR(ld_shlibs, $1)=no
-       cat <<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.
-
-EOF
-      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       _LT_AC_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_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
-       cat <<_LT_EOF 1>&2
-
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-*** 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
-       ;;
-       *)
-         if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-           _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
-           _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
-           _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
-         else
-           _LT_AC_TAGVAR(ld_shlibs, $1)=no
-         fi
-       ;;
-      esac
-      ;;
-
-    sunos4*)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      wlarc=
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-    esac
-
-    if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no; then
-      runpath_var=
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
-      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
-      _LT_AC_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_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_AC_TAGVAR(always_export_symbols, $1)=yes
-      _LT_AC_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_AC_TAGVAR(hardcode_minus_L, $1)=yes
-      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
-       # Neither direct hardcoding nor static linking is supported with a
-       # broken collect2.
-       _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
-      fi
-      ;;
-
-    aix[[4-9]]*)
-      if test "$host_cpu" = ia64; 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 AIX nm, but means don't demangle with GNU nm
-       if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
-         _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
-       else
-         _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | 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
-       # need to do runtime linking.
-       case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
-         for ld_flag in $LDFLAGS; do
-         if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
-           aix_use_runtimelinking=yes
-           break
-         fi
-         done
-         ;;
-       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_AC_TAGVAR(archive_cmds, $1)=''
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
-      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-
-      if test "$GCC" = yes; 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_AC_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_AC_TAGVAR(hardcode_minus_L, $1)=yes
-         _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-         _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
-         fi
-         ;;
-       esac
-       shared_flag='-shared'
-       if test "$aix_use_runtimelinking" = yes; then
-         shared_flag="$shared_flag "'${wl}-G'
-       fi
-      else
-       # not using gcc
-       if test "$host_cpu" = ia64; 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 "$aix_use_runtimelinking" = yes; then
-           shared_flag='${wl}-G'
-         else
-           shared_flag='${wl}-bM:SRE'
-         fi
-       fi
-      fi
-
-      # It seems that -bexpall does not export symbols beginning with
-      # underscore (_), so it is better to generate a list of symbols to export.
-      _LT_AC_TAGVAR(always_export_symbols, $1)=yes
-      if test "$aix_use_runtimelinking" = yes; then
-       # Warning - without using the other runtime loading flags (-brtl),
-       # -berok will link without error, but may produce a broken library.
-       _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
-       # Determine the default libpath from the value encoded in an empty executable.
-       _LT_AC_SYS_LIBPATH_AIX
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
-       _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-       else
-       if test "$host_cpu" = ia64; then
-         _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
-         _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
-         _LT_AC_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_AC_SYS_LIBPATH_AIX
-        _LT_AC_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_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
-         _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
-         # Exported symbols can be pulled into shared objects from archives
-         _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
-         _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
-         # This is similar to how AIX traditionally builds its shared libraries.
-         _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-       fi
-      fi
-      ;;
-
-    amigaos*)
-      _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-      # see comment about different semantics on the GNU ld section
-      _LT_AC_TAGVAR(ld_shlibs, $1)=no
-      ;;
-
-    bsdi[[45]]*)
-      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
-      ;;
-
-    cygwin* | mingw* | pw32*)
-      # 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.
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
-      _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
-      # The linker will automatically build a .lib file if we build a DLL.
-      _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true'
-      # FIXME: Should let the user specify the lib program.
-      _LT_AC_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
-      _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
-      _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
-      ;;
-
-    darwin* | rhapsody*)
-      case $host_os in
-        rhapsody* | darwin1.[[012]])
-         _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
-         ;;
-       *) # Darwin 1.3 on
-         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
-           _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-         else
-           case ${MACOSX_DEPLOYMENT_TARGET} in
-             10.[[012]])
-               _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-               ;;
-             10.*)
-               _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'
-               ;;
-           esac
-         fi
-         ;;
-      esac
-      _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_AC_TAGVAR(hardcode_direct, $1)=no
-      _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
-      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
-      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-    if test "$GCC" = yes ; then
-       output_verbose_link_cmd='echo'
-        _LT_AC_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_AC_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-        _LT_AC_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_AC_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}"
-    else
-      case $cc_basename in
-        xlc*)
-         output_verbose_link_cmd='echo'
-         _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring'
-         _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-         _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          ;;
-       *)
-         _LT_AC_TAGVAR(ld_shlibs, $1)=no
-          ;;
-      esac
-    fi
-      ;;
-
-    dgux*)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    freebsd1*)
-      _LT_AC_TAGVAR(ld_shlibs, $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_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-    freebsd* | dragonfly*)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    hpux9*)
-      if test "$GCC" = yes; then
-       _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      else
-       _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      fi
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-
-      # hardcode_minus_L: Not really in the search PATH,
-      # but as the default location of the library.
-      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-      ;;
-
-    hpux10*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-      else
-       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      if test "$with_gnu_ld" = no; then
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-       _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
-       _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-       _LT_AC_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_AC_TAGVAR(hardcode_minus_L, $1)=yes
-      fi
-      ;;
-
-    hpux11*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-       case $host_cpu in
-       hppa*64*)
-         _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       ia64*)
-         _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       *)
-         _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       esac
-      else
-       case $host_cpu in
-       hppa*64*)
-         _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       ia64*)
-         _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       *)
-         _LT_AC_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 "$with_gnu_ld" = no; then
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
-       _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-
-       case $host_cpu in
-       hppa*64*|ia64*)
-         _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
-         _LT_AC_TAGVAR(hardcode_direct, $1)=no
-         _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-         ;;
-       *)
-         _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-         _LT_AC_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_AC_TAGVAR(hardcode_minus_L, $1)=yes
-         ;;
-       esac
-      fi
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      if test "$GCC" = yes; then
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
-      fi
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-      ;;
-
-    netbsd* | netbsdelf*-gnu)
-      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
-      else
-       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
-      fi
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    newsos6)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    openbsd*)
-      if test -f /usr/libexec/ld.so; then
-       _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-       if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-         _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-         _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
-         _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-         _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
-       else
-         case $host_os in
-          openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
-            _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-            _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-            ;;
-          *)
-            _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-            _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
-            ;;
-         esac
-        fi
-      else
-       _LT_AC_TAGVAR(ld_shlibs, $1)=no
-      fi
-      ;;
-
-    os2*)
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
-      _LT_AC_TAGVAR(archive_cmds, $1)='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
-      _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
-      ;;
-
-    osf3*)
-      if test "$GCC" = yes; then
-       _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-       _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-      fi
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-      ;;
-
-    osf4* | osf5*)     # as osf3* with the addition of -msym flag
-      if test "$GCC" = yes; then
-       _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
-      else
-       _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
-       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-       _LT_AC_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~
-       $LD -shared${allow_undefined_flag} -input $lib.exp $linker_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
-      fi
-      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
-      ;;
-
-    solaris*)
-      _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
-      if test "$GCC" = yes; then
-       wlarc='${wl}'
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-       _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-         $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
-      else
-       wlarc=''
-       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-       _LT_AC_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'
-      fi
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
-      _LT_AC_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 "$GCC" = yes; then
-         _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
-       else
-         _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
-       fi
-       ;;
-      esac
-      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-      ;;
-
-    sunos4*)
-      if test "x$host_vendor" = xsequent; then
-       # Use $CC to link under sequent, because it throws in some extra .o
-       # files that make .init and .fini sections work.
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
-      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    sysv4)
-      case $host_vendor in
-       sni)
-         _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-         _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true???
-       ;;
-       siemens)
-         ## LD is ld it makes a PLAMLIB
-         ## CC just makes a GrossModule.
-         _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-         _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
-         _LT_AC_TAGVAR(hardcode_direct, $1)=no
-        ;;
-       motorola)
-         _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-         _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
-       ;;
-      esac
-      runpath_var='LD_RUN_PATH'
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    sysv4.3*)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-       _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-       _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-       runpath_var=LD_RUN_PATH
-       hardcode_runpath_var=yes
-       _LT_AC_TAGVAR(ld_shlibs, $1)=yes
-      fi
-      ;;
-
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
-      _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       _LT_AC_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 can NOT 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_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
-      _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
-      _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
-      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
-      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
-      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-       _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-       _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      ;;
-
-    uts4*)
-      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
-      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
-      ;;
-
-    *)
-      _LT_AC_TAGVAR(ld_shlibs, $1)=no
-      ;;
-    esac
-  fi
-])
-AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
-test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in
-x|xyes)
-  # Assume -lc should be added
-  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
-
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
-    case $_LT_AC_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_MSG_CHECKING([whether -lc should be explicitly linked in])
-      $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_AC_TAGVAR(lt_prog_compiler_wl, $1)
-       pic_flag=$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1)
-        _LT_AC_TAGVAR(allow_undefined_flag, $1)=
-        if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
-        then
-         _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
-        else
-         _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
-        fi
-        _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $rm conftest*
-      AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)])
-      ;;
-    esac
-  fi
-  ;;
-esac
-])# AC_LIBTOOL_PROG_LD_SHLIBS
-
-
-# _LT_AC_FILE_LTDLL_C
-# -------------------
-# Be careful that the start marker always follows a newline.
-AC_DEFUN([_LT_AC_FILE_LTDLL_C], [
-# /* ltdll.c starts here */
-# #define WIN32_LEAN_AND_MEAN
-# #include <windows.h>
-# #undef WIN32_LEAN_AND_MEAN
-# #include <stdio.h>
-#
-# #ifndef __CYGWIN__
-# #  ifdef __CYGWIN32__
-# #    define __CYGWIN__ __CYGWIN32__
-# #  endif
-# #endif
-#
-# #ifdef __cplusplus
-# extern "C" {
-# #endif
-# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
-# #ifdef __cplusplus
-# }
-# #endif
-#
-# #ifdef __CYGWIN__
-# #include <cygwin/cygwin_dll.h>
-# DECLARE_CYGWIN_DLL( DllMain );
-# #endif
-# HINSTANCE __hDllInstance_base;
-#
-# BOOL APIENTRY
-# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
-# {
-#   __hDllInstance_base = hInst;
-#   return TRUE;
-# }
-# /* ltdll.c ends here */
-])# _LT_AC_FILE_LTDLL_C
-
-
-# _LT_AC_TAGVAR(VARNAME, [TAGNAME])
-# ---------------------------------
-AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])])
-
-
-# old names
-AC_DEFUN([AM_PROG_LIBTOOL],   [AC_PROG_LIBTOOL])
-AC_DEFUN([AM_ENABLE_SHARED],  [AC_ENABLE_SHARED($@)])
-AC_DEFUN([AM_ENABLE_STATIC],  [AC_ENABLE_STATIC($@)])
-AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
-AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
-AC_DEFUN([AM_PROG_LD],        [AC_PROG_LD])
-AC_DEFUN([AM_PROG_NM],        [AC_PROG_NM])
-
-# This is just to silence aclocal about the macro not being used
-ifelse([AC_DISABLE_FAST_INSTALL])
-
-AC_DEFUN([LT_AC_PROG_GCJ],
-[AC_CHECK_TOOL(GCJ, gcj, no)
-  test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
-  AC_SUBST(GCJFLAGS)
-])
-
-AC_DEFUN([LT_AC_PROG_RC],
-[AC_CHECK_TOOL(RC, windres, no)
-])
-
-
-# Cheap backport of AS_EXECUTABLE_P and required macros
-# from Autoconf 2.59; we should not use $as_executable_p directly.
-
-# _AS_TEST_PREPARE
-# ----------------
-m4_ifndef([_AS_TEST_PREPARE],
-[m4_defun([_AS_TEST_PREPARE],
-[if test -x / >/dev/null 2>&1; then
-  as_executable_p='test -x'
-else
-  as_executable_p='test -f'
-fi
-])])# _AS_TEST_PREPARE
-
-# AS_EXECUTABLE_P
-# ---------------
-# Check whether a file is executable.
-m4_ifndef([AS_EXECUTABLE_P],
-[m4_defun([AS_EXECUTABLE_P],
-[AS_REQUIRE([_AS_TEST_PREPARE])dnl
-$as_executable_p $1[]dnl
-])])# AS_EXECUTABLE_P
-
-# 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.                               #
-# LT_AC_PROG_SED
-# --------------
-# Check for a fully-functional sed program, that truncates
-# as few characters as possible.  Prefer GNU sed if found.
-AC_DEFUN([LT_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 $lt_ac_count -gt 10 && 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])
-])
-
-# Copyright (C) 2002, 2003, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# 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.
-AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
-
-# AM_SET_CURRENT_AUTOMAKE_VERSION
-# -------------------------------
-# Call AM_AUTOMAKE_VERSION so it can be traced.
-# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
-AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-        [AM_AUTOMAKE_VERSION([1.9.6])])
-
-# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
-
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
-# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
-# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
-#
-# Of course, Automake must honor this variable whenever it calls a
-# tool from the auxiliary directory.  The problem is that $srcdir (and
-# therefore $ac_aux_dir as well) can be either absolute or relative,
-# depending on how configure is run.  This is pretty annoying, since
-# it makes $ac_aux_dir quite unusable in subdirectories: in the top
-# source directory, any form will work fine, but in subdirectories a
-# relative path needs to be adjusted first.
-#
-# $ac_aux_dir/missing
-#    fails when called from a subdirectory if $ac_aux_dir is relative
-# $top_srcdir/$ac_aux_dir/missing
-#    fails if $ac_aux_dir is absolute,
-#    fails when called from a subdirectory in a VPATH build with
-#          a relative $ac_aux_dir
-#
-# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
-# are both prefixed by $srcdir.  In an in-source build this is usually
-# harmless because $srcdir is `.', but things will broke when you
-# start a VPATH build or use an absolute $srcdir.
-#
-# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
-# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
-#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
-# and then we would define $MISSING as
-#   MISSING="\${SHELL} $am_aux_dir/missing"
-# This will work as long as MISSING is not called from configure, because
-# unfortunately $(top_srcdir) has no meaning in configure.
-# However there are other variables, like CC, which are often used in
-# configure, and could therefore not use this "fixed" $ac_aux_dir.
-#
-# Another solution, used here, is to always expand $ac_aux_dir to an
-# absolute PATH.  The drawback is that using absolute paths prevent a
-# configured tree to be moved without reconfiguration.
-
-AC_DEFUN([AM_AUX_DIR_EXPAND],
-[dnl Rely on autoconf to set up CDPATH properly.
-AC_PREREQ([2.50])dnl
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
-])
-
-# AM_CONDITIONAL                                            -*- Autoconf -*-
-
-# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 7
-
-# AM_CONDITIONAL(NAME, SHELL-CONDITION)
-# -------------------------------------
-# Define a conditional.
-AC_DEFUN([AM_CONDITIONAL],
-[AC_PREREQ(2.52)dnl
- ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
-       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
-AC_SUBST([$1_TRUE])
-AC_SUBST([$1_FALSE])
-if $2; then
-  $1_TRUE=
-  $1_FALSE='#'
-else
-  $1_TRUE='#'
-  $1_FALSE=
-fi
-AC_CONFIG_COMMANDS_PRE(
-[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
-  AC_MSG_ERROR([[conditional "$1" was never defined.
-Usually this means the macro was only invoked conditionally.]])
-fi])])
-
-
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 8
-
-# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
-# written in clear, in which case automake, when reading aclocal.m4,
-# will think it sees a *use*, and therefore will trigger all it's
-# C support machinery.  Also note that it means that autoscan, seeing
-# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
-
-
-# _AM_DEPENDENCIES(NAME)
-# ----------------------
-# See how the compiler implements dependency checking.
-# NAME is "CC", "CXX", "GCJ", or "OBJC".
-# We try a few techniques and use that to set a single cache variable.
-#
-# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
-# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
-# dependency, and given that the user is not expected to run this macro,
-# just rely on AC_PROG_CC.
-AC_DEFUN([_AM_DEPENDENCIES],
-[AC_REQUIRE([AM_SET_DEPDIR])dnl
-AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
-AC_REQUIRE([AM_MAKE_INCLUDE])dnl
-AC_REQUIRE([AM_DEP_TRACK])dnl
-
-ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
-       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
-       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
-       [$1], 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'.
-  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
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    case $depmode in
-    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
-      ;;
-    none) break ;;
-    esac
-    # 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.
-    if depmode=$depmode \
-       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_$1_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_$1_dependencies_compiler_type=none
-fi
-])
-AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
-AM_CONDITIONAL([am__fastdep$1], [
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
-])
-
-
-# AM_SET_DEPDIR
-# -------------
-# Choose a directory name for dependency files.
-# This macro is AC_REQUIREd in _AM_DEPENDENCIES
-AC_DEFUN([AM_SET_DEPDIR],
-[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
-])
-
-
-# AM_DEP_TRACK
-# ------------
-AC_DEFUN([AM_DEP_TRACK],
-[AC_ARG_ENABLE(dependency-tracking,
-[  --disable-dependency-tracking  speeds up one-time build
-  --enable-dependency-tracking   do not reject slow dependency extractors])
-if test "x$enable_dependency_tracking" != xno; then
-  am_depcomp="$ac_aux_dir/depcomp"
-  AMDEPBACKSLASH='\'
-fi
-AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
-AC_SUBST([AMDEPBACKSLASH])
-])
-
-# Generate code to set up dependency tracking.              -*- Autoconf -*-
-
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-#serial 3
-
-# _AM_OUTPUT_DEPENDENCY_COMMANDS
-# ------------------------------
-AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
-[for mf in $CONFIG_FILES; 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.
-  # So let's grep whole file.
-  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
-    dirpart=`AS_DIRNAME("$mf")`
-  else
-    continue
-  fi
-  # Extract the definition of DEPDIR, am__include, and am__quote
-  # from the Makefile without running `make'.
-  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
-  test -z "$DEPDIR" && continue
-  am__include=`sed -n 's/^am__include = //p' < "$mf"`
-  test -z "am__include" && continue
-  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-  # When using ansi2knr, U may be empty or an underscore; expand it
-  U=`sed -n 's/^U = //p' < "$mf"`
-  # Find all dependency output files, they are included files with
-  # $(DEPDIR) in their names.  We invoke sed twice because it is the
-  # simplest approach to changing $(DEPDIR) to its actual value in the
-  # expansion.
-  for file in `sed -n "
-    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
-    # Make sure the directory exists.
-    test -f "$dirpart/$file" && continue
-    fdir=`AS_DIRNAME(["$file"])`
-    AS_MKDIR_P([$dirpart/$fdir])
-    # echo "creating $dirpart/$file"
-    echo '# dummy' > "$dirpart/$file"
-  done
-done
-])# _AM_OUTPUT_DEPENDENCY_COMMANDS
-
-
-# AM_OUTPUT_DEPENDENCY_COMMANDS
-# -----------------------------
-# This macro should only be invoked once -- use via AC_REQUIRE.
-#
-# This code is only required when automatic dependency tracking
-# is enabled.  FIXME.  This creates each `.P' file that we will
-# need in order to bootstrap the dependency handling code.
-AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
-[AC_CONFIG_COMMANDS([depfiles],
-     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
-     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
-])
-
-# Do all the work for Automake.                             -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 12
-
-# This macro actually does too much.  Some checks are only needed if
-# your package does certain things.  But this isn't really a big deal.
-
-# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
-# AM_INIT_AUTOMAKE([OPTIONS])
-# -----------------------------------------------
-# The call with PACKAGE and VERSION arguments is the old style
-# call (pre autoconf-2.50), which is being phased out.  PACKAGE
-# and VERSION should now be passed to AC_INIT and removed from
-# the call to AM_INIT_AUTOMAKE.
-# We support both call styles for the transition.  After
-# the next Automake release, Autoconf can make the AC_INIT
-# arguments mandatory, and then we can depend on a new Autoconf
-# release and drop the old call support.
-AC_DEFUN([AM_INIT_AUTOMAKE],
-[AC_PREREQ([2.58])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
-# test to see if srcdir already configured
-if test "`cd $srcdir && pwd`" != "`pwd`" &&
-   test -f $srcdir/config.status; then
-  AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
-fi
-
-# test whether we have cygpath
-if test -z "$CYGPATH_W"; then
-  if (cygpath --version) >/dev/null 2>/dev/null; then
-    CYGPATH_W='cygpath -w'
-  else
-    CYGPATH_W=echo
-  fi
-fi
-AC_SUBST([CYGPATH_W])
-
-# Define the identity of the package.
-dnl Distinguish between old-style and new-style calls.
-m4_ifval([$2],
-[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
- AC_SUBST([PACKAGE], [$1])dnl
- AC_SUBST([VERSION], [$2])],
-[_AM_SET_OPTIONS([$1])dnl
- 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)
-AM_PROG_INSTALL_SH
-AM_PROG_INSTALL_STRIP
-AC_REQUIRE([AM_PROG_MKDIR_P])dnl
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
-AC_REQUIRE([AC_PROG_AWK])dnl
-AC_REQUIRE([AC_PROG_MAKE_SET])dnl
-AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
-              [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
-                            [_AM_PROG_TAR([v7])])])
-_AM_IF_OPTION([no-dependencies],,
-[AC_PROVIDE_IFELSE([AC_PROG_CC],
-                  [_AM_DEPENDENCIES(CC)],
-                  [define([AC_PROG_CC],
-                          defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_CXX],
-                  [_AM_DEPENDENCIES(CXX)],
-                  [define([AC_PROG_CXX],
-                          defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
-])
-])
-
-
-# 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_stamp_count=1
-for _am_header in $config_headers :; do
-  case $_am_header in
-    $1 | $1:* )
-      break ;;
-    * )
-      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
-  esac
-done
-echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
-
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_INSTALL_SH
-# ------------------
-# Define $install_sh.
-AC_DEFUN([AM_PROG_INSTALL_SH],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-install_sh=${install_sh-"$am_aux_dir/install-sh"}
-AC_SUBST(install_sh)])
-
-# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 2
-
-# Check whether the underlying file-system supports filenames
-# with a leading dot.  For instance MS-DOS doesn't.
-AC_DEFUN([AM_SET_LEADING_DOT],
-[rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-AC_SUBST([am__leading_dot])])
-
-# Check to see how 'make' treats includes.                 -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 3
-
-# 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 done
-.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
-# We grep out `Entering directory' and `Leaving directory'
-# messages which can occur if `w' ends up in MAKEFLAGS.
-# In particular we don't look at `^make:' because GNU make might
-# be invoked under some other name (usually "gmake"), in which
-# case it prints its new name instead of `make'.
-if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
-   am__include=include
-   am__quote=
-   _am_result=GNU
-fi
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
-   echo '.include "confinc"' > confmf
-   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
-      am__include=.include
-      am__quote="\""
-      _am_result=BSD
-   fi
-fi
-AC_SUBST([am__include])
-AC_SUBST([am__quote])
-AC_MSG_RESULT([$_am_result])
-rm -f confinc confmf
-])
-
-# Copyright (C) 1999, 2000, 2001, 2003, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 3
-
-# AM_PROG_CC_C_O
-# --------------
-# Like AC_PROG_CC_C_O, but changed for automake.
-AC_DEFUN([AM_PROG_CC_C_O],
-[AC_REQUIRE([AC_PROG_CC_C_O])dnl
-AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-# FIXME: we rely on the cache variable name because
-# there is no other way.
-set dummy $CC
-ac_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']`
-if eval "test \"`echo '$ac_cv_prog_cc_'${ac_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
-])
-
-# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
-
-# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 4
-
-# AM_MISSING_PROG(NAME, PROGRAM)
-# ------------------------------
-AC_DEFUN([AM_MISSING_PROG],
-[AC_REQUIRE([AM_MISSING_HAS_RUN])
-$1=${$1-"${am_missing_run}$2"}
-AC_SUBST($1)])
-
-
-# AM_MISSING_HAS_RUN
-# ------------------
-# Define MISSING if not defined so far and test if it supports --run.
-# If it does, set am_missing_run to use it, otherwise, to nothing.
-AC_DEFUN([AM_MISSING_HAS_RUN],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
-# Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
-else
-  am_missing_run=
-  AC_MSG_WARN([`missing' script is too old or missing])
-fi
-])
-
-# Copyright (C) 2003, 2004, 2005  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_MKDIR_P
-# ---------------
-# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
-#
-# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
-# created by `make install' are always world readable, even if the
-# installer happens to have an overly restrictive umask (e.g. 077).
-# This was a mistake.  There are at least two reasons why we must not
-# use `-m 0755':
-#   - it causes special bits like SGID to be ignored,
-#   - it may be too restrictive (some setups expect 775 directories).
-#
-# Do not use -m 0755 and let people choose whatever they expect by
-# setting umask.
-#
-# We cannot accept any implementation of `mkdir' that recognizes `-p'.
-# Some implementations (such as Solaris 8's) are not thread-safe: if a
-# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'
-# concurrently, both version can detect that a/ is missing, but only
-# one can create it and the other will error out.  Consequently we
-# restrict ourselves to GNU make (using the --version option ensures
-# this.)
-AC_DEFUN([AM_PROG_MKDIR_P],
-[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
-  # We used to keeping the `.' as first argument, in order to
-  # allow $(mkdir_p) to be used without argument.  As in
-  #   $(mkdir_p) $(somedir)
-  # where $(somedir) is conditionally defined.  However this is wrong
-  # for two reasons:
-  #  1. if the package is installed by a user who cannot write `.'
-  #     make install will fail,
-  #  2. the above comment should most certainly read
-  #     $(mkdir_p) $(DESTDIR)$(somedir)
-  #     so it does not work when $(somedir) is undefined and
-  #     $(DESTDIR) is not.
-  #  To support the latter case, we have to write
-  #     test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
-  #  so the `.' trick is pointless.
-  mkdir_p='mkdir -p --'
-else
-  # On NextStep and OpenStep, the `mkdir' command does not
-  # recognize any option.  It will interpret all options as
-  # directories to create, and then abort because `.' already
-  # exists.
-  for d in ./-p ./--version;
-  do
-    test -d $d && rmdir $d
-  done
-  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
-  if test -f "$ac_aux_dir/mkinstalldirs"; then
-    mkdir_p='$(mkinstalldirs)'
-  else
-    mkdir_p='$(install_sh) -d'
-  fi
-fi
-AC_SUBST([mkdir_p])])
-
-# Helper functions for option handling.                     -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 3
-
-# _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],
-[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
-
-# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
-# -------------------------------------------
-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
-AC_DEFUN([_AM_IF_OPTION],
-[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-
-# Check to make sure that the build environment is sane.    -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
-# Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 4
-
-# AM_SANITY_CHECK
-# ---------------
-AC_DEFUN([AM_SANITY_CHECK],
-[AC_MSG_CHECKING([whether build environment is sane])
-# Just in case
-sleep 1
-echo timestamp > conftest.file
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments.  Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
-   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
-   if test "$[*]" = "X"; then
-      # -L didn't work.
-      set X `ls -t $srcdir/configure conftest.file`
-   fi
-   rm -f conftest.file
-   if test "$[*]" != "X $srcdir/configure conftest.file" \
-      && test "$[*]" != "X conftest.file $srcdir/configure"; then
-
-      # If neither matched, then we have a broken ls.  This can happen
-      # if, for instance, CONFIG_SHELL is bash and it inherits a
-      # broken ls alias from the environment.  This has actually
-      # happened.  Such a system could not be considered "sane".
-      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
-alias in your environment])
-   fi
-
-   test "$[2]" = conftest.file
-   )
-then
-   # Ok.
-   :
-else
-   AC_MSG_ERROR([newly created file is older than distributed files!
-Check your system clock])
-fi
-AC_MSG_RESULT(yes)])
-
-# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# 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="\${SHELL} \$(install_sh) -c -s"
-AC_SUBST([INSTALL_STRIP_PROGRAM])])
-
-# Check how to create a tarball.                            -*- Autoconf -*-
-
-# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# serial 2
-
-# _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.
-AM_MISSING_PROG([AMTAR], [tar])
-m4_if([$1], [v7],
-     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
-     [m4_case([$1], [ustar],, [pax],,
-              [m4_fatal([Unknown tar format])])
-AC_MSG_CHECKING([how to create a $1 tar archive])
-# Loop over all known methods to create a tar archive until one works.
-_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
-_am_tools=${am_cv_prog_tar_$1-$_am_tools}
-# Do not fold the above two line into one, because Tru64 sh and
-# Solaris sh will not grok spaces in the rhs of `-'.
-for _am_tool in $_am_tools
-do
-  case $_am_tool in
-  gnutar)
-    for _am_tar in tar gnutar gtar;
-    do
-      AM_RUN_LOG([$_am_tar --version]) && break
-    done
-    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
-    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
-    am__untar="$_am_tar -xf -"
-    ;;
-  plaintar)
-    # Must skip GNU tar: if it does not support --format= it doesn't create
-    # ustar tarball either.
-    (tar --version) >/dev/null 2>&1 && continue
-    am__tar='tar chf - "$$tardir"'
-    am__tar_='tar chf - "$tardir"'
-    am__untar='tar xf -'
-    ;;
-  pax)
-    am__tar='pax -L -x $1 -w "$$tardir"'
-    am__tar_='pax -L -x $1 -w "$tardir"'
-    am__untar='pax -r'
-    ;;
-  cpio)
-    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
-    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
-    am__untar='cpio -i -H $1 -d'
-    ;;
-  none)
-    am__tar=false
-    am__tar_=false
-    am__untar=false
-    ;;
-  esac
-
-  # If the value was cached, stop now.  We just wanted to have am__tar
-  # and am__untar set.
-  test -n "${am_cv_prog_tar_$1}" && break
-
-  # tar/untar a dummy directory, and stop if the command works
-  rm -rf conftest.dir
-  mkdir conftest.dir
-  echo GrepMe > conftest.dir/file
-  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
-  rm -rf conftest.dir
-  if test -s conftest.tar; then
-    AM_RUN_LOG([$am__untar <conftest.tar])
-    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
-  fi
-done
-rm -rf conftest.dir
-
-AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
-AC_MSG_RESULT([$am_cv_prog_tar_$1])])
-AC_SUBST([am__tar])
-AC_SUBST([am__untar])
-]) # _AM_PROG_TAR
-
diff --git a/compile b/compile
deleted file mode 100755 (executable)
index 1b1d232..0000000
--- a/compile
+++ /dev/null
@@ -1,142 +0,0 @@
-#! /bin/sh
-# Wrapper for compilers which do not understand `-c -o'.
-
-scriptversion=2005-05-14.22
-
-# Copyright (C) 1999, 2000, 2003, 2004, 2005 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, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-# 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>.
-
-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 $?
-    ;;
-esac
-
-ofile=
-cfile=
-eat=
-
-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 -e 's|^.*/||' -e '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
-  mv "$cofile" "$ofile"
-elif test -f "${cofile}bj"; then
-  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-end: "$"
-# End:
diff --git a/config.guess b/config.guess
deleted file mode 100755 (executable)
index f32079a..0000000
+++ /dev/null
@@ -1,1526 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-#   Free Software Foundation, Inc.
-
-timestamp='2008-01-23'
-
-# This file is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Originally written by Per Bothner <per@bothner.com>.
-# Please send patches to <config-patches@gnu.org>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# This script attempts to guess a canonical system name similar to
-# config.sub.  If it succeeds, it prints the system name on stdout, and
-# exits with 0.  Otherwise, it exits with 1.
-#
-# The plan is that this can be called by configure scripts if you
-# don't specify an explicit build system type.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
-  case $1 in
-    --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit ;;
-    --version | -v )
-       echo "$version" ; exit ;;
-    --help | --h* | -h )
-       echo "$usage"; exit ;;
-    -- )     # Stop option processing
-       shift; break ;;
-    - )        # Use stdin as input.
-       break ;;
-    -* )
-       echo "$me: invalid option $1$help" >&2
-       exit 1 ;;
-    * )
-       break ;;
-  esac
-done
-
-if test $# != 0; then
-  echo "$me: too many arguments$help" >&2
-  exit 1
-fi
-
-trap 'exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# Portable tmp directory creation inspired by the Autoconf team.
-
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,)    echo "int x;" > $dummy.c ;
-       for c in cc gcc c89 c99 ; do
-         if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
-            CC_FOR_BUILD="$c"; break ;
-         fi ;
-       done ;
-       if test x"$CC_FOR_BUILD" = x ; then
-         CC_FOR_BUILD=no_compiler_found ;
-       fi
-       ;;
- ,,*)   CC_FOR_BUILD=$CC ;;
- ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
-esac ; set_cc_for_build= ;'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
-       PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
-    *:NetBSD:*:*)
-       # NetBSD (nbsd) targets should (where applicable) match one or
-       # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
-       # *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
-       # switched to ELF, *-*-netbsd* would select the old
-       # object file format.  This provides both forward
-       # compatibility and a consistent mechanism for selecting the
-       # object file format.
-       #
-       # Note: NetBSD doesn't particularly care about the vendor
-       # portion of the name.  We always set it to "unknown".
-       sysctl="sysctl -n hw.machine_arch"
-       UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
-           /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
-       case "${UNAME_MACHINE_ARCH}" in
-           armeb) machine=armeb-unknown ;;
-           arm*) machine=arm-unknown ;;
-           sh3el) machine=shl-unknown ;;
-           sh3eb) machine=sh-unknown ;;
-           sh5el) machine=sh5le-unknown ;;
-           *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
-       esac
-       # The Operating System including object format, if it has switched
-       # to ELF recently, or will in the future.
-       case "${UNAME_MACHINE_ARCH}" in
-           arm*|i386|m68k|ns32k|sh3*|sparc|vax)
-               eval $set_cc_for_build
-               if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
-                       | grep __ELF__ >/dev/null
-               then
-                   # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
-                   # Return netbsd for either.  FIX?
-                   os=netbsd
-               else
-                   os=netbsdelf
-               fi
-               ;;
-           *)
-               os=netbsd
-               ;;
-       esac
-       # The OS release
-       # Debian GNU/NetBSD machines have a different userland, and
-       # thus, need a distinct triplet. However, they do not need
-       # kernel version information, so it can be replaced with a
-       # suitable tag, in the style of linux-gnu.
-       case "${UNAME_VERSION}" in
-           Debian*)
-               release='-gnu'
-               ;;
-           *)
-               release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
-               ;;
-       esac
-       # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
-       # contains redundant information, the shorter form:
-       # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-       echo "${machine}-${os}${release}"
-       exit ;;
-    *:OpenBSD:*:*)
-       UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
-       echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
-       exit ;;
-    *:ekkoBSD:*:*)
-       echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
-       exit ;;
-    *:SolidBSD:*:*)
-       echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
-       exit ;;
-    macppc:MirBSD:*:*)
-       echo powerpc-unknown-mirbsd${UNAME_RELEASE}
-       exit ;;
-    *:MirBSD:*:*)
-       echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
-       exit ;;
-    alpha:OSF1:*:*)
-       case $UNAME_RELEASE in
-       *4.0)
-               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
-               ;;
-       *5.*)
-               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
-               ;;
-       esac
-       # According to Compaq, /usr/sbin/psrinfo has been available on
-       # OSF/1 and Tru64 systems produced since 1995.  I hope that
-       # covers most systems running today.  This code pipes the CPU
-       # types through head -n 1, so we only detect the type of CPU 0.
-       ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
-       case "$ALPHA_CPU_TYPE" in
-           "EV4 (21064)")
-               UNAME_MACHINE="alpha" ;;
-           "EV4.5 (21064)")
-               UNAME_MACHINE="alpha" ;;
-           "LCA4 (21066/21068)")
-               UNAME_MACHINE="alpha" ;;
-           "EV5 (21164)")
-               UNAME_MACHINE="alphaev5" ;;
-           "EV5.6 (21164A)")
-               UNAME_MACHINE="alphaev56" ;;
-           "EV5.6 (21164PC)")
-               UNAME_MACHINE="alphapca56" ;;
-           "EV5.7 (21164PC)")
-               UNAME_MACHINE="alphapca57" ;;
-           "EV6 (21264)")
-               UNAME_MACHINE="alphaev6" ;;
-           "EV6.7 (21264A)")
-               UNAME_MACHINE="alphaev67" ;;
-           "EV6.8CB (21264C)")
-               UNAME_MACHINE="alphaev68" ;;
-           "EV6.8AL (21264B)")
-               UNAME_MACHINE="alphaev68" ;;
-           "EV6.8CX (21264D)")
-               UNAME_MACHINE="alphaev68" ;;
-           "EV6.9A (21264/EV69A)")
-               UNAME_MACHINE="alphaev69" ;;
-           "EV7 (21364)")
-               UNAME_MACHINE="alphaev7" ;;
-           "EV7.9 (21364A)")
-               UNAME_MACHINE="alphaev79" ;;
-       esac
-       # A Pn.n version is a patched version.
-       # A Vn.n version is a released version.
-       # A Tn.n version is a released field test version.
-       # A Xn.n version is an unreleased experimental baselevel.
-       # 1.2 uses "1.2" for uname -r.
-       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-       exit ;;
-    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 ;;
-    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:SunOS:5.*:* | i86xen:SunOS:5.*:*)
-       echo i386-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:*:[456])
-       IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
-       if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
-               IBM_ARCH=rs6000
-       else
-               IBM_ARCH=powerpc
-       fi
-       if [ -x /usr/bin/oslevel ] ; then
-               IBM_REV=`/usr/bin/oslevel`
-       else
-               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-       fi
-       echo ${IBM_ARCH}-ibm-aix${IBM_REV}
-       exit ;;
-    *:AIX:*:*)
-       echo rs6000-ibm-aix
-       exit ;;
-    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
-       echo romp-ibm-bsd4.4
-       exit ;;
-    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
-       echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
-       exit ;;                             # report: romp-ibm BSD 4.3
-    *:BOSX:*:*)
-       echo rs6000-bull-bosx
-       exit ;;
-    DPX/2?00:B.O.S.:*:*)
-       echo m68k-bull-sysv3
-       exit ;;
-    9000/[34]??:4.3bsd:1.*:*)
-       echo m68k-hp-bsd
-       exit ;;
-    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
-       echo m68k-hp-bsd4.4
-       exit ;;
-    9000/[34678]??:HP-UX:*:*)
-       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-       case "${UNAME_MACHINE}" in
-           9000/31? )            HP_ARCH=m68000 ;;
-           9000/[34]?? )         HP_ARCH=m68k ;;
-           9000/[678][0-9][0-9])
-               if [ -x /usr/bin/getconf ]; then
-                   sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-                    case "${sc_cpu_version}" in
-                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-                      532)                      # CPU_PA_RISC2_0
-                        case "${sc_kernel_bits}" in
-                          32) HP_ARCH="hppa2.0n" ;;
-                          64) HP_ARCH="hppa2.0w" ;;
-                         '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
-                        esac ;;
-                    esac
-               fi
-               if [ "${HP_ARCH}" = "" ]; then
-                   eval $set_cc_for_build
-                   sed 's/^              //' << EOF >$dummy.c
-
-              #define _HPUX_SOURCE
-              #include <stdlib.h>
-              #include <unistd.h>
-
-              int main ()
-              {
-              #if defined(_SC_KERNEL_BITS)
-                  long bits = sysconf(_SC_KERNEL_BITS);
-              #endif
-                  long cpu  = sysconf (_SC_CPU_VERSION);
-
-                  switch (cpu)
-               {
-               case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-               case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-               case CPU_PA_RISC2_0:
-              #if defined(_SC_KERNEL_BITS)
-                   switch (bits)
-                       {
-                       case 64: puts ("hppa2.0w"); break;
-                       case 32: puts ("hppa2.0n"); break;
-                       default: puts ("hppa2.0"); break;
-                       } break;
-              #else  /* !defined(_SC_KERNEL_BITS) */
-                   puts ("hppa2.0"); break;
-              #endif
-               default: puts ("hppa1.0"); break;
-               }
-                  exit (0);
-              }
-EOF
-                   (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
-                   test -z "$HP_ARCH" && HP_ARCH=hppa
-               fi ;;
-       esac
-       if [ ${HP_ARCH} = "hppa2.0w" ]
-       then
-           eval $set_cc_for_build
-
-           # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
-           # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
-           # generating 64-bit code.  GNU and HP use different nomenclature:
-           #
-           # $ CC_FOR_BUILD=cc ./config.guess
-           # => hppa2.0w-hp-hpux11.23
-           # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
-           # => hppa64-hp-hpux11.23
-
-           if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
-               grep __LP64__ >/dev/null
-           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:*:*)
-       case ${UNAME_MACHINE} in
-           pc98)
-               echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-           amd64)
-               echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-           *)
-               echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-       esac
-       exit ;;
-    i*:CYGWIN*:*)
-       echo ${UNAME_MACHINE}-pc-cygwin
-       exit ;;
-    *:MINGW*:*)
-       echo ${UNAME_MACHINE}-pc-mingw32
-       exit ;;
-    i*:windows32*:*)
-       # uname -m includes "-pc" on this system.
-       echo ${UNAME_MACHINE}-mingw32
-       exit ;;
-    i*:PW*:*)
-       echo ${UNAME_MACHINE}-pc-pw32
-       exit ;;
-    *:Interix*:[3456]*)
-       case ${UNAME_MACHINE} in
-           x86)
-               echo i586-pc-interix${UNAME_RELEASE}
-               exit ;;
-           EM64T | authenticamd)
-               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 ;;
-    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
-       # How do we know it's Interix rather than the generic POSIX subsystem?
-       # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
-       # UNAME_MACHINE based on the output of uname instead of i386?
-       echo i586-pc-interix
-       exit ;;
-    i*:UWIN*:*)
-       echo ${UNAME_MACHINE}-pc-uwin
-       exit ;;
-    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
-       echo x86_64-unknown-cygwin
-       exit ;;
-    p*:CYGWIN*:*)
-       echo powerpcle-unknown-cygwin
-       exit ;;
-    prep*:SunOS:5.*:*)
-       echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit ;;
-    *:GNU:*:*)
-       # the GNU system
-       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-       exit ;;
-    *:GNU/*:*:*)
-       # other systems with GNU libc and userland
-       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
-       exit ;;
-    i*86:Minix:*:*)
-       echo ${UNAME_MACHINE}-pc-minix
-       exit ;;
-    arm*:Linux:*:*)
-       eval $set_cc_for_build
-       if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
-           | grep -q __ARM_EABI__
-       then
-           echo ${UNAME_MACHINE}-unknown-linux-gnu
-       else
-           echo ${UNAME_MACHINE}-unknown-linux-gnueabi
-       fi
-       exit ;;
-    avr32*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit ;;
-    cris:Linux:*:*)
-       echo cris-axis-linux-gnu
-       exit ;;
-    crisv32:Linux:*:*)
-       echo crisv32-axis-linux-gnu
-       exit ;;
-    frv:Linux:*:*)
-       echo frv-unknown-linux-gnu
-       exit ;;
-    ia64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit ;;
-    m32r*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit ;;
-    m68*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit ;;
-    mips:Linux:*:*)
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-       #undef CPU
-       #undef mips
-       #undef mipsel
-       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-       CPU=mipsel
-       #else
-       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-       CPU=mips
-       #else
-       CPU=
-       #endif
-       #endif
-EOF
-       eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-           /^CPU/{
-               s: ::g
-               p
-           }'`"
-       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
-       ;;
-    mips64:Linux:*:*)
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-       #undef CPU
-       #undef mips64
-       #undef mips64el
-       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-       CPU=mips64el
-       #else
-       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-       CPU=mips64
-       #else
-       CPU=
-       #endif
-       #endif
-EOF
-       eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-           /^CPU/{
-               s: ::g
-               p
-           }'`"
-       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
-       ;;
-    or32:Linux:*:*)
-       echo or32-unknown-linux-gnu
-       exit ;;
-    ppc:Linux:*:*)
-       echo powerpc-unknown-linux-gnu
-       exit ;;
-    ppc64:Linux:*:*)
-       echo powerpc64-unknown-linux-gnu
-       exit ;;
-    alpha:Linux:*:*)
-       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-         EV5)   UNAME_MACHINE=alphaev5 ;;
-         EV56)  UNAME_MACHINE=alphaev56 ;;
-         PCA56) UNAME_MACHINE=alphapca56 ;;
-         PCA57) UNAME_MACHINE=alphapca56 ;;
-         EV6)   UNAME_MACHINE=alphaev6 ;;
-         EV67)  UNAME_MACHINE=alphaev67 ;;
-         EV68*) UNAME_MACHINE=alphaev68 ;;
-        esac
-       objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
-       if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
-       echo ${UNAME_MACHINE}-unknown-linux-gnu${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-gnu ;;
-         PA8*) echo hppa2.0-unknown-linux-gnu ;;
-         *)    echo hppa-unknown-linux-gnu ;;
-       esac
-       exit ;;
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
-       echo hppa64-unknown-linux-gnu
-       exit ;;
-    s390:Linux:*:* | s390x:Linux:*:*)
-       echo ${UNAME_MACHINE}-ibm-linux
-       exit ;;
-    sh64*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit ;;
-    sh*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit ;;
-    sparc:Linux:*:* | sparc64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit ;;
-    vax:Linux:*:*)
-       echo ${UNAME_MACHINE}-dec-linux-gnu
-       exit ;;
-    x86_64:Linux:*:*)
-       echo x86_64-unknown-linux-gnu
-       exit ;;
-    xtensa*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-gnu
-       exit ;;
-    i*86:Linux:*:*)
-       # The BFD linker knows what the default object file format is, so
-       # first see if it will tell us. cd to the root directory to prevent
-       # problems with other programs or directories called `ld' in the path.
-       # Set LC_ALL=C to ensure ld outputs messages in English.
-       ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
-                        | sed -ne '/supported targets:/!d
-                                   s/[         ][      ]*/ /g
-                                   s/.*supported targets: *//
-                                   s/ .*//
-                                   p'`
-        case "$ld_supported_targets" in
-         elf32-i386)
-               TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
-               ;;
-         a.out-i386-linux)
-               echo "${UNAME_MACHINE}-pc-linux-gnuaout"
-               exit ;;
-         coff-i386)
-               echo "${UNAME_MACHINE}-pc-linux-gnucoff"
-               exit ;;
-         "")
-               # Either a pre-BFD a.out linker (linux-gnuoldld) or
-               # one that does not give us useful --help.
-               echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
-               exit ;;
-       esac
-       # Determine whether the default compiler is a.out or elf
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-       #include <features.h>
-       #ifdef __ELF__
-       # ifdef __GLIBC__
-       #  if __GLIBC__ >= 2
-       LIBC=gnu
-       #  else
-       LIBC=gnulibc1
-       #  endif
-       # else
-       LIBC=gnulibc1
-       # endif
-       #else
-       #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
-       LIBC=gnu
-       #else
-       LIBC=gnuaout
-       #endif
-       #endif
-       #ifdef __dietlibc__
-       LIBC=dietlibc
-       #endif
-EOF
-       eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
-           /^LIBC/{
-               s: ::g
-               p
-           }'`"
-       test x"${LIBC}" != x && {
-               echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
-               exit
-       }
-       test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; 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.0*:*)
-       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 i386.
-       echo i386-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; } ;;
-    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.0*:*)
-       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 ;;
-    SX-4:SUPER-UX:*:*)
-       echo sx4-nec-superux${UNAME_RELEASE}
-       exit ;;
-    SX-5:SUPER-UX:*:*)
-       echo sx5-nec-superux${UNAME_RELEASE}
-       exit ;;
-    SX-6:SUPER-UX:*:*)
-       echo sx6-nec-superux${UNAME_RELEASE}
-       exit ;;
-    SX-7:SUPER-UX:*:*)
-       echo sx7-nec-superux${UNAME_RELEASE}
-       exit ;;
-    SX-8:SUPER-UX:*:*)
-       echo sx8-nec-superux${UNAME_RELEASE}
-       exit ;;
-    SX-8R:SUPER-UX:*:*)
-       echo sx8r-nec-superux${UNAME_RELEASE}
-       exit ;;
-    Power*:Rhapsody:*:*)
-       echo powerpc-apple-rhapsody${UNAME_RELEASE}
-       exit ;;
-    *:Rhapsody:*:*)
-       echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
-       exit ;;
-    *:Darwin:*:*)
-       UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-       case $UNAME_PROCESSOR in
-           unknown) UNAME_PROCESSOR=powerpc ;;
-       esac
-       echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
-       exit ;;
-    *:procnto*:*:* | *:QNX:[0123456789]*:*)
-       UNAME_PROCESSOR=`uname -p`
-       if test "$UNAME_PROCESSOR" = "x86"; then
-               UNAME_PROCESSOR=i386
-               UNAME_MACHINE=pc
-       fi
-       echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
-       exit ;;
-    *:QNX:*:4*)
-       echo i386-pc-qnx
-       exit ;;
-    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 ;;
-esac
-
-#echo '(No uname command or uname output not recognized.)' 1>&2
-#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
-
-eval $set_cc_for_build
-cat >$dummy.c <<EOF
-#ifdef _SEQUENT_
-# include <sys/types.h>
-# include <sys/utsname.h>
-#endif
-main ()
-{
-#if defined (sony)
-#if defined (MIPSEB)
-  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
-     I don't know....  */
-  printf ("mips-sony-bsd\n"); exit (0);
-#else
-#include <sys/param.h>
-  printf ("m68k-sony-newsos%s\n",
-#ifdef NEWSOS4
-          "4"
-#else
-         ""
-#endif
-         ); exit (0);
-#endif
-#endif
-
-#if defined (__arm) && defined (__acorn) && defined (__unix)
-  printf ("arm-acorn-riscix\n"); exit (0);
-#endif
-
-#if defined (hp300) && !defined (hpux)
-  printf ("m68k-hp-bsd\n"); exit (0);
-#endif
-
-#if defined (NeXT)
-#if !defined (__ARCHITECTURE__)
-#define __ARCHITECTURE__ "m68k"
-#endif
-  int version;
-  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
-  if (version < 4)
-    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
-  else
-    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
-  exit (0);
-#endif
-
-#if defined (MULTIMAX) || defined (n16)
-#if defined (UMAXV)
-  printf ("ns32k-encore-sysv\n"); exit (0);
-#else
-#if defined (CMU)
-  printf ("ns32k-encore-mach\n"); exit (0);
-#else
-  printf ("ns32k-encore-bsd\n"); exit (0);
-#endif
-#endif
-#endif
-
-#if defined (__386BSD__)
-  printf ("i386-pc-bsd\n"); exit (0);
-#endif
-
-#if defined (sequent)
-#if defined (i386)
-  printf ("i386-sequent-dynix\n"); exit (0);
-#endif
-#if defined (ns32000)
-  printf ("ns32k-sequent-dynix\n"); exit (0);
-#endif
-#endif
-
-#if defined (_SEQUENT_)
-    struct utsname un;
-
-    uname(&un);
-
-    if (strncmp(un.version, "V2", 2) == 0) {
-       printf ("i386-sequent-ptx2\n"); exit (0);
-    }
-    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
-       printf ("i386-sequent-ptx1\n"); exit (0);
-    }
-    printf ("i386-sequent-ptx\n"); exit (0);
-
-#endif
-
-#if defined (vax)
-# if !defined (ultrix)
-#  include <sys/param.h>
-#  if defined (BSD)
-#   if BSD == 43
-      printf ("vax-dec-bsd4.3\n"); exit (0);
-#   else
-#    if BSD == 199006
-      printf ("vax-dec-bsd4.3reno\n"); exit (0);
-#    else
-      printf ("vax-dec-bsd\n"); exit (0);
-#    endif
-#   endif
-#  else
-    printf ("vax-dec-bsd\n"); exit (0);
-#  endif
-# else
-    printf ("vax-dec-ultrix\n"); exit (0);
-# endif
-#endif
-
-#if defined (alliant) && defined (i860)
-  printf ("i860-alliant-bsd\n"); exit (0);
-#endif
-
-  exit (1);
-}
-EOF
-
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
-       { echo "$SYSTEM_NAME"; exit; }
-
-# Apollos put the system type in the environment.
-
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
-
-# Convex versions that predate uname can use getsysinfo(1)
-
-if [ -x /usr/convex/getsysinfo ]
-then
-    case `getsysinfo -f cpu_type` in
-    c1*)
-       echo c1-convex-bsd
-       exit ;;
-    c2*)
-       if getsysinfo -f scalar_acc
-       then echo c32-convex-bsd
-       else echo c2-convex-bsd
-       fi
-       exit ;;
-    c34*)
-       echo c34-convex-bsd
-       exit ;;
-    c38*)
-       echo c38-convex-bsd
-       exit ;;
-    c4*)
-       echo c4-convex-bsd
-       exit ;;
-    esac
-fi
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-and
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo               = `(hostinfo) 2>/dev/null`
-/bin/universe          = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch              = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM  = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/config.h.in b/config.h.in
deleted file mode 100644 (file)
index 882df47..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/* config.h.in.  Generated from configure.ac by autoheader.  */
-
-/* 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 <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define to 1 if your C compiler doesn't accept -c and -o together. */
-#undef NO_MINUS_C_MINUS_O
-
-/* 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 version of this package. */
-#undef PACKAGE_VERSION
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Version number of package */
-#undef VERSION
diff --git a/config.sub b/config.sub
deleted file mode 100755 (executable)
index 6759825..0000000
+++ /dev/null
@@ -1,1658 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-#   Free Software Foundation, Inc.
-
-timestamp='2008-01-16'
-
-# This file is (in principle) common to ALL GNU software.
-# The presence of a machine in this file suggests that SOME GNU software
-# can handle that machine.  It does not imply ALL GNU software can.
-#
-# This file is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
-# 02110-1301, USA.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-
-# Please send patches to <config-patches@gnu.org>.  Submit a context
-# diff and a properly formatted ChangeLog entry.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support.  The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-#      CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-#      CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
-       $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006, 2007, 2008 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-dietlibc | linux-newlib* | linux-uclibc* | \
-  uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
-  storm-chaos* | os2-emx* | rtmk-nova*)
-    os=-$maybe_os
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
-    ;;
-  *)
-    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)
-               os=
-               basic_machine=$1
-               ;;
-       -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*)
-               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 \
-       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
-       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
-       | am33_2.0 \
-       | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
-       | bfin \
-       | c4x | clipper \
-       | d10v | d30v | dlx | dsp16xx \
-       | fido | fr30 | frv \
-       | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
-       | i370 | i860 | i960 | ia64 \
-       | ip2k | iq2000 \
-       | m32c | m32r | m32rle | m68000 | m68k | m88k \
-       | maxq | mb | microblaze | mcore | mep \
-       | mips | mipsbe | mipseb | mipsel | mipsle \
-       | mips16 \
-       | mips64 | mips64el \
-       | mips64vr | mips64vrel \
-       | mips64orion | mips64orionel \
-       | mips64vr4100 | mips64vr4100el \
-       | mips64vr4300 | mips64vr4300el \
-       | mips64vr5000 | mips64vr5000el \
-       | mips64vr5900 | mips64vr5900el \
-       | mipsisa32 | mipsisa32el \
-       | mipsisa32r2 | mipsisa32r2el \
-       | mipsisa64 | mipsisa64el \
-       | mipsisa64r2 | mipsisa64r2el \
-       | mipsisa64sb1 | mipsisa64sb1el \
-       | mipsisa64sr71k | mipsisa64sr71kel \
-       | mipstx39 | mipstx39el \
-       | mn10200 | mn10300 \
-       | mt \
-       | msp430 \
-       | nios | nios2 \
-       | ns16k | ns32k \
-       | or32 \
-       | pdp10 | pdp11 | pj | pjl \
-       | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
-       | pyramid \
-       | score \
-       | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
-       | sh64 | sh64le \
-       | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
-       | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
-       | spu | strongarm \
-       | tahoe | thumb | tic4x | tic80 | tron \
-       | v850 | v850e \
-       | we32k \
-       | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
-       | z8k)
-               basic_machine=$basic_machine-unknown
-               ;;
-       m6811 | m68hc11 | m6812 | m68hc12)
-               # Motorola 68HC11/12.
-               basic_machine=$basic_machine-unknown
-               os=-none
-               ;;
-       m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
-               ;;
-       ms1)
-               basic_machine=mt-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-* \
-       | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
-       | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
-       | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
-       | avr-* | avr32-* \
-       | bfin-* | bs2000-* \
-       | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
-       | clipper-* | craynv-* | cydra-* \
-       | d10v-* | d30v-* | dlx-* \
-       | elxsi-* \
-       | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
-       | h8300-* | h8500-* \
-       | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
-       | i*86-* | i860-* | i960-* | ia64-* \
-       | ip2k-* | iq2000-* \
-       | m32c-* | m32r-* | m32rle-* \
-       | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-       | m88110-* | m88k-* | maxq-* | mcore-* \
-       | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
-       | mips16-* \
-       | mips64-* | mips64el-* \
-       | mips64vr-* | mips64vrel-* \
-       | mips64orion-* | mips64orionel-* \
-       | mips64vr4100-* | mips64vr4100el-* \
-       | mips64vr4300-* | mips64vr4300el-* \
-       | mips64vr5000-* | mips64vr5000el-* \
-       | mips64vr5900-* | mips64vr5900el-* \
-       | mipsisa32-* | mipsisa32el-* \
-       | mipsisa32r2-* | mipsisa32r2el-* \
-       | mipsisa64-* | mipsisa64el-* \
-       | mipsisa64r2-* | mipsisa64r2el-* \
-       | mipsisa64sb1-* | mipsisa64sb1el-* \
-       | mipsisa64sr71k-* | mipsisa64sr71kel-* \
-       | mipstx39-* | mipstx39el-* \
-       | mmix-* \
-       | mt-* \
-       | msp430-* \
-       | nios-* | nios2-* \
-       | none-* | np1-* | ns16k-* | ns32k-* \
-       | orion-* \
-       | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
-       | pyramid-* \
-       | romp-* | rs6000-* \
-       | sh-* | sh[1234]-* | sh[24]a-* | 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-* | strongarm-* | sv1-* | sx?-* \
-       | tahoe-* | thumb-* \
-       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
-       | tron-* \
-       | v850-* | v850e-* | vax-* \
-       | we32k-* \
-       | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
-       | xstormy16-* | xtensa*-* \
-       | ymp-* \
-       | z8k-*)
-               ;;
-       # 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
-               ;;
-       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
-               ;;
-       c90)
-               basic_machine=c90-cray
-               os=-unicos
-               ;;
-       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)
-               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
-               ;;
-       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'm not sure what "Sysv32" means.  Should this be sysv3.2?
-       i*86v32)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-sysv32
-               ;;
-       i*86v4*)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-sysv4
-               ;;
-       i*86v)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-sysv
-               ;;
-       i*86sol2)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-solaris2
-               ;;
-       i386mach)
-               basic_machine=i386-mach
-               os=-mach
-               ;;
-       i386-vsta | vsta)
-               basic_machine=i386-unknown
-               os=-vsta
-               ;;
-       iris | iris4d)
-               basic_machine=mips-sgi
-               case $os in
-                   -irix*)
-                       ;;
-                   *)
-                       os=-irix4
-                       ;;
-               esac
-               ;;
-       isi68 | isi)
-               basic_machine=m68k-isi
-               os=-sysv
-               ;;
-       m68knommu)
-               basic_machine=m68k-unknown
-               os=-linux
-               ;;
-       m68knommu-*)
-               basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
-               os=-linux
-               ;;
-       m88k-omron*)
-               basic_machine=m88k-omron
-               ;;
-       magnum | m3230)
-               basic_machine=mips-mips
-               os=-sysv
-               ;;
-       merlin)
-               basic_machine=ns32k-utek
-               os=-sysv
-               ;;
-       mingw32)
-               basic_machine=i386-pc
-               os=-mingw32
-               ;;
-       mingw32ce)
-               basic_machine=arm-unknown
-               os=-mingw32ce
-               ;;
-       miniframe)
-               basic_machine=m68000-convergent
-               ;;
-       *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
-               basic_machine=m68k-atari
-               os=-mint
-               ;;
-       mips3*-*)
-               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
-               ;;
-       mips3*)
-               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
-               ;;
-       monitor)
-               basic_machine=m68k-rom68k
-               os=-coff
-               ;;
-       morphos)
-               basic_machine=powerpc-unknown
-               os=-morphos
-               ;;
-       msdos)
-               basic_machine=i386-pc
-               os=-msdos
-               ;;
-       ms1-*)
-               basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
-               ;;
-       mvs)
-               basic_machine=i370-ibm
-               os=-mvs
-               ;;
-       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
-               ;;
-       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)    basic_machine=powerpc-unknown
-               ;;
-       ppc-*)  basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ppcle | powerpclittle | ppc-le | powerpc-little)
-               basic_machine=powerpcle-unknown
-               ;;
-       ppcle-* | powerpclittle-*)
-               basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ppc64)  basic_machine=powerpc64-unknown
-               ;;
-       ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ppc64le | powerpc64little | ppc64-le | powerpc64-little)
-               basic_machine=powerpc64le-unknown
-               ;;
-       ppc64le-* | powerpc64little-*)
-               basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ps2)
-               basic_machine=i386-ibm
-               ;;
-       pw32)
-               basic_machine=i586-unknown
-               os=-pw32
-               ;;
-       rdos)
-               basic_machine=i386-pc
-               os=-rdos
-               ;;
-       rom68k)
-               basic_machine=m68k-rom68k
-               os=-coff
-               ;;
-       rm[46]00)
-               basic_machine=mips-siemens
-               ;;
-       rtpc | rtpc-*)
-               basic_machine=romp-ibm
-               ;;
-       s390 | s390-*)
-               basic_machine=s390-ibm
-               ;;
-       s390x | s390x-*)
-               basic_machine=s390x-ibm
-               ;;
-       sa29200)
-               basic_machine=a29k-amd
-               os=-udi
-               ;;
-       sb1)
-               basic_machine=mipsisa64sb1-unknown
-               ;;
-       sb1el)
-               basic_machine=mipsisa64sb1el-unknown
-               ;;
-       sde)
-               basic_machine=mipsisa32-sde
-               os=-elf
-               ;;
-       sei)
-               basic_machine=mips-sei
-               os=-seiux
-               ;;
-       sequent)
-               basic_machine=i386-sequent
-               ;;
-       sh)
-               basic_machine=sh-hitachi
-               os=-hms
-               ;;
-       sh5el)
-               basic_machine=sh5le-unknown
-               ;;
-       sh64)
-               basic_machine=sh64-unknown
-               ;;
-       sparclite-wrs | simso-wrs)
-               basic_machine=sparclite-wrs
-               os=-vxworks
-               ;;
-       sps7)
-               basic_machine=m68k-bull
-               os=-sysv2
-               ;;
-       spur)
-               basic_machine=spur-unknown
-               ;;
-       st2000)
-               basic_machine=m68k-tandem
-               ;;
-       stratus)
-               basic_machine=i860-stratus
-               os=-sysv4
-               ;;
-       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
-               ;;
-       tic54x | c54x*)
-               basic_machine=tic54x-unknown
-               os=-coff
-               ;;
-       tic55x | c55x*)
-               basic_machine=tic55x-unknown
-               os=-coff
-               ;;
-       tic6x | c6x*)
-               basic_machine=tic6x-unknown
-               os=-coff
-               ;;
-       tile*)
-               basic_machine=tile-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
-               ;;
-       ymp)
-               basic_machine=ymp-cray
-               os=-unicos
-               ;;
-       z8k-*-coff)
-               basic_machine=z8k-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[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.
-       -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* | -sunos | -sunos[34]*\
-             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
-             | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-             | -aos* \
-             | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
-             | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-             | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-             | -openbsd* | -solidbsd* \
-             | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
-             | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
-             | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
-             | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-             | -chorusos* | -chorusrdb* \
-             | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-             | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
-             | -uxpv* | -beos* | -mpeix* | -udk* \
-             | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
-             | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
-             | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
-             | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
-             | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
-             | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-             | -skyos* | -haiku* | -rdos* | -toppers* | -drops*)
-       # Remember, each alternative MUST END IN *, to match a version number.
-               ;;
-       -qnx*)
-               case $basic_machine in
-                   x86-* | i*86-*)
-                       ;;
-                   *)
-                       os=-nto$os
-                       ;;
-               esac
-               ;;
-       -nto-qnx*)
-               ;;
-       -nto*)
-               os=`echo $os | sed -e 's|nto|nto-qnx|'`
-               ;;
-       -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
-             | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
-             | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
-               ;;
-       -mac*)
-               os=`echo $os | sed -e 's|mac|macos|'`
-               ;;
-       -linux-dietlibc)
-               os=-linux-dietlibc
-               ;;
-       -linux*)
-               os=`echo $os | sed -e 's|linux|linux-gnu|'`
-               ;;
-       -sunos5*)
-               os=`echo $os | sed -e 's|sunos5|solaris2|'`
-               ;;
-       -sunos6*)
-               os=`echo $os | sed -e 's|sunos6|solaris3|'`
-               ;;
-       -opened*)
-               os=-openedition
-               ;;
-        -os400*)
-               os=-os400
-               ;;
-       -wince*)
-               os=-wince
-               ;;
-       -osfrose*)
-               os=-osfrose
-               ;;
-       -osf*)
-               os=-osf
-               ;;
-       -utek*)
-               os=-bsd
-               ;;
-       -dynix*)
-               os=-bsd
-               ;;
-       -acis*)
-               os=-aos
-               ;;
-       -atheos*)
-               os=-atheos
-               ;;
-       -syllable*)
-               os=-syllable
-               ;;
-       -386bsd)
-               os=-bsd
-               ;;
-       -ctix* | -uts*)
-               os=-sysv
-               ;;
-       -nova*)
-               os=-rtmk-nova
-               ;;
-       -ns2 )
-               os=-nextstep2
-               ;;
-       -nsk*)
-               os=-nsk
-               ;;
-       # Preserve the version number of sinix5.
-       -sinix5.*)
-               os=`echo $os | sed -e 's|sinix|sysv|'`
-               ;;
-       -sinix*)
-               os=-sysv4
-               ;;
-        -tpf*)
-               os=-tpf
-               ;;
-       -triton*)
-               os=-sysv3
-               ;;
-       -oss*)
-               os=-sysv3
-               ;;
-       -svr4)
-               os=-sysv4
-               ;;
-       -svr3)
-               os=-sysv3
-               ;;
-       -sysvr4)
-               os=-sysv4
-               ;;
-       # This must come after -sysvr4.
-       -sysv*)
-               ;;
-       -ose*)
-               os=-ose
-               ;;
-       -es1800*)
-               os=-ose
-               ;;
-       -xenix)
-               os=-xenix
-               ;;
-       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-               os=-mint
-               ;;
-       -aros*)
-               os=-aros
-               ;;
-       -kaos*)
-               os=-kaos
-               ;;
-       -zvmoe)
-               os=-zvmoe
-               ;;
-       -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
-               ;;
-       # 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
-               # This also exists in the configure program, but was not the
-               # default.
-               # os=-sunos4
-               ;;
-       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
-                               ;;
-                       -aix*)
-                               vendor=ibm
-                               ;;
-                       -beos*)
-                               vendor=be
-                               ;;
-                       -hpux*)
-                               vendor=hp
-                               ;;
-                       -mpeix*)
-                               vendor=hp
-                               ;;
-                       -hiux*)
-                               vendor=hitachi
-                               ;;
-                       -unos*)
-                               vendor=crds
-                               ;;
-                       -dgux*)
-                               vendor=dg
-                               ;;
-                       -luna*)
-                               vendor=omron
-                               ;;
-                       -genix*)
-                               vendor=ns
-                               ;;
-                       -mvs* | -opened*)
-                               vendor=ibm
-                               ;;
-                       -os400*)
-                               vendor=ibm
-                               ;;
-                       -ptx*)
-                               vendor=sequent
-                               ;;
-                       -tpf*)
-                               vendor=ibm
-                               ;;
-                       -vxsim* | -vxworks* | -windiss*)
-                               vendor=wrs
-                               ;;
-                       -aux*)
-                               vendor=apple
-                               ;;
-                       -hms*)
-                               vendor=hitachi
-                               ;;
-                       -mpw* | -macos*)
-                               vendor=apple
-                               ;;
-                       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-                               vendor=atari
-                               ;;
-                       -vos*)
-                               vendor=stratus
-                               ;;
-               esac
-               basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
-               ;;
-esac
-
-echo $basic_machine$os
-exit
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/configure b/configure
deleted file mode 100755 (executable)
index 865bef2..0000000
--- a/configure
+++ /dev/null
@@ -1,21698 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61 for iptables 1.4.1.1.
-#
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006 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=:
-  # 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
-
-
-
-
-# PATH needs CR
-# 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
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
-fi
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  as_unset=unset
-else
-  as_unset=false
-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.)
-as_nl='
-'
-IFS=" ""       $as_nl"
-
-# Find who we are.  Look in the path if we contain no directory separator.
-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
-  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  { (exit 1); exit 1; }
-fi
-
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-  fi
-done
-
-# Required to use basename.
-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
-
-
-# Name of the executable.
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-        X"$0" : 'X\(//\)$' \| \
-        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-           s//\1/
-           q
-         }
-         /^X\/\(\/\/\)$/{
-           s//\1/
-           q
-         }
-         /^X\/\(\/\).*/{
-           s//\1/
-           q
-         }
-         s/.*/./; q'`
-
-# CDPATH.
-$as_unset CDPATH
-
-
-if test "x$CONFIG_SHELL" = x; then
-  if (eval ":") 2>/dev/null; then
-  as_have_required=yes
-else
-  as_have_required=no
-fi
-
-  if test $as_have_required = yes &&    (eval ":
-(as_func_return () {
-  (exit \$1)
-}
-as_func_success () {
-  as_func_return 0
-}
-as_func_failure () {
-  as_func_return 1
-}
-as_func_ret_success () {
-  return 0
-}
-as_func_ret_failure () {
-  return 1
-}
-
-exitcode=0
-if as_func_success; then
-  :
-else
-  exitcode=1
-  echo as_func_success failed.
-fi
-
-if as_func_failure; then
-  exitcode=1
-  echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
-  :
-else
-  exitcode=1
-  echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
-  exitcode=1
-  echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
-  :
-else
-  exitcode=1
-  echo positional parameters were not saved.
-fi
-
-test \$exitcode = 0) || { (exit 1); exit 1; }
-
-(
-  as_lineno_1=\$LINENO
-  as_lineno_2=\$LINENO
-  test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
-  test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
-") 2> /dev/null; then
-  :
-else
-  as_candidate_shells=
-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  case $as_dir in
-        /*)
-          for as_base in sh bash ksh sh5; do
-            as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
-          done;;
-       esac
-done
-IFS=$as_save_IFS
-
-
-      for as_shell in $as_candidate_shells $SHELL; do
-        # Try only shells that exist, to save several forks.
-        if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
-               { ("$as_shell") 2> /dev/null <<\_ASEOF
-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
-
-
-:
-_ASEOF
-}; then
-  CONFIG_SHELL=$as_shell
-              as_have_required=yes
-              if { "$as_shell" 2> /dev/null <<\_ASEOF
-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
-
-
-:
-(as_func_return () {
-  (exit $1)
-}
-as_func_success () {
-  as_func_return 0
-}
-as_func_failure () {
-  as_func_return 1
-}
-as_func_ret_success () {
-  return 0
-}
-as_func_ret_failure () {
-  return 1
-}
-
-exitcode=0
-if as_func_success; then
-  :
-else
-  exitcode=1
-  echo as_func_success failed.
-fi
-
-if as_func_failure; then
-  exitcode=1
-  echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
-  :
-else
-  exitcode=1
-  echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
-  exitcode=1
-  echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = "$1" ); then
-  :
-else
-  exitcode=1
-  echo positional parameters were not saved.
-fi
-
-test $exitcode = 0) || { (exit 1); exit 1; }
-
-(
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
-
-_ASEOF
-}; then
-  break
-fi
-
-fi
-
-      done
-
-      if test "x$CONFIG_SHELL" != x; then
-  for as_var in BASH_ENV ENV
-        do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-        done
-        export CONFIG_SHELL
-        exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
-fi
-
-
-    if test $as_have_required = no; then
-  echo This script requires a shell more modern than all the
-      echo shells that I found on your system.  Please install a
-      echo modern shell, or manually run the script under such a
-      echo shell if you do have one.
-      { (exit 1); exit 1; }
-fi
-
-
-fi
-
-fi
-
-
-
-(eval "as_func_return () {
-  (exit \$1)
-}
-as_func_success () {
-  as_func_return 0
-}
-as_func_failure () {
-  as_func_return 1
-}
-as_func_ret_success () {
-  return 0
-}
-as_func_ret_failure () {
-  return 1
-}
-
-exitcode=0
-if as_func_success; then
-  :
-else
-  exitcode=1
-  echo as_func_success failed.
-fi
-
-if as_func_failure; then
-  exitcode=1
-  echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
-  :
-else
-  exitcode=1
-  echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
-  exitcode=1
-  echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
-  :
-else
-  exitcode=1
-  echo positional parameters were not saved.
-fi
-
-test \$exitcode = 0") || {
-  echo No shell found that supports shell functions.
-  echo Please tell autoconf@gnu.org about your system,
-  echo including any error possibly output before this
-  echo message
-}
-
-
-
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
-
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line after each line using $LINENO; the second 'sed'
-  # does the real work.  The second script uses 'N' to pair each
-  # line-number line with the line containing $LINENO, and appends
-  # trailing '-' during substitution so that $LINENO is not a special
-  # case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # scripts with optimization help from Paolo Bonzini.  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" ||
-    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
-   { (exit 1); exit 1; }; }
-
-  # 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
-}
-
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
--n*)
-  case `echo 'x\c'` in
-  *c*) ECHO_T='        ';;     # ECHO_T is single tab character.
-  *)   ECHO_C='\c';;
-  esac;;
-*)
-  ECHO_N='-n';;
-esac
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-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
-fi
-echo >conf$$.file
-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 -p'.
-  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-    as_ln_s='cp -p'
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
-else
-  as_ln_s='cp -p'
-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=:
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-        test -d "$1/.";
-      else
-       case $1 in
-        -*)set "./$1";;
-       esac;
-       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
-       ???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
-
-# 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'"
-
-
-
-
-# Check that we are running under the correct shell.
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-case X$ECHO in
-X*--fallback-echo)
-  # Remove one level of quotation (which was required for Make).
-  ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','`
-  ;;
-esac
-
-echo=${ECHO-echo}
-if test "X$1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X$1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
-  # Yippee, $echo works!
-  :
-else
-  # Restart under the correct shell.
-  exec $SHELL "$0" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<EOF
-$*
-EOF
-  exit 0
-fi
-
-# 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
-
-if test -z "$ECHO"; then
-if test "X${echo_test_string+set}" != Xset; then
-# find a string as large as possible, as long as the shell can cope with it
-  for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
-    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
-    if (echo_test_string=`eval $cmd`) 2>/dev/null &&
-       echo_test_string=`eval $cmd` &&
-       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
-    then
-      break
-    fi
-  done
-fi
-
-if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
-   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
-   test "X$echo_testing_string" = "X$echo_test_string"; then
-  :
-else
-  # The Solaris, AIX, and Digital Unix default echo programs unquote
-  # backslashes.  This makes it impossible to quote backslashes using
-  #   echo "$something" | sed 's/\\/\\\\/g'
-  #
-  # So, first we look for a working echo in the user's PATH.
-
-  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
-  for dir in $PATH /usr/ucb; do
-    IFS="$lt_save_ifs"
-    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
-       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
-       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
-       test "X$echo_testing_string" = "X$echo_test_string"; then
-      echo="$dir/echo"
-      break
-    fi
-  done
-  IFS="$lt_save_ifs"
-
-  if test "X$echo" = Xecho; then
-    # We didn't find a better echo, so look for alternatives.
-    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
-       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
-       test "X$echo_testing_string" = "X$echo_test_string"; then
-      # This shell has a builtin print -r that does the trick.
-      echo='print -r'
-    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
-        test "X$CONFIG_SHELL" != X/bin/ksh; then
-      # If we have ksh, try running configure again with it.
-      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-      export ORIGINAL_CONFIG_SHELL
-      CONFIG_SHELL=/bin/ksh
-      export CONFIG_SHELL
-      exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
-    else
-      # Try using printf.
-      echo='printf %s\n'
-      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
-        echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
-        test "X$echo_testing_string" = "X$echo_test_string"; then
-       # Cool, printf works
-       :
-      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
-          test "X$echo_testing_string" = 'X\t' &&
-          echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-          test "X$echo_testing_string" = "X$echo_test_string"; then
-       CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
-       export CONFIG_SHELL
-       SHELL="$CONFIG_SHELL"
-       export SHELL
-       echo="$CONFIG_SHELL $0 --fallback-echo"
-      elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
-          test "X$echo_testing_string" = 'X\t' &&
-          echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
-          test "X$echo_testing_string" = "X$echo_test_string"; then
-       echo="$CONFIG_SHELL $0 --fallback-echo"
-      else
-       # maybe with a smaller string...
-       prev=:
-
-       for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
-         if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
-         then
-           break
-         fi
-         prev="$cmd"
-       done
-
-       if test "$prev" != 'sed 50q "$0"'; then
-         echo_test_string=`eval $prev`
-         export echo_test_string
-         exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
-       else
-         # Oops.  We lost completely, so just stick with echo.
-         echo=echo
-       fi
-      fi
-    fi
-  fi
-fi
-fi
-
-# Copy echo and quote the copy suitably for passing to libtool from
-# the Makefile, instead of quoting the original, which is used later.
-ECHO=$echo
-if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
-   ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
-fi
-
-
-
-
-tagnames=${tagnames+${tagnames},}CXX
-
-tagnames=${tagnames+${tagnames},}F77
-
-exec 7<&0 </dev/null 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-# Identity of this package.
-PACKAGE_NAME='iptables'
-PACKAGE_TARNAME='iptables'
-PACKAGE_VERSION='1.4.1.1'
-PACKAGE_STRING='iptables 1.4.1.1'
-PACKAGE_BUGREPORT=''
-
-# 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='SHELL
-PATH_SEPARATOR
-PACKAGE_NAME
-PACKAGE_TARNAME
-PACKAGE_VERSION
-PACKAGE_STRING
-PACKAGE_BUGREPORT
-exec_prefix
-prefix
-program_transform_name
-bindir
-sbindir
-libexecdir
-datarootdir
-datadir
-sysconfdir
-sharedstatedir
-localstatedir
-includedir
-oldincludedir
-docdir
-infodir
-htmldir
-dvidir
-pdfdir
-psdir
-libdir
-localedir
-mandir
-DEFS
-ECHO_C
-ECHO_N
-ECHO_T
-LIBS
-build_alias
-host_alias
-target_alias
-INSTALL_PROGRAM
-INSTALL_SCRIPT
-INSTALL_DATA
-CYGPATH_W
-PACKAGE
-VERSION
-ACLOCAL
-AUTOCONF
-AUTOMAKE
-AUTOHEADER
-MAKEINFO
-install_sh
-STRIP
-INSTALL_STRIP_PROGRAM
-mkdir_p
-AWK
-SET_MAKE
-am__leading_dot
-AMTAR
-am__tar
-am__untar
-CC
-CFLAGS
-LDFLAGS
-CPPFLAGS
-ac_ct_CC
-EXEEXT
-OBJEXT
-DEPDIR
-am__include
-am__quote
-AMDEP_TRUE
-AMDEP_FALSE
-AMDEPBACKSLASH
-CCDEPMODE
-am__fastdepCC_TRUE
-am__fastdepCC_FALSE
-build
-build_cpu
-build_vendor
-build_os
-host
-host_cpu
-host_vendor
-host_os
-SED
-GREP
-EGREP
-LN_S
-ECHO
-AR
-RANLIB
-DSYMUTIL
-NMEDIT
-CPP
-CXX
-CXXFLAGS
-ac_ct_CXX
-CXXDEPMODE
-am__fastdepCXX_TRUE
-am__fastdepCXX_FALSE
-CXXCPP
-F77
-FFLAGS
-ac_ct_F77
-LIBTOOL
-blacklist_modules
-ENABLE_STATIC_TRUE
-ENABLE_STATIC_FALSE
-ENABLE_SHARED_TRUE
-ENABLE_SHARED_FALSE
-ENABLE_DEVEL_TRUE
-ENABLE_DEVEL_FALSE
-ENABLE_LIBIPQ_TRUE
-ENABLE_LIBIPQ_FALSE
-regular_CFLAGS
-kinclude_CFLAGS
-kbuilddir
-ksourcedir
-xtlibdir
-XTABLES_VERSION_MAJOR
-XTABLES_VERSION_MINOR
-XTABLES_VERSION_PATCH
-XTABLES_VERSION_EXTRA
-LIBOBJS
-LTLIBOBJS'
-ac_subst_files=''
-      ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CPP
-CXX
-CXXFLAGS
-CCC
-CXXCPP
-F77
-FFLAGS'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
-  # If the previous option needs an argument, assign it.
-  if test -n "$ac_prev"; then
-    eval $ac_prev=\$ac_option
-    ac_prev=
-    continue
-  fi
-
-  case $ac_option in
-  *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
-  *)   ac_optarg=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_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
-   { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
-    eval enable_$ac_feature=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_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
-   { (exit 1); exit 1; }; }
-    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
-    eval enable_$ac_feature=\$ac_optarg ;;
-
-  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
-  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
-  | --exec | --exe | --ex)
-    ac_prev=exec_prefix ;;
-  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
-  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
-  | --exec=* | --exe=* | --ex=*)
-    exec_prefix=$ac_optarg ;;
-
-  -gas | --gas | --ga | --g)
-    # Obsolete; use --with-gas.
-    with_gas=yes ;;
-
-  -help | --help | --hel | --he | -h)
-    ac_init_help=long ;;
-  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
-    ac_init_help=recursive ;;
-  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
-    ac_init_help=short ;;
-
-  -host | --host | --hos | --ho)
-    ac_prev=host_alias ;;
-  -host=* | --host=* | --hos=* | --ho=*)
-    host_alias=$ac_optarg ;;
-
-  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
-    ac_prev=htmldir ;;
-  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
-  | --ht=*)
-    htmldir=$ac_optarg ;;
-
-  -includedir | --includedir | --includedi | --included | --include \
-  | --includ | --inclu | --incl | --inc)
-    ac_prev=includedir ;;
-  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
-  | --includ=* | --inclu=* | --incl=* | --inc=*)
-    includedir=$ac_optarg ;;
-
-  -infodir | --infodir | --infodi | --infod | --info | --inf)
-    ac_prev=infodir ;;
-  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
-    infodir=$ac_optarg ;;
-
-  -libdir | --libdir | --libdi | --libd)
-    ac_prev=libdir ;;
-  -libdir=* | --libdir=* | --libdi=* | --libd=*)
-    libdir=$ac_optarg ;;
-
-  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
-  | --libexe | --libex | --libe)
-    ac_prev=libexecdir ;;
-  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
-  | --libexe=* | --libex=* | --libe=*)
-    libexecdir=$ac_optarg ;;
-
-  -localedir | --localedir | --localedi | --localed | --locale)
-    ac_prev=localedir ;;
-  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
-    localedir=$ac_optarg ;;
-
-  -localstatedir | --localstatedir | --localstatedi | --localstated \
-  | --localstate | --localstat | --localsta | --localst | --locals)
-    ac_prev=localstatedir ;;
-  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
-  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
-    localstatedir=$ac_optarg ;;
-
-  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
-    ac_prev=mandir ;;
-  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
-    mandir=$ac_optarg ;;
-
-  -nfp | --nfp | --nf)
-    # Obsolete; use --without-fp.
-    with_fp=no ;;
-
-  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
-  | --no-cr | --no-c | -n)
-    no_create=yes ;;
-
-  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
-  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
-    no_recursion=yes ;;
-
-  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
-  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
-  | --oldin | --oldi | --old | --ol | --o)
-    ac_prev=oldincludedir ;;
-  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
-  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
-  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
-    oldincludedir=$ac_optarg ;;
-
-  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
-    ac_prev=prefix ;;
-  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
-    prefix=$ac_optarg ;;
-
-  -program-prefix | --program-prefix | --program-prefi | --program-pref \
-  | --program-pre | --program-pr | --program-p)
-    ac_prev=program_prefix ;;
-  -program-prefix=* | --program-prefix=* | --program-prefi=* \
-  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
-    program_prefix=$ac_optarg ;;
-
-  -program-suffix | --program-suffix | --program-suffi | --program-suff \
-  | --program-suf | --program-su | --program-s)
-    ac_prev=program_suffix ;;
-  -program-suffix=* | --program-suffix=* | --program-suffi=* \
-  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
-    program_suffix=$ac_optarg ;;
-
-  -program-transform-name | --program-transform-name \
-  | --program-transform-nam | --program-transform-na \
-  | --program-transform-n | --program-transform- \
-  | --program-transform | --program-transfor \
-  | --program-transfo | --program-transf \
-  | --program-trans | --program-tran \
-  | --progr-tra | --program-tr | --program-t)
-    ac_prev=program_transform_name ;;
-  -program-transform-name=* | --program-transform-name=* \
-  | --program-transform-nam=* | --program-transform-na=* \
-  | --program-transform-n=* | --program-transform-=* \
-  | --program-transform=* | --program-transfor=* \
-  | --program-transfo=* | --program-transf=* \
-  | --program-trans=* | --program-tran=* \
-  | --progr-tra=* | --program-tr=* | --program-t=*)
-    program_transform_name=$ac_optarg ;;
-
-  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
-    ac_prev=pdfdir ;;
-  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
-    pdfdir=$ac_optarg ;;
-
-  -psdir | --psdir | --psdi | --psd | --ps)
-    ac_prev=psdir ;;
-  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
-    psdir=$ac_optarg ;;
-
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil)
-    silent=yes ;;
-
-  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
-    ac_prev=sbindir ;;
-  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
-  | --sbi=* | --sb=*)
-    sbindir=$ac_optarg ;;
-
-  -sharedstatedir | --sharedstatedir | --sharedstatedi \
-  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
-  | --sharedst | --shareds | --shared | --share | --shar \
-  | --sha | --sh)
-    ac_prev=sharedstatedir ;;
-  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
-  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
-  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
-  | --sha=* | --sh=*)
-    sharedstatedir=$ac_optarg ;;
-
-  -site | --site | --sit)
-    ac_prev=site ;;
-  -site=* | --site=* | --sit=*)
-    site=$ac_optarg ;;
-
-  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
-    ac_prev=srcdir ;;
-  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
-    srcdir=$ac_optarg ;;
-
-  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
-  | --syscon | --sysco | --sysc | --sys | --sy)
-    ac_prev=sysconfdir ;;
-  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
-  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
-    sysconfdir=$ac_optarg ;;
-
-  -target | --target | --targe | --targ | --tar | --ta | --t)
-    ac_prev=target_alias ;;
-  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
-    target_alias=$ac_optarg ;;
-
-  -v | -verbose | --verbose | --verbos | --verbo | --verb)
-    verbose=yes ;;
-
-  -version | --version | --versio | --versi | --vers | -V)
-    ac_init_version=: ;;
-
-  -with-* | --with-*)
-    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid package name: $ac_package" >&2
-   { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
-    eval with_$ac_package=\$ac_optarg ;;
-
-  -without-* | --without-*)
-    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid package name: $ac_package" >&2
-   { (exit 1); exit 1; }; }
-    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
-    eval with_$ac_package=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 ;;
-
-  -*) { echo "$as_me: error: unrecognized option: $ac_option
-Try \`$0 --help' for more information." >&2
-   { (exit 1); exit 1; }; }
-    ;;
-
-  *=*)
-    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
-      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
-   { (exit 1); exit 1; }; }
-    eval $ac_envvar=\$ac_optarg
-    export $ac_envvar ;;
-
-  *)
-    # FIXME: should be removed in autoconf 3.0.
-    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
-    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      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'`
-  { echo "$as_me: error: missing argument to $ac_option" >&2
-   { (exit 1); exit 1; }; }
-fi
-
-# Be sure to have absolute directory names.
-for ac_var in  exec_prefix prefix bindir sbindir libexecdir datarootdir \
-               datadir sysconfdir sharedstatedir localstatedir includedir \
-               oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
-               libdir localedir mandir
-do
-  eval ac_val=\$$ac_var
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* )  continue;;
-    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
-  esac
-  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
-   { (exit 1); exit 1; }; }
-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
-    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
-    If a cross compiler is detected then cross compile mode will be used." >&2
-  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 .` ||
-  { echo "$as_me: error: Working directory cannot be determined" >&2
-   { (exit 1); exit 1; }; }
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
-  { echo "$as_me: error: pwd does not report name of working directory" >&2
-   { (exit 1); exit 1; }; }
-
-
-# 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 -- "$0" ||
-$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-        X"$0" : 'X\(//\)[^/]' \| \
-        X"$0" : 'X\(//\)$' \| \
-        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-echo X"$0" |
-    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 .."
-  { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
-   { (exit 1); exit 1; }; }
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
-       cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2
-   { (exit 1); exit 1; }; }
-       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 iptables 1.4.1.1 to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE.  See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
-  -h, --help              display this help and exit
-      --help=short        display options specific to this package
-      --help=recursive    display the short help of all the included packages
-  -V, --version           display version information and exit
-  -q, --quiet, --silent   do not print \`checking...' messages
-      --cache-file=FILE   cache test results in FILE [disabled]
-  -C, --config-cache      alias for \`--cache-file=config.cache'
-  -n, --no-create         do not create output files
-      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
-
-Installation directories:
-  --prefix=PREFIX         install architecture-independent files in PREFIX
-                         [$ac_default_prefix]
-  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-                         [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
-  --bindir=DIR           user executables [EPREFIX/bin]
-  --sbindir=DIR          system admin executables [EPREFIX/sbin]
-  --libexecdir=DIR       program executables [EPREFIX/libexec]
-  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
-  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
-  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
-  --libdir=DIR           object code libraries [EPREFIX/lib]
-  --includedir=DIR       C header files [PREFIX/include]
-  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
-  --datarootdir=DIR      read-only arch.-independent data root [PREFIX/share]
-  --datadir=DIR          read-only architecture-independent data [DATAROOTDIR]
-  --infodir=DIR          info documentation [DATAROOTDIR/info]
-  --localedir=DIR        locale-dependent data [DATAROOTDIR/locale]
-  --mandir=DIR           man documentation [DATAROOTDIR/man]
-  --docdir=DIR           documentation root [DATAROOTDIR/doc/iptables]
-  --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 iptables 1.4.1.1:";;
-   esac
-  cat <<\_ACEOF
-
-Optional Features:
-  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
-  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --disable-dependency-tracking  speeds up one-time build
-  --enable-dependency-tracking   do not reject slow dependency extractors
-  --enable-static[=PKGS]  build static libraries [default=no]
-  --enable-shared[=PKGS]  build shared libraries [default=yes]
-  --enable-fast-install[=PKGS]
-                          optimize for fast installation [default=yes]
-  --disable-libtool-lock  avoid locking (might break parallel builds)
-  --enable-devel          Install Xtables development headers
-  --enable-libipq         Build and install libipq
-
-Optional Packages:
-  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
-  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
-  --with-pic              try to use only PIC/non-PIC objects [default=use
-                          both]
-  --with-tags[=TAGS]      include additional configurations [automatic]
-  --with-kernel=PATH      Path to kernel source/build directory
-  --with-kbuild=PATH      Path to kernel build directory
-                          [/lib/modules/CURRENT/build]
-  --with-ksource=PATH     Path to kernel source directory
-                          [/lib/modules/CURRENT/source]
-  --with-xtlibdir=PATH    Path where to install Xtables extensions
-                          [LIBEXECDIR/xtables]
-
-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    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
-              you have headers in a nonstandard directory <include dir>
-  CPP         C preprocessor
-  CXX         C++ compiler command
-  CXXFLAGS    C++ compiler flags
-  CXXCPP      C++ preprocessor
-  F77         Fortran 77 compiler command
-  FFLAGS      Fortran 77 compiler flags
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-_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" || continue
-    ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-  # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`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
-      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
-iptables configure 1.4.1.1
-generated by GNU Autoconf 2.61
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006 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
-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 iptables $as_me 1.4.1.1, which was
-generated by GNU Autoconf 2.61.  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=.
-  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=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    case $ac_pass in
-    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
-    2)
-      ac_configure_args1="$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
-      ac_configure_args="$ac_configure_args '$ac_arg'"
-      ;;
-    esac
-  done
-done
-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export 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
-
-    cat <<\_ASBOX
-## ---------------- ##
-## Cache variables. ##
-## ---------------- ##
-_ASBOX
-    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_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
-echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
-      esac
-      case $ac_var in #(
-      _ | IFS | as_nl) ;; #(
-      *) $as_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
-
-    cat <<\_ASBOX
-## ----------------- ##
-## Output variables. ##
-## ----------------- ##
-_ASBOX
-    echo
-    for ac_var in $ac_subst_vars
-    do
-      eval ac_val=\$$ac_var
-      case $ac_val in
-      *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
-      esac
-      echo "$ac_var='\''$ac_val'\''"
-    done | sort
-    echo
-
-    if test -n "$ac_subst_files"; then
-      cat <<\_ASBOX
-## ------------------- ##
-## File substitutions. ##
-## ------------------- ##
-_ASBOX
-      echo
-      for ac_var in $ac_subst_files
-      do
-       eval ac_val=\$$ac_var
-       case $ac_val in
-       *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
-       esac
-       echo "$ac_var='\''$ac_val'\''"
-      done | sort
-      echo
-    fi
-
-    if test -s confdefs.h; then
-      cat <<\_ASBOX
-## ----------- ##
-## confdefs.h. ##
-## ----------- ##
-_ASBOX
-      echo
-      cat confdefs.h
-      echo
-    fi
-    test "$ac_signal" != 0 &&
-      echo "$as_me: caught signal $ac_signal"
-    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'; { (exit 1); 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
-
-# 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
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer explicitly selected file to automatically selected ones.
-if test -n "$CONFIG_SITE"; then
-  set x "$CONFIG_SITE"
-elif test "x$prefix" != xNONE; then
-  set x "$prefix/share/config.site" "$prefix/etc/config.site"
-else
-  set x "$ac_default_prefix/share/config.site" \
-       "$ac_default_prefix/etc/config.site"
-fi
-shift
-for ac_site_file
-do
-  if test -r "$ac_site_file"; then
-    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
-echo "$as_me: loading site script $ac_site_file" >&6;}
-    sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file"
-  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.
-  if test -f "$cache_file"; then
-    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
-echo "$as_me: loading cache $cache_file" >&6;}
-    case $cache_file in
-      [\\/]* | ?:[\\/]* ) . "$cache_file";;
-      *)                      . "./$cache_file";;
-    esac
-  fi
-else
-  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
-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,)
-      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,set)
-      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-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
-       { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-       { echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
-echo "$as_me:   former value:  $ac_old_val" >&2;}
-       { echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
-echo "$as_me:   current value: $ac_new_val" >&2;}
-       ac_cache_corrupted=:
-      fi;;
-  esac
-  # Pass precious variables to config.status.
-  if test "$ac_new_set" = set; then
-    case $ac_new_val in
-    *\'*) ac_arg=$ac_var=`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.
-      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
-    esac
-  fi
-done
-if $ac_cache_corrupted; then
-  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
-   { (exit 1); exit 1; }; }
-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_config_headers="$ac_config_headers config.h"
-
-ac_aux_dir=
-for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
-  if test -f "$ac_dir/install-sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install-sh -c"
-    break
-  elif test -f "$ac_dir/install.sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install.sh -c"
-    break
-  elif test -f "$ac_dir/shtool"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/shtool install -c"
-    break
-  fi
-done
-if test -z "$ac_aux_dir"; then
-  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
-echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
-
-
-# Find a good install program.  We prefer a C program (faster),
-# so one script is as good as another.  But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$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
-           ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-           break 3
-         fi
-       fi
-      done
-    done
-    ;;
-esac
-done
-IFS=$as_save_IFS
-
-
-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
-{ echo "$as_me:$LINENO: result: $INSTALL" >&5
-echo "${ECHO_T}$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'
-
-am__api_version="1.9"
-{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5
-echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; }
-# Just in case
-sleep 1
-echo timestamp > conftest.file
-# Do `set' in a subshell so we don't clobber the current shell's
-# arguments.  Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
-   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
-   if test "$*" = "X"; then
-      # -L didn't work.
-      set X `ls -t $srcdir/configure conftest.file`
-   fi
-   rm -f conftest.file
-   if test "$*" != "X $srcdir/configure conftest.file" \
-      && test "$*" != "X conftest.file $srcdir/configure"; then
-
-      # If neither matched, then we have a broken ls.  This can happen
-      # if, for instance, CONFIG_SHELL is bash and it inherits a
-      # broken ls alias from the environment.  This has actually
-      # happened.  Such a system could not be considered "sane".
-      { { echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
-alias in your environment" >&5
-echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
-alias in your environment" >&2;}
-   { (exit 1); exit 1; }; }
-   fi
-
-   test "$2" = conftest.file
-   )
-then
-   # Ok.
-   :
-else
-   { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
-Check your system clock" >&5
-echo "$as_me: error: newly created file is older than distributed files!
-Check your system clock" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-{ echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.  echo might interpret backslashes.
-# By default was `s,x,x', remove it if useless.
-cat <<\_ACEOF >conftest.sed
-s/[\\$]/&&/g;s/;s,x,x,$//
-_ACEOF
-program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
-rm -f conftest.sed
-
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
-
-test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
-# Use eval to expand $SHELL
-if eval "$MISSING --run true"; then
-  am_missing_run="$MISSING --run "
-else
-  am_missing_run=
-  { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
-echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
-fi
-
-if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
-  # We used to keeping the `.' as first argument, in order to
-  # allow $(mkdir_p) to be used without argument.  As in
-  #   $(mkdir_p) $(somedir)
-  # where $(somedir) is conditionally defined.  However this is wrong
-  # for two reasons:
-  #  1. if the package is installed by a user who cannot write `.'
-  #     make install will fail,
-  #  2. the above comment should most certainly read
-  #     $(mkdir_p) $(DESTDIR)$(somedir)
-  #     so it does not work when $(somedir) is undefined and
-  #     $(DESTDIR) is not.
-  #  To support the latter case, we have to write
-  #     test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
-  #  so the `.' trick is pointless.
-  mkdir_p='mkdir -p --'
-else
-  # On NextStep and OpenStep, the `mkdir' command does not
-  # recognize any option.  It will interpret all options as
-  # directories to create, and then abort because `.' already
-  # exists.
-  for d in ./-p ./--version;
-  do
-    test -d $d && rmdir $d
-  done
-  # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
-  if test -f "$ac_aux_dir/mkinstalldirs"; then
-    mkdir_p='$(mkinstalldirs)'
-  else
-    mkdir_p='$(install_sh) -d'
-  fi
-fi
-
-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
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_AWK+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_AWK="$ac_prog"
-    echo "$as_me:$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
-  { echo "$as_me:$LINENO: result: $AWK" >&5
-echo "${ECHO_T}$AWK" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-
-  test -n "$AWK" && break
-done
-
-{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; }
-set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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
-  { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
-  SET_MAKE=
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}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
-
-# test to see if srcdir already configured
-if test "`cd $srcdir && pwd`" != "`pwd`" &&
-   test -f $srcdir/config.status; then
-  { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
-echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
-   { (exit 1); exit 1; }; }
-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='iptables'
- VERSION='1.4.1.1'
-
-
-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"}
-
-install_sh=${install_sh-"$am_aux_dir/install-sh"}
-
-# 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
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-    echo "$as_me:$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
-  { echo "$as_me:$LINENO: result: $STRIP" >&5
-echo "${ECHO_T}$STRIP" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}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
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_STRIP="strip"
-    echo "$as_me:$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
-  { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
-echo "${ECHO_T}$ac_ct_STRIP" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-  if test "x$ac_ct_STRIP" = x; then
-    STRIP=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
-    STRIP=$ac_ct_STRIP
-  fi
-else
-  STRIP="$ac_cv_prog_STRIP"
-fi
-
-fi
-INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
-
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
-# Always define AMTAR for backward compatibility.
-
-AMTAR=${AMTAR-"${am_missing_run}tar"}
-
-am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
-
-
-
-
-
-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
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    echo "$as_me:$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
-  { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}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
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_CC="gcc"
-    echo "$as_me:$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
-  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-  if test "x$ac_ct_CC" = x; then
-    CC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&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
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
-    echo "$as_me:$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
-  { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}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
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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"
-    echo "$as_me:$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
-  { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}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
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    echo "$as_me:$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
-  { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}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
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
-    echo "$as_me:$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
-  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}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:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
-    CC=$ac_ct_CC
-  fi
-fi
-
-fi
-
-
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-
-# Provide some information about the compiler.
-echo "$as_me:$LINENO: checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (ac_try="$ac_compiler --version >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compiler --version >&5") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (ac_try="$ac_compiler -v >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compiler -v >&5") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (ac_try="$ac_compiler -V >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compiler -V >&5") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out 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.
-{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; }
-ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-#
-# List of possible output files, starting from the most likely.
-# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
-# only as a last resort.  b.out is created by i960 compilers.
-ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
-#
-# The IRIX 6 linker writes into existing files which may not be
-# executable, retaining their permissions.  Remove them first so a
-# subsequent execution test works.
-ac_rmfiles=
-for ac_file in $ac_files
-do
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link_default") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; 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 | *.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
-
-{ echo "$as_me:$LINENO: result: $ac_file" >&5
-echo "${ECHO_T}$ac_file" >&6; }
-if test -z "$ac_file"; then
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
-See \`config.log' for more details." >&5
-echo "$as_me: error: C compiler cannot create executables
-See \`config.log' for more details." >&2;}
-   { (exit 77); exit 77; }; }
-fi
-
-ac_exeext=$ac_cv_exeext
-
-# Check that the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; }
-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
-  if { ac_try='./$ac_file'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-    cross_compiling=no
-  else
-    if test "$cross_compiling" = maybe; then
-       cross_compiling=yes
-    else
-       { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-    fi
-  fi
-fi
-{ echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
-
-rm -f a.out a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-# Check that the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; }
-{ echo "$as_me:$LINENO: result: $cross_compiling" >&5
-echo "${ECHO_T}$cross_compiling" >&6; }
-
-{ echo "$as_me:$LINENO: checking for suffix of executables" >&5
-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; }
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; 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 | *.o | *.obj ) ;;
-    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-         break;;
-    * ) break;;
-  esac
-done
-else
-  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest$ac_cv_exeext
-{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-echo "${ECHO_T}$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-{ echo "$as_me:$LINENO: checking for suffix of object files" >&5
-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; }
-if test "${ac_cv_objext+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* 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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; 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 ) ;;
-    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
-       break;;
-  esac
-done
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-echo "${ECHO_T}$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_compiler_gnu=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       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
-{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; }
-GCC=`test $ac_compiler_gnu = yes && echo yes`
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_prog_cc_g=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       CFLAGS=""
-      cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_c_werror_flag=$ac_save_c_werror_flag
-        CFLAGS="-g"
-        cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_prog_cc_g=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-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
-{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$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
-{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
-echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* 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"
-  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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_prog_cc_c89=$ac_arg
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-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)
-    { echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6; } ;;
-  xno)
-    { echo "$as_me:$LINENO: result: unsupported" >&5
-echo "${ECHO_T}unsupported" >&6; } ;;
-  *)
-    CC="$CC $ac_cv_prog_cc_c89"
-    { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-DEPDIR="${am__leading_dot}deps"
-
-ac_config_commands="$ac_config_commands depfiles"
-
-
-am_make=${MAKE-make}
-cat > confinc << 'END'
-am__doit:
-       @echo done
-.PHONY: am__doit
-END
-# If we don't find an include directive, just comment out the code.
-{ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
-echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; }
-am__include="#"
-am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# We grep out `Entering directory' and `Leaving directory'
-# messages which can occur if `w' ends up in MAKEFLAGS.
-# In particular we don't look at `^make:' because GNU make might
-# be invoked under some other name (usually "gmake"), in which
-# case it prints its new name instead of `make'.
-if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
-   am__include=include
-   am__quote=
-   _am_result=GNU
-fi
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
-   echo '.include "confinc"' > confmf
-   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
-      am__include=.include
-      am__quote="\""
-      _am_result=BSD
-   fi
-fi
-
-
-{ echo "$as_me:$LINENO: result: $_am_result" >&5
-echo "${ECHO_T}$_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='\'
-fi
-
-
-if test "x$enable_dependency_tracking" != xno; then
-  AMDEP_TRUE=
-  AMDEP_FALSE='#'
-else
-  AMDEP_TRUE='#'
-  AMDEP_FALSE=
-fi
-
-
-
-
-depcc="$CC"   am_compiler_list=
-
-{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
-echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; }
-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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'.
-  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
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    case $depmode in
-    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
-      ;;
-    none) break ;;
-    esac
-    # 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.
-    if depmode=$depmode \
-       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftest.${OBJEXT-o} 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
-{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
-echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; }
-CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
-
-
-
-if
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
-  am__fastdepCC_TRUE=
-  am__fastdepCC_FALSE='#'
-else
-  am__fastdepCC_TRUE='#'
-  am__fastdepCC_FALSE=
-fi
-
-
-if test "x$CC" != xcc; then
-  { echo "$as_me:$LINENO: checking whether $CC and cc understand -c and -o together" >&5
-echo $ECHO_N "checking whether $CC and cc understand -c and -o together... $ECHO_C" >&6; }
-else
-  { echo "$as_me:$LINENO: checking whether cc understands -c and -o together" >&5
-echo $ECHO_N "checking whether cc understands -c and -o together... $ECHO_C" >&6; }
-fi
-set dummy $CC; ac_cc=`echo $2 |
-                     sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
-if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-# Make sure it works both with $CC and with simple cc.
-# We do the test twice because some compilers refuse to overwrite an
-# existing .o file with -o, though they will create one.
-ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
-rm -f conftest2.*
-if { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-   test -f conftest2.$ac_objext && { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); };
-then
-  eval ac_cv_prog_cc_${ac_cc}_c_o=yes
-  if test "x$CC" != xcc; then
-    # Test first that cc exists at all.
-    if { ac_try='cc -c conftest.$ac_ext >&5'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-      ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
-      rm -f conftest2.*
-      if { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } &&
-        test -f conftest2.$ac_objext && { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); };
-      then
-       # cc works too.
-       :
-      else
-       # cc exists but doesn't like -o.
-       eval ac_cv_prog_cc_${ac_cc}_c_o=no
-      fi
-    fi
-  fi
-else
-  eval ac_cv_prog_cc_${ac_cc}_c_o=no
-fi
-rm -f core conftest*
-
-fi
-if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then
-  { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-
-cat >>confdefs.h <<\_ACEOF
-#define NO_MINUS_C_MINUS_O 1
-_ACEOF
-
-fi
-
-# FIXME: we rely on the cache variable name because
-# there is no other way.
-set dummy $CC
-ac_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
-if eval "test \"`echo '$ac_cv_prog_cc_'${ac_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
-
-# 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=no
-fi
-
-
-
-# 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-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
-
-
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
-echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
-   { (exit 1); exit 1; }; }
-
-{ echo "$as_me:$LINENO: checking build system type" >&5
-echo $ECHO_N "checking build system type... $ECHO_C" >&6; }
-if test "${ac_cv_build+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 &&
-  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
-echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
-   { (exit 1); exit 1; }; }
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
-echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
-   { (exit 1); exit 1; }; }
-
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5
-echo "${ECHO_T}$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
-echo "$as_me: error: invalid value of canonical build" >&2;}
-   { (exit 1); exit 1; }; };;
-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
-
-
-{ echo "$as_me:$LINENO: checking host system type" >&5
-echo $ECHO_N "checking host system type... $ECHO_C" >&6; }
-if test "${ac_cv_host+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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` ||
-    { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
-echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5
-echo "${ECHO_T}$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
-echo "$as_me: error: invalid value of canonical host" >&2;}
-   { (exit 1); exit 1; }; };;
-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
-
-
-{ echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
-echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6; }
-if test "${lt_cv_path_SED+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  # 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 { test -f "$as_dir/$lt_ac_prog$ac_exec_ext" && $as_test_x "$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 $lt_ac_count -gt 10 && 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
-
-fi
-
-SED=$lt_cv_path_SED
-
-{ echo "$as_me:$LINENO: result: $SED" >&5
-echo "${ECHO_T}$SED" >&6; }
-
-{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
-echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  # Extract the first word of "grep ggrep" to use in msg output
-if test -z "$GREP"; then
-set dummy grep ggrep; ac_prog_name=$2
-if test "${ac_cv_path_GREP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  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"
-    { test -f "$ac_path_GREP" && $as_test_x "$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
-  echo $ECHO_N "0123456789$ECHO_C" >"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"
-    "$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
-    ac_count=`expr $ac_count + 1`
-    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
-
-
-fi
-
-GREP="$ac_cv_path_GREP"
-if test -z "$GREP"; then
-  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-else
-  ac_cv_path_GREP=$GREP
-fi
-
-
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
-echo "${ECHO_T}$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ echo "$as_me:$LINENO: checking for egrep" >&5
-echo $ECHO_N "checking for egrep... $ECHO_C" >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
-   then ac_cv_path_EGREP="$GREP -E"
-   else
-     # Extract the first word of "egrep" to use in msg output
-if test -z "$EGREP"; then
-set dummy egrep; ac_prog_name=$2
-if test "${ac_cv_path_EGREP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  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"
-    { test -f "$ac_path_EGREP" && $as_test_x "$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
-  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    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
-    ac_count=`expr $ac_count + 1`
-    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
-
-
-fi
-
-EGREP="$ac_cv_path_EGREP"
-if test -z "$EGREP"; then
-  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-else
-  ac_cv_path_EGREP=$EGREP
-fi
-
-
-   fi
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
-echo "${ECHO_T}$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-
-# Check whether --with-gnu-ld was given.
-if test "${with_gnu_ld+set}" = set; then
-  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
-else
-  with_gnu_ld=no
-fi
-
-ac_prog=ld
-if test "$GCC" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
-  { echo "$as_me:$LINENO: checking for ld used by $CC" >&5
-echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&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 "$with_gnu_ld" = yes; then
-  { echo "$as_me:$LINENO: checking for GNU ld" >&5
-echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; }
-else
-  { echo "$as_me:$LINENO: checking for non-GNU ld" >&5
-echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; }
-fi
-if test "${lt_cv_path_LD+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 "$with_gnu_ld" != no && break
-       ;;
-      *)
-       test "$with_gnu_ld" != yes && 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
-  { echo "$as_me:$LINENO: result: $LD" >&5
-echo "${ECHO_T}$LD" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
-echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
-   { (exit 1); exit 1; }; }
-{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
-echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; }
-if test "${lt_cv_prog_gnu_ld+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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
-{ echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
-echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6; }
-with_gnu_ld=$lt_cv_prog_gnu_ld
-
-
-{ echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
-echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6; }
-if test "${lt_cv_ld_reload_flag+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_cv_ld_reload_flag='-r'
-fi
-{ echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
-echo "${ECHO_T}$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
-  darwin*)
-    if test "$GCC" = yes; then
-      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
-    else
-      reload_cmds='$LD$reload_flag -o $output$reload_objs'
-    fi
-    ;;
-esac
-
-{ echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5
-echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6; }
-if test "${lt_cv_path_NM+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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
-       case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
-       */dev/null* | *'Invalid file or object type'*)
-         lt_cv_path_NM="$tmp_nm -B"
-         break
-         ;;
-       *)
-         case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
-         */dev/null*)
-           lt_cv_path_NM="$tmp_nm -p"
-           break
-           ;;
-         *)
-           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
-  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
-fi
-fi
-{ echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
-echo "${ECHO_T}$lt_cv_path_NM" >&6; }
-NM="$lt_cv_path_NM"
-
-{ echo "$as_me:$LINENO: checking whether ln -s works" >&5
-echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; }
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
-  { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no, using $LN_S" >&5
-echo "${ECHO_T}no, using $LN_S" >&6; }
-fi
-
-{ echo "$as_me:$LINENO: checking how to recognize dependent libraries" >&5
-echo $ECHO_N "checking how to recognize dependent libraries... $ECHO_C" >&6; }
-if test "${lt_cv_deplibs_check_method+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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
-# which 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
-    lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
-    lt_cv_file_magic_cmd='$OBJDUMP -f'
-  fi
-  ;;
-
-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
-  ;;
-
-gnu*)
-  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]) 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 Linux ELF.
-linux* | k*bsd*-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=unknown
-  ;;
-
-openbsd*)
-  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; 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
-  ;;
-
-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
-  ;;
-
-sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-  lt_cv_deplibs_check_method=pass_all
-  ;;
-esac
-
-fi
-{ echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
-echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6; }
-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 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 whether --enable-libtool-lock was given.
-if test "${enable_libtool_lock+set}" = set; then
-  enableval=$enable_libtool_lock;
-fi
-
-test "x$enable_libtool_lock" != xno && 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 which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; 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 which ABI we are using.
-  echo '#line 4449 "configure"' > conftest.$ac_ext
-  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-   if test "$lt_cv_prog_gnu_ld" = yes; 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*
-  ;;
-
-x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
-s390*-*linux*|sparc*-*linux*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; 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*)
-          LD="${LD-ld} -m elf_i386"
-          ;;
-        ppc64-*linux*|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"
-          ;;
-        ppc*-*linux*|powerpc*-*linux*)
-          LD="${LD-ld} -m elf64ppc"
-          ;;
-        s390*-*linux*)
-          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"
-  { echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
-echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6; }
-if test "${lt_cv_cc_needs_belf+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  lt_cv_cc_needs_belf=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       lt_cv_cc_needs_belf=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      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
-{ echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
-echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6; }
-  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
-    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
-    CFLAGS="$SAVE_CFLAGS"
-  fi
-  ;;
-sparc*-*solaris*)
-  # Find out which ABI we are using.
-  echo 'int i;' > conftest.$ac_ext
-  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-    case `/usr/bin/file conftest.o` in
-    *64-bit*)
-      case $lt_cv_prog_gnu_ld in
-      yes*) LD="${LD-ld} -m elf64_sparc" ;;
-      *)
-        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"
-
-
-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
-{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
-  CPP=
-fi
-if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-                    Syntax error
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       }; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Broken: fails on valid input.
-continue
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       }; then
-  # Broken: success on invalid input.
-continue
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f 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
-{ echo "$as_me:$LINENO: result: $CPP" >&5
-echo "${ECHO_T}$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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-                    Syntax error
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       }; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Broken: fails on valid input.
-continue
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       }; then
-  # Broken: success on invalid input.
-continue
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
-  :
-else
-  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&5
-echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-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
-
-
-{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_header_stdc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* 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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* 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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* 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
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
-  { (case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-  :
-else
-  echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-
-fi
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define STDC_HEADERS 1
-_ACEOF
-
-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=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-
-#include <$ac_header>
-_ACEOF
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  eval "$as_ac_Header=yes"
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       eval "$as_ac_Header=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-for ac_header in dlfcn.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
-              { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
-  cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-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
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_CXX+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
-    echo "$as_me:$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
-  { echo "$as_me:$LINENO: result: $CXX" >&5
-echo "${ECHO_T}$CXX" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}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
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_CXX="$ac_prog"
-    echo "$as_me:$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
-  { echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
-echo "${ECHO_T}$ac_ct_CXX" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}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:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
-    CXX=$ac_ct_CXX
-  fi
-fi
-
-  fi
-fi
-# Provide some information about the compiler.
-echo "$as_me:$LINENO: checking for C++ compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (ac_try="$ac_compiler --version >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compiler --version >&5") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (ac_try="$ac_compiler -v >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compiler -v >&5") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (ac_try="$ac_compiler -V >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compiler -V >&5") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-
-{ echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6; }
-if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_cxx_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_compiler_gnu=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       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
-{ echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6; }
-GXX=`test $ac_compiler_gnu = yes && echo yes`
-ac_test_CXXFLAGS=${CXXFLAGS+set}
-ac_save_CXXFLAGS=$CXXFLAGS
-{ echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
-echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6; }
-if test "${ac_cv_prog_cxx_g+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_cxx_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_prog_cxx_g=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       CXXFLAGS=""
-      cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_cxx_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_cxx_werror_flag=$ac_save_cxx_werror_flag
-        CXXFLAGS="-g"
-        cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_cxx_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_prog_cxx_g=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-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
-{ echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
-echo "${ECHO_T}$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=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
-
-depcc="$CXX"  am_compiler_list=
-
-{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
-echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; }
-if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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'.
-  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
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
-      # Solaris 8's {/usr,}/bin/sh.
-      touch sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    case $depmode in
-    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
-      ;;
-    none) break ;;
-    esac
-    # 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.
-    if depmode=$depmode \
-       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftest.${OBJEXT-o} 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
-{ echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
-echo "${ECHO_T}$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
-
-
-
-
-if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-    (test "X$CXX" != "Xg++"))) ; 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
-{ echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
-echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6; }
-if test -z "$CXXCPP"; then
-  if test "${ac_cv_prog_CXXCPP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-                    Syntax error
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-        test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
-        test ! -s conftest.err
-       }; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Broken: fails on valid input.
-continue
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-        test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
-        test ! -s conftest.err
-       }; then
-  # Broken: success on invalid input.
-continue
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f 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
-{ echo "$as_me:$LINENO: result: $CXXCPP" >&5
-echo "${ECHO_T}$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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-                    Syntax error
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-        test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
-        test ! -s conftest.err
-       }; then
-  :
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Broken: fails on valid input.
-continue
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-        test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
-        test ! -s conftest.err
-       }; then
-  # Broken: success on invalid input.
-continue
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
-  :
-else
-  { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check
-See \`config.log' for more details." >&5
-echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check
-See \`config.log' for more details." >&2;}
-   { (exit 1); exit 1; }; }
-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
-
-fi
-
-
-ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn
-  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
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_F77+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$F77"; then
-  ac_cv_prog_F77="$F77" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_F77="$ac_tool_prefix$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-F77=$ac_cv_prog_F77
-if test -n "$F77"; then
-  { echo "$as_me:$LINENO: result: $F77" >&5
-echo "${ECHO_T}$F77" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-
-    test -n "$F77" && break
-  done
-fi
-if test -z "$F77"; then
-  ac_ct_F77=$F77
-  for ac_prog in g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 xlf90 f90 pgf90 pghpf epcf90 gfortran g95 xlf95 f95 fort ifort ifc efc pgf95 lf95 ftn
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_ac_ct_F77+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  if test -n "$ac_ct_F77"; then
-  ac_cv_prog_ac_ct_F77="$ac_ct_F77" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_F77="$ac_prog"
-    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_F77=$ac_cv_prog_ac_ct_F77
-if test -n "$ac_ct_F77"; then
-  { echo "$as_me:$LINENO: result: $ac_ct_F77" >&5
-echo "${ECHO_T}$ac_ct_F77" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-
-  test -n "$ac_ct_F77" && break
-done
-
-  if test "x$ac_ct_F77" = x; then
-    F77=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
-    F77=$ac_ct_F77
-  fi
-fi
-
-
-# Provide some information about the compiler.
-echo "$as_me:$LINENO: checking for Fortran 77 compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (ac_try="$ac_compiler --version >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compiler --version >&5") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (ac_try="$ac_compiler -v >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compiler -v >&5") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-{ (ac_try="$ac_compiler -V >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compiler -V >&5") 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-rm -f a.out
-
-# If we don't use `.F' as extension, the preprocessor is not run on the
-# input file.  (Note that this only needs to work for GNU compilers.)
-ac_save_ext=$ac_ext
-ac_ext=F
-{ echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6; }
-if test "${ac_cv_f77_compiler_gnu+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-      program main
-#ifndef __GNUC__
-       choke me
-#endif
-
-      end
-_ACEOF
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_f77_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_compiler_gnu=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_compiler_gnu=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_f77_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6; }
-ac_ext=$ac_save_ext
-ac_test_FFLAGS=${FFLAGS+set}
-ac_save_FFLAGS=$FFLAGS
-FFLAGS=
-{ echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5
-echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6; }
-if test "${ac_cv_prog_f77_g+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  FFLAGS=-g
-cat >conftest.$ac_ext <<_ACEOF
-      program main
-
-      end
-_ACEOF
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_f77_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_cv_prog_f77_g=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_cv_prog_f77_g=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5
-echo "${ECHO_T}$ac_cv_prog_f77_g" >&6; }
-if test "$ac_test_FFLAGS" = set; then
-  FFLAGS=$ac_save_FFLAGS
-elif test $ac_cv_prog_f77_g = yes; then
-  if test "x$ac_cv_f77_compiler_gnu" = xyes; then
-    FFLAGS="-g -O2"
-  else
-    FFLAGS="-g"
-  fi
-else
-  if test "x$ac_cv_f77_compiler_gnu" = xyes; then
-    FFLAGS="-O2"
-  else
-    FFLAGS=
-  fi
-fi
-
-G77=`test $ac_compiler_gnu = yes && echo yes`
-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
-
-
-
-# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
-# find the maximum length of command line arguments
-{ echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
-echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6; }
-if test "${lt_cv_sys_max_cmd_len+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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*)
-    # 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;
-    ;;
-
-  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;
-    ;;
-
-  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
-    # 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
-    ;;
-
-  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"; 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
-      SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
-      while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \
-              = "XX$teststring") >/dev/null 2>&1 &&
-             new_result=`expr "X$teststring" : ".*" 2>&1` &&
-             lt_cv_sys_max_cmd_len=$new_result &&
-             test $i != 17 # 1/2 MB should be enough
-      do
-        i=`expr $i + 1`
-        teststring=$teststring$teststring
-      done
-      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
-  { echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
-echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6; }
-else
-  { echo "$as_me:$LINENO: result: none" >&5
-echo "${ECHO_T}none" >&6; }
-fi
-
-
-
-
-
-# Check for command to grab the raw symbol name followed by C symbol from nm.
-{ echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
-echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6; }
-if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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]*\)'
-
-# Transform an extracted symbol line into a proper C declaration
-lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
-
-# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
-
-# Define system-specific variables.
-case $host_os in
-aix*)
-  symcode='[BCDT]'
-  ;;
-cygwin* | mingw* | pw32*)
-  symcode='[ABCDGISTW]'
-  ;;
-hpux*) # Its linker distinguishes data from code symbols
-  if test "$host_cpu" = ia64; then
-    symcode='[ABCDEGRST]'
-  fi
-  lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-  lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
-  ;;
-linux* | k*bsd*-gnu)
-  if test "$host_cpu" = ia64; then
-    symcode='[ABCDGIRSTW]'
-    lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
-    lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
-  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
-
-# 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
-
-# If we're using GNU nm, then use its standard symbol codes.
-case `$NM -V 2>&1` in
-*GNU* | *'with BFD'*)
-  symcode='[ABCDGIRSTW]' ;;
-esac
-
-# Try without a prefix undercore, 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.
-  lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[      ]\($symcode$symcode*\)[         ][      ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
-
-  # Check to see that the pipe works correctly.
-  pipe_works=no
-
-  rm -f conftest*
-  cat > conftest.$ac_ext <<EOF
-#ifdef __cplusplus
-extern "C" {
-#endif
-char nm_test_var;
-void nm_test_func(){}
-#ifdef __cplusplus
-}
-#endif
-int main(){nm_test_var='a';nm_test_func();return(0);}
-EOF
-
-  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; then
-    # Now try to grab the symbols.
-    nlist=conftest.nm
-    if { (eval echo "$as_me:$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=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && 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 <<EOF > conftest.$ac_ext
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-EOF
-         # Now generate the symbol file.
-         eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
-
-         cat <<EOF >> conftest.$ac_ext
-#if defined (__STDC__) && __STDC__
-# define lt_ptr_t void *
-#else
-# define lt_ptr_t char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-const struct {
-  const char *name;
-  lt_ptr_t address;
-}
-lt_preloaded_symbols[] =
-{
-EOF
-         $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
-         cat <<\EOF >> conftest.$ac_ext
-  {0, (lt_ptr_t) 0}
-};
-
-#ifdef __cplusplus
-}
-#endif
-EOF
-         # Now try linking the two files.
-         mv conftest.$ac_objext conftstm.$ac_objext
-         lt_save_LIBS="$LIBS"
-         lt_save_CFLAGS="$CFLAGS"
-         LIBS="conftstm.$ac_objext"
-         CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
-         if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && test -s conftest${ac_exeext}; then
-           pipe_works=yes
-         fi
-         LIBS="$lt_save_LIBS"
-         CFLAGS="$lt_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 "$pipe_works" = yes; 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
-  { echo "$as_me:$LINENO: result: failed" >&5
-echo "${ECHO_T}failed" >&6; }
-else
-  { echo "$as_me:$LINENO: result: ok" >&5
-echo "${ECHO_T}ok" >&6; }
-fi
-
-{ echo "$as_me:$LINENO: checking for objdir" >&5
-echo $ECHO_N "checking for objdir... $ECHO_C" >&6; }
-if test "${lt_cv_objdir+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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
-{ echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
-echo "${ECHO_T}$lt_cv_objdir" >&6; }
-objdir=$lt_cv_objdir
-
-
-
-
-
-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 "X${COLLECT_NAMES+set}" != Xset; then
-    COLLECT_NAMES=
-    export COLLECT_NAMES
-  fi
-  ;;
-esac
-
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed='sed -e 1s/^X//'
-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 avoid accidental globbing in evaled expressions
-no_glob_subst='s/\*/\\\*/g'
-
-# Constants:
-rm="rm -f"
-
-# Global variables:
-default_ofile=libtool
-can_build_shared=yes
-
-# All known linkers require a `.a' archive for static linking (except MSVC,
-# which needs '.lib').
-libext=a
-ltmain="$ac_aux_dir/ltmain.sh"
-ofile="$default_ofile"
-with_gnu_ld="$lt_cv_prog_gnu_ld"
-
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ar; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_AR+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_AR="${ac_tool_prefix}ar"
-    echo "$as_me:$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
-  { echo "$as_me:$LINENO: result: $AR" >&5
-echo "${ECHO_T}$AR" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_AR"; then
-  ac_ct_AR=$AR
-  # Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_AR="ar"
-    echo "$as_me:$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
-  { echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
-echo "${ECHO_T}$ac_ct_AR" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-  if test "x$ac_ct_AR" = x; then
-    AR="false"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
-    AR=$ac_ct_AR
-  fi
-else
-  AR="$ac_cv_prog_AR"
-fi
-
-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
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_RANLIB+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
-    echo "$as_me:$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
-  { echo "$as_me:$LINENO: result: $RANLIB" >&5
-echo "${ECHO_T}$RANLIB" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}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
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_RANLIB="ranlib"
-    echo "$as_me:$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
-  { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
-echo "${ECHO_T}$ac_ct_RANLIB" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-  if test "x$ac_ct_RANLIB" = x; then
-    RANLIB=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
-    RANLIB=$ac_ct_RANLIB
-  fi
-else
-  RANLIB="$ac_cv_prog_RANLIB"
-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
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_STRIP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-    echo "$as_me:$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
-  { echo "$as_me:$LINENO: result: $STRIP" >&5
-echo "${ECHO_T}$STRIP" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}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
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_STRIP="strip"
-    echo "$as_me:$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
-  { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
-echo "${ECHO_T}$ac_ct_STRIP" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-  if test "x$ac_ct_STRIP" = x; then
-    STRIP=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
-    STRIP=$ac_ct_STRIP
-  fi
-else
-  STRIP="$ac_cv_prog_STRIP"
-fi
-
-
-old_CC="$CC"
-old_CFLAGS="$CFLAGS"
-
-# Set sane defaults for various variables
-test -z "$AR" && AR=ar
-test -z "$AR_FLAGS" && AR_FLAGS=cru
-test -z "$AS" && AS=as
-test -z "$CC" && CC=cc
-test -z "$LTCC" && LTCC=$CC
-test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
-test -z "$DLLTOOL" && DLLTOOL=dlltool
-test -z "$LD" && LD=ld
-test -z "$LN_S" && LN_S="ln -s"
-test -z "$MAGIC_CMD" && MAGIC_CMD=file
-test -z "$NM" && NM=nm
-test -z "$SED" && SED=sed
-test -z "$OBJDUMP" && OBJDUMP=objdump
-test -z "$RANLIB" && RANLIB=:
-test -z "$STRIP" && STRIP=:
-test -z "$ac_objext" && ac_objext=o
-
-# 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
-  openbsd*)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
-    ;;
-  *)
-    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
-    ;;
-  esac
-  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
-fi
-
-for cc_temp in $compiler""; do
-  case $cc_temp in
-    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-
-# Only perform the check for file, if the check method requires it
-case $deplibs_check_method in
-file_magic*)
-  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
-    { echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
-echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6; }
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 <<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
-
-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
-  { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
-echo "${ECHO_T}$MAGIC_CMD" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-if test -z "$lt_cv_path_MAGIC_CMD"; then
-  if test -n "$ac_tool_prefix"; then
-    { echo "$as_me:$LINENO: checking for file" >&5
-echo $ECHO_N "checking for file... $ECHO_C" >&6; }
-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 <<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
-
-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
-  { echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
-echo "${ECHO_T}$MAGIC_CMD" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-  else
-    MAGIC_CMD=:
-  fi
-fi
-
-  fi
-  ;;
-esac
-
-
-  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
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_DSYMUTIL+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
-    echo "$as_me:$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
-  { echo "$as_me:$LINENO: result: $DSYMUTIL" >&5
-echo "${ECHO_T}$DSYMUTIL" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}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
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
-    echo "$as_me:$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
-  { echo "$as_me:$LINENO: result: $ac_ct_DSYMUTIL" >&5
-echo "${ECHO_T}$ac_ct_DSYMUTIL" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-  if test "x$ac_ct_DSYMUTIL" = x; then
-    DSYMUTIL=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&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
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_NMEDIT+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
-    echo "$as_me:$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
-  { echo "$as_me:$LINENO: result: $NMEDIT" >&5
-echo "${ECHO_T}$NMEDIT" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}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
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
-    ac_cv_prog_ac_ct_NMEDIT="nmedit"
-    echo "$as_me:$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
-  { echo "$as_me:$LINENO: result: $ac_ct_NMEDIT" >&5
-echo "${ECHO_T}$ac_ct_NMEDIT" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-  if test "x$ac_ct_NMEDIT" = x; then
-    NMEDIT=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet.  If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
-    NMEDIT=$ac_ct_NMEDIT
-  fi
-else
-  NMEDIT="$ac_cv_prog_NMEDIT"
-fi
-
-
-    { echo "$as_me:$LINENO: checking for -single_module linker flag" >&5
-echo $ECHO_N "checking for -single_module linker flag... $ECHO_C" >&6; }
-if test "${lt_cv_apple_cc_single_mod+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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.
-   echo "int foo(void){return 1;}" > conftest.c
-   $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
-     -dynamiclib ${wl}-single_module conftest.c
-   if test -f libconftest.dylib; then
-     lt_cv_apple_cc_single_mod=yes
-     rm -rf libconftest.dylib*
-   fi
-   rm conftest.c
-      fi
-fi
-{ echo "$as_me:$LINENO: result: $lt_cv_apple_cc_single_mod" >&5
-echo "${ECHO_T}$lt_cv_apple_cc_single_mod" >&6; }
-    { echo "$as_me:$LINENO: checking for -exported_symbols_list linker flag" >&5
-echo $ECHO_N "checking for -exported_symbols_list linker flag... $ECHO_C" >&6; }
-if test "${lt_cv_ld_exported_symbols_list+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  lt_cv_ld_exported_symbols_list=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       lt_cv_ld_exported_symbols_list=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-   LDFLAGS="$save_LDFLAGS"
-
-fi
-{ echo "$as_me:$LINENO: result: $lt_cv_ld_exported_symbols_list" >&5
-echo "${ECHO_T}$lt_cv_ld_exported_symbols_list" >&6; }
-    case $host_os in
-    rhapsody* | darwin1.[0123])
-      _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
-    darwin1.*)
-     _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
-    darwin*)
-      # 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 "$lt_cv_apple_cc_single_mod" = "yes"; then
-      _lt_dar_single_mod='$single_module'
-    fi
-    if test "$lt_cv_ld_exported_symbols_list" = "yes"; 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" != ":"; then
-      _lt_dsymutil="~$DSYMUTIL \$lib || :"
-    else
-      _lt_dsymutil=
-    fi
-    ;;
-  esac
-
-
-enable_dlopen=no
-enable_win32_dll=no
-
-# Check whether --enable-libtool-lock was given.
-if test "${enable_libtool_lock+set}" = set; then
-  enableval=$enable_libtool_lock;
-fi
-
-test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
-
-
-# Check whether --with-pic was given.
-if test "${with_pic+set}" = set; then
-  withval=$with_pic; pic_mode="$withval"
-else
-  pic_mode=default
-fi
-
-test -z "$pic_mode" && pic_mode=default
-
-# Use C for the default configuration in the libtool script
-tagname=
-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 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*
-
-
-
-lt_prog_compiler_no_builtin_flag=
-
-if test "$GCC" = yes; then
-  lt_prog_compiler_no_builtin_flag=' -fno-builtin'
-
-
-{ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; }
-if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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"
-   # 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:7502: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&5
-   echo "$as_me:7506: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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
-{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
-echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; }
-
-if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; 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=
-
-{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
-echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; }
-
-  if test "$GCC" = yes; then
-    lt_prog_compiler_wl='-Wl,'
-    lt_prog_compiler_static='-static'
-
-    case $host_os in
-      aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-       # AIX 5 now supports IA64 processor
-       lt_prog_compiler_static='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      # 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'
-      ;;
-
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-
-    mingw* | cygwin* | pw32* | os2*)
-      # 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'
-      ;;
-
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      lt_prog_compiler_pic='-fno-common'
-      ;;
-
-    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
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-       lt_prog_compiler_pic=-Kconform_pic
-      fi
-      ;;
-
-    hpux*)
-      # 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='-fPIC'
-       ;;
-      esac
-      ;;
-
-    *)
-      lt_prog_compiler_pic='-fPIC'
-      ;;
-    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 "$host_cpu" = ia64; then
-       # AIX 5 now supports IA64 processor
-       lt_prog_compiler_static='-Bstatic'
-      else
-       lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
-      fi
-      ;;
-      darwin*)
-        # PIC is the default on this platform
-        # Common symbols not allowed in MH_DYLIB files
-       case $cc_basename in
-         xlc*)
-         lt_prog_compiler_pic='-qnocommon'
-         lt_prog_compiler_wl='-Wl,'
-         ;;
-       esac
-       ;;
-
-    mingw* | cygwin* | pw32* | os2*)
-      # 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'
-      ;;
-
-    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'
-      ;;
-
-    newsos6)
-      lt_prog_compiler_pic='-KPIC'
-      lt_prog_compiler_static='-Bstatic'
-      ;;
-
-    linux* | k*bsd*-gnu)
-      case $cc_basename in
-      icc* | ecc*)
-       lt_prog_compiler_wl='-Wl,'
-       lt_prog_compiler_pic='-KPIC'
-       lt_prog_compiler_static='-static'
-        ;;
-      pgcc* | pgf77* | pgf90* | pgf95*)
-        # 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'
-        ;;
-      *)
-        case `$CC -V 2>&1 | sed 5q` in
-       *Sun\ C*)
-         # Sun C 5.9
-         lt_prog_compiler_pic='-KPIC'
-         lt_prog_compiler_static='-Bstatic'
-         lt_prog_compiler_wl='-Wl,'
-         ;;
-       *Sun\ F*)
-         # 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=''
-         ;;
-       esac
-       ;;
-      esac
-      ;;
-
-    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*)
-       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
-
-{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
-echo "${ECHO_T}$lt_prog_compiler_pic" >&6; }
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$lt_prog_compiler_pic"; then
-
-{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
-echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6; }
-if test "${lt_cv_prog_compiler_pic_works+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 -DPIC"
-   # 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:7792: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&5
-   echo "$as_me:7796: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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
-{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works" >&5
-echo "${ECHO_T}$lt_cv_prog_compiler_pic_works" >&6; }
-
-if test x"$lt_cv_prog_compiler_pic_works" = xyes; 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
-case $host_os in
-  # For platforms which do not support PIC, -DPIC is meaningless:
-  *djgpp*)
-    lt_prog_compiler_pic=
-    ;;
-  *)
-    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
-    ;;
-esac
-
-#
-# Check to make sure the static flag actually works.
-#
-wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
-{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
-echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; }
-if test "${lt_cv_prog_compiler_static_works+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/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
-{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works" >&5
-echo "${ECHO_T}$lt_cv_prog_compiler_static_works" >&6; }
-
-if test x"$lt_cv_prog_compiler_static_works" = xyes; then
-    :
-else
-    lt_prog_compiler_static=
-fi
-
-
-{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
-echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; }
-if test "${lt_cv_prog_compiler_c_o+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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:7896: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>out/conftest.err)
-   ac_status=$?
-   cat out/conftest.err >&5
-   echo "$as_me:7900: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 ..
-   rmdir conftest
-   $rm conftest*
-
-fi
-{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
-echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6; }
-
-
-hard_links="nottested"
-if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
-  # do not overwrite the value of need_locks provided by the user
-  { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
-echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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
-  { echo "$as_me:$LINENO: result: $hard_links" >&5
-echo "${ECHO_T}$hard_links" >&6; }
-  if test "$hard_links" = no; then
-    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-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
-
-{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; }
-
-  runpath_var=
-  allow_undefined_flag=
-  enable_shared_with_static_runtimes=no
-  archive_cmds=
-  archive_expsym_cmds=
-  old_archive_From_new_cmds=
-  old_archive_from_expsyms_cmds=
-  export_dynamic_flag_spec=
-  whole_archive_flag_spec=
-  thread_safe_flag_spec=
-  hardcode_libdir_flag_spec=
-  hardcode_libdir_flag_spec_ld=
-  hardcode_libdir_separator=
-  hardcode_direct=no
-  hardcode_minus_L=no
-  hardcode_shlibpath_var=unsupported
-  link_all_deplibs=unknown
-  hardcode_automatic=no
-  module_cmds=
-  module_expsym_cmds=
-  always_export_symbols=no
-  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  # 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=
-  # Just being paranoid about ensuring that cc_basename is set.
-  for cc_temp in $compiler""; do
-  case $cc_temp in
-    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-  case $host_os in
-  cygwin* | mingw* | pw32*)
-    # 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 "$GCC" != yes; then
-      with_gnu_ld=no
-    fi
-    ;;
-  interix*)
-    # we just hope/assume this is gcc and not c89 (= MSVC++)
-    with_gnu_ld=yes
-    ;;
-  openbsd*)
-    with_gnu_ld=no
-    ;;
-  esac
-
-  ld_shlibs=yes
-  if test "$with_gnu_ld" = yes; 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 2>/dev/null` in
-      *\ [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 "$host_cpu" != ia64; then
-       ld_shlibs=no
-       cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, 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 modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-EOF
-      fi
-      ;;
-
-    amigaos*)
-      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
-
-      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
-      # that the semantics of dynamic libraries on AmigaOS, at least up
-      # to version 4, is to share data among multiple programs linked
-      # with the same dynamic library.  Since this doesn't match the
-      # behavior of shared libraries on other platforms, we can't use
-      # them.
-      ld_shlibs=no
-      ;;
-
-    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*)
-      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
-      # as there is no search path for DLLs.
-      hardcode_libdir_flag_spec='-L$libdir'
-      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/'\'' -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
-
-      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 (1st line
-       # is EXPORTS), use it as is; otherwise, prepend...
-       archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; 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
-      ;;
-
-    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* | k*bsd*-gnu)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-       tmp_addflag=
-       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; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-         tmp_addflag=' $pic_flag'
-         ;;
-       pgf77* | pgf90* | pgf95*)       # 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; $echo \"$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' ;;
-       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; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-         tmp_sharedflag='-G' ;;
-       *Sun\ F*)                       # Sun Fortran 8.3
-         tmp_sharedflag='-G' ;;
-       *)
-         tmp_sharedflag='-shared' ;;
-       esac
-       archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
-       if test $supports_anon_versioning = yes; 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
-       link_all_deplibs=no
-      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 $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'
-      fi
-      ;;
-
-    solaris*)
-      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
-       ld_shlibs=no
-       cat <<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.
-
-EOF
-      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-       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
-      ;;
-
-    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 can not
-*** 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
-       ;;
-       *)
-         if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-           hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
-           archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
-           archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$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 $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
-
-    if test "$ld_shlibs" = no; 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 "$GCC" = yes && 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 "$host_cpu" = ia64; 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 AIX nm, but means don't demangle with GNU 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")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
-       else
-         export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | 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
-       # need to do runtime linking.
-       case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
-         for ld_flag in $LDFLAGS; do
-         if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
-           aix_use_runtimelinking=yes
-           break
-         fi
-         done
-         ;;
-       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_libdir_separator=':'
-      link_all_deplibs=yes
-
-      if test "$GCC" = yes; 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 "$aix_use_runtimelinking" = yes; then
-         shared_flag="$shared_flag "'${wl}-G'
-       fi
-      else
-       # not using gcc
-       if test "$host_cpu" = ia64; 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 "$aix_use_runtimelinking" = yes; then
-           shared_flag='${wl}-G'
-         else
-           shared_flag='${wl}-bM:SRE'
-         fi
-       fi
-      fi
-
-      # 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_use_runtimelinking" = yes; 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.
-       cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-       /^0/ {
-           s/^0  *\(.*\)$/\1/
-           p
-       }
-    }'
-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 "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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 "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-       else
-       if test "$host_cpu" = ia64; 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.
-        cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-       /^0/ {
-           s/^0  *\(.*\)$/\1/
-           p
-       }
-    }'
-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 "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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'
-         # Exported symbols can be pulled into shared objects from archives
-         whole_archive_flag_spec='$convenience'
-         archive_cmds_need_lc=yes
-         # This is similar to how AIX traditionally builds its shared libraries.
-         archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-       fi
-      fi
-      ;;
-
-    amigaos*)
-      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
-      # see comment about different semantics on the GNU ld section
-      ld_shlibs=no
-      ;;
-
-    bsdi[45]*)
-      export_dynamic_flag_spec=-rdynamic
-      ;;
-
-    cygwin* | mingw* | pw32*)
-      # 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.
-      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 `echo "$deplibs" | $SED -e '\''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'
-      fix_srcfile_path='`cygpath -w "$srcfile"`'
-      enable_shared_with_static_runtimes=yes
-      ;;
-
-    darwin* | rhapsody*)
-      case $host_os in
-        rhapsody* | darwin1.[012])
-         allow_undefined_flag='${wl}-undefined ${wl}suppress'
-         ;;
-       *) # Darwin 1.3 on
-         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
-           allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-         else
-           case ${MACOSX_DEPLOYMENT_TARGET} in
-             10.[012])
-               allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-               ;;
-             10.*)
-               allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup'
-               ;;
-           esac
-         fi
-         ;;
-      esac
-      archive_cmds_need_lc=no
-      hardcode_direct=no
-      hardcode_automatic=yes
-      hardcode_shlibpath_var=unsupported
-      whole_archive_flag_spec=''
-      link_all_deplibs=yes
-    if test "$GCC" = yes ; then
-       output_verbose_link_cmd='echo'
-        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
-      case $cc_basename in
-        xlc*)
-         output_verbose_link_cmd='echo'
-         archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring'
-         module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-         archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          module_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          ;;
-       *)
-         ld_shlibs=no
-          ;;
-      esac
-    fi
-      ;;
-
-    dgux*)
-      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_libdir_flag_spec='-L$libdir'
-      hardcode_shlibpath_var=no
-      ;;
-
-    freebsd1*)
-      ld_shlibs=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 -o $lib $libobjs $deplibs $compiler_flags'
-      hardcode_libdir_flag_spec='-R$libdir'
-      hardcode_direct=yes
-      hardcode_shlibpath_var=no
-      ;;
-
-    hpux9*)
-      if test "$GCC" = yes; then
-       archive_cmds='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $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 $output_objdir/$soname = $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 "$GCC" = yes -a "$with_gnu_ld" = no; then
-       archive_cmds='$CC -shared -fPIC ${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 "$with_gnu_ld" = no; then
-       hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-       hardcode_libdir_separator=:
-
-       hardcode_direct=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 "$GCC" = yes -a "$with_gnu_ld" = no; 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 ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       *)
-         archive_cmds='$CC -shared -fPIC ${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'
-         ;;
-       *)
-         archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       esac
-      fi
-      if test "$with_gnu_ld" = no; then
-       hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-       hardcode_libdir_separator=:
-
-       case $host_cpu in
-       hppa*64*|ia64*)
-         hardcode_libdir_flag_spec_ld='+b $libdir'
-         hardcode_direct=no
-         hardcode_shlibpath_var=no
-         ;;
-       *)
-         hardcode_direct=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 "$GCC" = yes; then
-       archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-       archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-       hardcode_libdir_flag_spec_ld='-rpath $libdir'
-      fi
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator=:
-      link_all_deplibs=yes
-      ;;
-
-    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
-      ;;
-
-    openbsd*)
-      if test -f /usr/libexec/ld.so; then
-       hardcode_direct=yes
-       hardcode_shlibpath_var=no
-       if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; 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
-         case $host_os in
-          openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
-            archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-            hardcode_libdir_flag_spec='-R$libdir'
-            ;;
-          *)
-            archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-            hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-            ;;
-         esac
-        fi
-      else
-       ld_shlibs=no
-      fi
-      ;;
-
-    os2*)
-      hardcode_libdir_flag_spec='-L$libdir'
-      hardcode_minus_L=yes
-      allow_undefined_flag=unsupported
-      archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
-      old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
-      ;;
-
-    osf3*)
-      if test "$GCC" = yes; 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" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-       allow_undefined_flag=' -expect_unresolved \*'
-       archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-      fi
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator=:
-      ;;
-
-    osf4* | osf5*)     # as osf3* with the addition of -msym flag
-      if test "$GCC" = yes; then
-       allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
-       archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${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='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -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; echo "-hidden">> $lib.exp~
-       $LD -shared${allow_undefined_flag} -input $lib.exp $linker_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
-      hardcode_libdir_separator=:
-      ;;
-
-    solaris*)
-      no_undefined_flag=' -z text'
-      if test "$GCC" = yes; then
-       wlarc='${wl}'
-       archive_cmds='$CC -shared ${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 ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
-      else
-       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'
-      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 "$GCC" = yes; 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 "x$host_vendor" = xsequent; 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 "$GCC" = yes; 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 can NOT 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='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
-      hardcode_libdir_separator=':'
-      link_all_deplibs=yes
-      export_dynamic_flag_spec='${wl}-Bexport'
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-       archive_cmds='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-       archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-       archive_cmds='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-       archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$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
-  fi
-
-{ echo "$as_me:$LINENO: result: $ld_shlibs" >&5
-echo "${ECHO_T}$ld_shlibs" >&6; }
-test "$ld_shlibs" = no && can_build_shared=no
-
-#
-# 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 "$enable_shared" = yes && test "$GCC" = yes; 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.
-      { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
-echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; }
-      $rm conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } 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:$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=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-        then
-         archive_cmds_need_lc=no
-        else
-         archive_cmds_need_lc=yes
-        fi
-        allow_undefined_flag=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $rm conftest*
-      { echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
-echo "${ECHO_T}$archive_cmds_need_lc" >&6; }
-      ;;
-    esac
-  fi
-  ;;
-esac
-
-{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
-echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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"
-
-if test "$GCC" = yes; then
-  case $host_os in
-    darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
-    *) lt_awk_arg="/^libraries:/" ;;
-  esac
-  lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-  if echo "$lt_search_path_spec" | grep ';' >/dev/null ; then
-    # 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 -e 's/;/ /g'`
-  else
-    lt_search_path_spec=`echo "$lt_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
-  fi
-  # 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`
-  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"
-    else
-      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; }
-}'`
-  sys_lib_search_path_spec=`echo $lt_search_path_spec`
-else
-  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
-fi
-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
-  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
-  need_lib_prefix=no
-  need_version=no
-  hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; 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
-    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
-    # soname into executable. Probably we can add versioning support to
-    # collect2, so additional links can be useful in future.
-    if test "$aix_use_runtimelinking" = yes; then
-      # 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}'
-    else
-      # 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'
-    fi
-    shlibpath_var=LIBPATH
-  fi
-  ;;
-
-amigaos*)
-  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=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $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'
-  ;;
-
-beos*)
-  library_names_spec='${libname}${shared_ext}'
-  dynamic_linker="$host_os ld.so"
-  shlibpath_var=LIBRARY_PATH
-  ;;
-
-bsdi[45]*)
-  version_type=linux
-  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*)
-  version_type=windows
-  shrext_cmds=".dll"
-  need_version=no
-  need_lib_prefix=no
-
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32*)
-    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'
-    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="/usr/lib /lib/w32api /lib /usr/local/lib"
-      ;;
-    mingw*)
-      # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        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
-      ;;
-    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
-    ;;
-
-  *)
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
-    ;;
-  esac
-  dynamic_linker='Win32 ld.exe'
-  # 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}${versuffix}$shared_ext ${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
-  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
-  ;;
-
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
-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[123]*) 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} $libname${shared_ext}'
-      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
-  ;;
-
-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
-  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 "X$HPUX_IA64_MODE" = X32; then
-      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
-    else
-      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
-    fi
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-   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'
-  ;;
-
-interix[3-9]*)
-  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'
-  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 "$lt_cv_prog_gnu_ld" = yes; then
-               version_type=linux
-       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
-  ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-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'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  # 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
-
-  # Append ld.so.conf contents 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;/^$/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
-  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=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=yes
-  ;;
-
-openbsd*)
-  version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
-  need_lib_prefix=no
-  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-  case $host_os in
-    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
-    *)                         need_version=no  ;;
-  esac
-  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
-  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    case $host_os in
-      openbsd2.[89] | openbsd2.[89].*)
-       shlibpath_overrides_runpath=no
-       ;;
-      *)
-       shlibpath_overrides_runpath=yes
-       ;;
-      esac
-  else
-    shlibpath_overrides_runpath=yes
-  fi
-  ;;
-
-os2*)
-  libname_spec='$name'
-  shrext_cmds=".dll"
-  need_lib_prefix=no
-  library_names_spec='$libname${shared_ext} $libname.a'
-  dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
-  ;;
-
-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
-  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 "$with_gnu_ld" = yes; then
-    need_lib_prefix=no
-  fi
-  need_version=yes
-  ;;
-
-sysv4 | sysv4.3*)
-  version_type=linux
-  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
-      export_dynamic_flag_spec='${wl}-Blargedynsym'
-      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
-    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=freebsd-elf
-  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
-  hardcode_into_libs=yes
-  if test "$with_gnu_ld" = yes; then
-    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
-    shlibpath_overrides_runpath=no
-  else
-    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
-    shlibpath_overrides_runpath=yes
-    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'
-  ;;
-
-uts4*)
-  version_type=linux
-  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
-{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-echo "${ECHO_T}$dynamic_linker" >&6; }
-test "$dynamic_linker" = no && can_build_shared=no
-
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec"
-fi
-
-sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec"
-fi
-
-sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
-  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
-echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; }
-hardcode_action=
-if test -n "$hardcode_libdir_flag_spec" || \
-   test -n "$runpath_var" || \
-   test "X$hardcode_automatic" = "Xyes" ; then
-
-  # We can hardcode non-existant directories.
-  if test "$hardcode_direct" != no &&
-     # 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 "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no &&
-     test "$hardcode_minus_L" != no; 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
-{ echo "$as_me:$LINENO: result: $hardcode_action" >&5
-echo "${ECHO_T}$hardcode_action" >&6; }
-
-if test "$hardcode_action" = relink; then
-  # Fast installation is not supported
-  enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
-  # Fast installation is not necessary
-  enable_fast_install=needless
-fi
-
-striplib=
-old_striplib=
-{ echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
-echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&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"
-  { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}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"
-         { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
-       else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-       ;;
-   *)
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-    ;;
-  esac
-fi
-
-if test "x$enable_dlopen" != xyes; 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*)
-    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
-    { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
-echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; }
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* 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
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_lib_dl_dlopen=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_cv_lib_dl_dlopen=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
-echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; }
-if test $ac_cv_lib_dl_dlopen = yes; 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
-
-   ;;
-
-  *)
-    { echo "$as_me:$LINENO: checking for shl_load" >&5
-echo $ECHO_N "checking for shl_load... $ECHO_C" >&6; }
-if test "${ac_cv_func_shl_load+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define shl_load innocuous_shl_load
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char shl_load (); 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 shl_load
-
-/* 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 ();
-/* 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_shl_load || defined __stub___shl_load
-choke me
-#endif
-
-int
-main ()
-{
-return shl_load ();
-  ;
-  return 0;
-}
-_ACEOF
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_func_shl_load=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_cv_func_shl_load=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
-echo "${ECHO_T}$ac_cv_func_shl_load" >&6; }
-if test $ac_cv_func_shl_load = yes; then
-  lt_cv_dlopen="shl_load"
-else
-  { echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
-echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6; }
-if test "${ac_cv_lib_dld_shl_load+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* 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
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_lib_dld_shl_load=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_cv_lib_dld_shl_load=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
-echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6; }
-if test $ac_cv_lib_dld_shl_load = yes; then
-  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
-else
-  { echo "$as_me:$LINENO: checking for dlopen" >&5
-echo $ECHO_N "checking for dlopen... $ECHO_C" >&6; }
-if test "${ac_cv_func_dlopen+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define dlopen innocuous_dlopen
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char dlopen (); 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 dlopen
-
-/* 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 ();
-/* 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_dlopen || defined __stub___dlopen
-choke me
-#endif
-
-int
-main ()
-{
-return dlopen ();
-  ;
-  return 0;
-}
-_ACEOF
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_func_dlopen=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_cv_func_dlopen=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
-echo "${ECHO_T}$ac_cv_func_dlopen" >&6; }
-if test $ac_cv_func_dlopen = yes; then
-  lt_cv_dlopen="dlopen"
-else
-  { echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
-echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6; }
-if test "${ac_cv_lib_dl_dlopen+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldl  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* 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
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_lib_dl_dlopen=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_cv_lib_dl_dlopen=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
-echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6; }
-if test $ac_cv_lib_dl_dlopen = yes; then
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
-else
-  { echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
-echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6; }
-if test "${ac_cv_lib_svld_dlopen+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsvld  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* 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
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_lib_svld_dlopen=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_cv_lib_svld_dlopen=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
-echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6; }
-if test $ac_cv_lib_svld_dlopen = yes; then
-  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
-else
-  { echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
-echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6; }
-if test "${ac_cv_lib_dld_dld_link+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldld  $LIBS"
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* 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
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-  ac_cv_lib_dld_dld_link=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_cv_lib_dld_dld_link=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
-echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6; }
-if test $ac_cv_lib_dld_dld_link = yes; then
-  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-
-fi
-
-    ;;
-  esac
-
-  if test "x$lt_cv_dlopen" != xno; then
-    enable_dlopen=yes
-  else
-    enable_dlopen=no
-  fi
-
-  case $lt_cv_dlopen in
-  dlopen)
-    save_CPPFLAGS="$CPPFLAGS"
-    test "x$ac_cv_header_dlfcn_h" = xyes && 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"
-
-    { echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
-echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6; }
-if test "${lt_cv_dlopen_self+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-         if test "$cross_compiling" = yes; 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 <<EOF
-#line 10273 "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
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=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;
-      /* dlclose (self); */
-    }
-  else
-    puts (dlerror ());
-
-    exit (status);
-}
-EOF
-  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && 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
-{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
-echo "${ECHO_T}$lt_cv_dlopen_self" >&6; }
-
-    if test "x$lt_cv_dlopen_self" = xyes; then
-      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
-      { echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
-echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6; }
-if test "${lt_cv_dlopen_self_static+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-         if test "$cross_compiling" = yes; 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 <<EOF
-#line 10373 "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
-
-#ifdef __cplusplus
-extern "C" void exit (int);
-#endif
-
-void fnord() { int i=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;
-      /* dlclose (self); */
-    }
-  else
-    puts (dlerror ());
-
-    exit (status);
-}
-EOF
-  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
-  (eval $ac_link) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && 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
-{ echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
-echo "${ECHO_T}$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
-
-
-# Report which library types will actually be built
-{ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
-echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; }
-{ echo "$as_me:$LINENO: result: $can_build_shared" >&5
-echo "${ECHO_T}$can_build_shared" >&6; }
-
-{ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
-echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; }
-test "$can_build_shared" = "no" && 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 "$enable_shared" = yes && enable_static=no
-  if test -n "$RANLIB"; then
-    archive_cmds="$archive_cmds~\$RANLIB \$lib"
-    postinstall_cmds='$RANLIB $lib'
-  fi
-  ;;
-
-aix[4-9]*)
-  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-    test "$enable_shared" = yes && enable_static=no
-  fi
-    ;;
-esac
-{ echo "$as_me:$LINENO: result: $enable_shared" >&5
-echo "${ECHO_T}$enable_shared" >&6; }
-
-{ echo "$as_me:$LINENO: checking whether to build static libraries" >&5
-echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; }
-# Make sure either enable_shared or enable_static is yes.
-test "$enable_shared" = yes || enable_static=yes
-{ echo "$as_me:$LINENO: result: $enable_static" >&5
-echo "${ECHO_T}$enable_static" >&6; }
-
-# The else clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
-  # See if we are running on zsh, and set the options which allow our commands through
-  # without removal of \ escapes.
-  if test -n "${ZSH_VERSION+set}" ; then
-    setopt NO_GLOB_SUBST
-  fi
-  # Now quote all the things that may contain metacharacters while being
-  # careful not to overquote the AC_SUBSTed values.  We take copies of the
-  # variables and quote the copies for generation of the libtool script.
-  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
-    SED SHELL STRIP \
-    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
-    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
-    deplibs_check_method reload_flag reload_cmds need_locks \
-    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
-    lt_cv_sys_global_symbol_to_c_name_address \
-    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
-    old_postinstall_cmds old_postuninstall_cmds \
-    compiler \
-    CC \
-    LD \
-    lt_prog_compiler_wl \
-    lt_prog_compiler_pic \
-    lt_prog_compiler_static \
-    lt_prog_compiler_no_builtin_flag \
-    export_dynamic_flag_spec \
-    thread_safe_flag_spec \
-    whole_archive_flag_spec \
-    enable_shared_with_static_runtimes \
-    old_archive_cmds \
-    old_archive_from_new_cmds \
-    predep_objects \
-    postdep_objects \
-    predeps \
-    postdeps \
-    compiler_lib_search_path \
-    compiler_lib_search_dirs \
-    archive_cmds \
-    archive_expsym_cmds \
-    postinstall_cmds \
-    postuninstall_cmds \
-    old_archive_from_expsyms_cmds \
-    allow_undefined_flag \
-    no_undefined_flag \
-    export_symbols_cmds \
-    hardcode_libdir_flag_spec \
-    hardcode_libdir_flag_spec_ld \
-    hardcode_libdir_separator \
-    hardcode_automatic \
-    module_cmds \
-    module_expsym_cmds \
-    lt_cv_prog_compiler_c_o \
-    fix_srcfile_path \
-    exclude_expsyms \
-    include_expsyms; do
-
-    case $var in
-    old_archive_cmds | \
-    old_archive_from_new_cmds | \
-    archive_cmds | \
-    archive_expsym_cmds | \
-    module_cmds | \
-    module_expsym_cmds | \
-    old_archive_from_expsyms_cmds | \
-    export_symbols_cmds | \
-    extract_expsyms_cmds | reload_cmds | finish_cmds | \
-    postinstall_cmds | postuninstall_cmds | \
-    old_postinstall_cmds | old_postuninstall_cmds | \
-    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
-      # Double-quote double-evaled strings.
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
-      ;;
-    *)
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
-      ;;
-    esac
-  done
-
-  case $lt_echo in
-  *'\$0 --fallback-echo"')
-    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
-    ;;
-  esac
-
-cfgfile="${ofile}T"
-  trap "$rm \"$cfgfile\"; exit 1" 1 2 15
-  $rm -f "$cfgfile"
-  { echo "$as_me:$LINENO: creating $ofile" >&5
-echo "$as_me: creating $ofile" >&6;}
-
-  cat <<__EOF__ >> "$cfgfile"
-#! $SHELL
-
-# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
-# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
-# NOTE: Changes made to this file will be lost: look at ltmain.sh.
-#
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-# Free Software Foundation, Inc.
-#
-# This file is part of GNU Libtool:
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 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 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, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# 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.
-
-# 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//"
-
-# 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
-
-# The names of the tagged configurations supported by this script.
-available_tags=
-
-# ### BEGIN LIBTOOL CONFIG
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# 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
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# 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
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A C compiler.
-LTCC=$lt_LTCC
-
-# LTCC compiler flags.
-LTCFLAGS=$lt_LTCFLAGS
-
-# A language-specific compiler.
-CC=$lt_compiler
-
-# Is the compiler the GNU C compiler?
-with_gcc=$GCC
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# The linker used to build libraries.
-LD=$lt_LD
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$lt_STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally ".so").
-shrext_cmds='$shrext_cmds'
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# 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
-
-# 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
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
-
-# 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
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_thread_safe_flag_spec
-
-# Library versioning type.
-version_type=$version_type
-
-# 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
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_old_archive_cmds
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# 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 and install a shared archive.
-archive_cmds=$lt_archive_cmds
-archive_expsym_cmds=$lt_archive_expsym_cmds
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to build a loadable module (assumed same as above if empty)
-module_cmds=$lt_module_cmds
-module_expsym_cmds=$lt_module_expsym_cmds
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$lt_predep_objects
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$lt_postdep_objects
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$lt_predeps
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdeps=$lt_postdeps
-
-# The directories searched by this compiler when creating a shared
-# library
-compiler_lib_search_dirs=$lt_compiler_lib_search_dirs
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_compiler_lib_search_path
-
-# 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
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# 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 in a C name address pair
-global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# 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
-
-# If ld is used when linking, flag to hardcode \$libdir into
-# a binary during linking. This must work even if \$libdir does
-# not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
-
-# 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 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
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
-
-# 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
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_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
-
-# ### END LIBTOOL CONFIG
-
-__EOF__
-
-
-  case $host_os in
-  aix3*)
-    cat <<\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 "X${COLLECT_NAMES+set}" != Xset; then
-  COLLECT_NAMES=
-  export COLLECT_NAMES
-fi
-EOF
-    ;;
-  esac
-
-  # 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"
-
-else
-  # If there is no Makefile yet, we rely on a make rule to execute
-  # `config.status --recheck' to rerun these tests and create the
-  # libtool script then.
-  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
-  if test -f "$ltmain_in"; then
-    test -f Makefile && make "$ltmain"
-  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
-
-CC="$lt_save_CC"
-
-
-# Check whether --with-tags was given.
-if test "${with_tags+set}" = set; then
-  withval=$with_tags; tagnames="$withval"
-fi
-
-
-if test -f "$ltmain" && test -n "$tagnames"; then
-  if test ! -f "${ofile}"; then
-    { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5
-echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;}
-  fi
-
-  if test -z "$LTCC"; then
-    eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
-    if test -z "$LTCC"; then
-      { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5
-echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;}
-    else
-      { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5
-echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;}
-    fi
-  fi
-  if test -z "$LTCFLAGS"; then
-    eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`"
-  fi
-
-  # Extract list of available tagged configurations in $ofile.
-  # Note that this assumes the entire list is on one line.
-  available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
-
-  lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
-  for tagname in $tagnames; do
-    IFS="$lt_save_ifs"
-    # Check whether tagname contains only valid characters
-    case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in
-    "") ;;
-    *)  { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5
-echo "$as_me: error: invalid tag name: $tagname" >&2;}
-   { (exit 1); exit 1; }; }
-       ;;
-    esac
-
-    if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
-    then
-      { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5
-echo "$as_me: error: tag name \"$tagname\" already exists" >&2;}
-   { (exit 1); exit 1; }; }
-    fi
-
-    # Update the list of available tags.
-    if test -n "$tagname"; then
-      echo appending configuration tag \"$tagname\" to $ofile
-
-      case $tagname in
-      CXX)
-       if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
-           ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
-           (test "X$CXX" != "Xg++"))) ; 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
-
-
-
-
-archive_cmds_need_lc_CXX=no
-allow_undefined_flag_CXX=
-always_export_symbols_CXX=no
-archive_expsym_cmds_CXX=
-export_dynamic_flag_spec_CXX=
-hardcode_direct_CXX=no
-hardcode_libdir_flag_spec_CXX=
-hardcode_libdir_flag_spec_ld_CXX=
-hardcode_libdir_separator_CXX=
-hardcode_minus_L_CXX=no
-hardcode_shlibpath_var_CXX=unsupported
-hardcode_automatic_CXX=no
-module_cmds_CXX=
-module_expsym_cmds_CXX=
-link_all_deplibs_CXX=unknown
-old_archive_cmds_CXX=$old_archive_cmds
-no_undefined_flag_CXX=
-whole_archive_flag_spec_CXX=
-enable_shared_with_static_runtimes_CXX=no
-
-# 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=
-compiler_lib_search_dirs_CXX=
-
-# Source file extension for C++ test sources.
-ac_ext=cpp
-
-# Object file extension for compiled C++ test sources.
-objext=o
-objext_CXX=$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(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_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++"}
-compiler=$CC
-compiler_CXX=$CC
-for cc_temp in $compiler""; do
-  case $cc_temp in
-    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-
-# We don't want -fno-exception wen compiling C++ code, so set the
-# no_builtin_flag separately
-if test "$GXX" = yes; then
-  lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
-else
-  lt_prog_compiler_no_builtin_flag_CXX=
-fi
-
-if test "$GXX" = yes; 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 "$withval" = no || with_gnu_ld=yes
-else
-  with_gnu_ld=no
-fi
-
-ac_prog=ld
-if test "$GCC" = yes; then
-  # Check if gcc -print-prog-name=ld gives a path.
-  { echo "$as_me:$LINENO: checking for ld used by $CC" >&5
-echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&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 "$with_gnu_ld" = yes; then
-  { echo "$as_me:$LINENO: checking for GNU ld" >&5
-echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; }
-else
-  { echo "$as_me:$LINENO: checking for non-GNU ld" >&5
-echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; }
-fi
-if test "${lt_cv_path_LD+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 "$with_gnu_ld" != no && break
-       ;;
-      *)
-       test "$with_gnu_ld" != yes && 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
-  { echo "$as_me:$LINENO: result: $LD" >&5
-echo "${ECHO_T}$LD" >&6; }
-else
-  { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
-echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
-   { (exit 1); exit 1; }; }
-{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
-echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; }
-if test "${lt_cv_prog_gnu_ld+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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
-{ echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
-echo "${ECHO_T}$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 "$with_gnu_ld" = yes; then
-    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
-    archive_expsym_cmds_CXX='$CC -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 "\-L"'
-
-else
-  GXX=no
-  with_gnu_ld=no
-  wlarc=
-fi
-
-# PORTME: fill in a description of your system's C++ link characteristics
-{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&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 "$host_cpu" = ia64; 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
-      # need to do runtime linking.
-      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
-       ;;
-      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_libdir_separator_CXX=':'
-    link_all_deplibs_CXX=yes
-
-    if test "$GXX" = yes; 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 "$aix_use_runtimelinking" = yes; then
-       shared_flag="$shared_flag "'${wl}-G'
-      fi
-    else
-      # not using gcc
-      if test "$host_cpu" = ia64; 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 "$aix_use_runtimelinking" = yes; then
-         shared_flag='${wl}-G'
-       else
-         shared_flag='${wl}-bM:SRE'
-       fi
-      fi
-    fi
-
-    # 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_use_runtimelinking" = yes; then
-      # Warning - without using the other runtime loading flags (-brtl),
-      # -berok will link without error, but may produce a broken library.
-      allow_undefined_flag_CXX='-berok'
-      # Determine the default libpath from the value encoded in an empty executable.
-      cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_cxx_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-       /^0/ {
-           s/^0  *\(.*\)$/\1/
-           p
-       }
-    }'
-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 "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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 "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-     else
-      if test "$host_cpu" = ia64; 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.
-       cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_cxx_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-       /^0/ {
-           s/^0  *\(.*\)$/\1/
-           p
-       }
-    }'
-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 "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; 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'
-       # Exported symbols can be pulled into shared objects from archives
-       whole_archive_flag_spec_CXX='$convenience'
-       archive_cmds_need_lc_CXX=yes
-       # This is similar to how AIX traditionally builds its shared libraries.
-       archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-      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*)
-    # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
-    # as there is no search path for DLLs.
-    hardcode_libdir_flag_spec_CXX='-L$libdir'
-    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 (1st line
-      # is EXPORTS), use it as is; otherwise, prepend...
-      archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; 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
-  ;;
-      darwin* | rhapsody*)
-      archive_cmds_need_lc_CXX=no
-      hardcode_direct_CXX=no
-      hardcode_automatic_CXX=yes
-      hardcode_shlibpath_var_CXX=unsupported
-      whole_archive_flag_spec_CXX=''
-      link_all_deplibs_CXX=yes
-      allow_undefined_flag_CXX="$_lt_dar_allow_undefined"
-      if test "$GXX" = yes ; then
-      output_verbose_link_cmd='echo'
-      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 "$lt_cv_apple_cc_single_mod" != "yes"; 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
-      case $cc_basename in
-        xlc*)
-         output_verbose_link_cmd='echo'
-          archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring'
-          module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-          archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          ;;
-       *)
-         ld_shlibs_CXX=no
-          ;;
-      esac
-      fi
-        ;;
-
-  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
-    ;;
-  freebsd[12]*)
-    # 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
-    ;;
-  gnu*)
-    ;;
-  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 $output_objdir/$soname = $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) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list'
-      ;;
-    *)
-      if test "$GXX" = yes; then
-        archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      else
-        # FIXME: insert proper C++ library support
-        ld_shlibs_CXX=no
-      fi
-      ;;
-    esac
-    ;;
-  hpux10*|hpux11*)
-    if test $with_gnu_ld = no; 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_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; echo $list'
-       ;;
-      *)
-       if test "$GXX" = yes; then
-         if test $with_gnu_ld = no; 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 -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
-             ;;
-           *)
-             archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${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" && echo -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 "$GXX" = yes; then
-         if test "$with_gnu_ld" = no; then
-           archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-         else
-           archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${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=:
-    ;;
-  linux* | k*bsd*-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; echo $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*)
-       # 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
-       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'
-
-       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; $echo \"$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=`echo $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; echo $list'
-       ;;
-      *)
-       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; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-
-         # Not sure whether something based on
-         # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
-         # would be better.
-         output_verbose_link_cmd='echo'
-
-         # 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* | netbsdelf*-gnu)
-    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::"'
-    ;;
-  openbsd2*)
-    # C++ shared libraries are fairly broken
-    ld_shlibs_CXX=no
-    ;;
-  openbsd*)
-    if test -f /usr/libexec/ld.so; then
-      hardcode_direct_CXX=yes
-      hardcode_shlibpath_var_CXX=no
-      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__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; 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='echo'
-    else
-      ld_shlibs_CXX=no
-    fi
-    ;;
-  osf3*)
-    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
-       # "CC -Bstatic", where "CC" is the KAI C++ compiler.
-       old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
-
-       ;;
-      RCC*)
-       # Rational C++ 2.4.1
-       # FIXME: insert proper C++ library support
-       ld_shlibs_CXX=no
-       ;;
-      cxx*)
-       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" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-
-       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.
-       #
-       # 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=`echo $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; echo $list'
-       ;;
-      *)
-       if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-         allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
-         archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-
-         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 "\-L"'
-
-       else
-         # FIXME: insert proper C++ library support
-         ld_shlibs_CXX=no
-       fi
-       ;;
-    esac
-    ;;
-  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.
-       old_archive_cmds_CXX='$CC -o $oldlib $oldobjs'
-       ;;
-      RCC*)
-       # Rational C++ 2.4.1
-       # FIXME: insert proper C++ library support
-       ld_shlibs_CXX=no
-       ;;
-      cxx*)
-       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" && echo -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'
-       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=`echo $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; echo $list'
-       ;;
-      *)
-       if test "$GXX" = yes && test "$with_gnu_ld" = no; then
-         allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
-        archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-
-         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 "\-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*)
-       # 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='echo'
-
-       # 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 "$GXX" = yes && test "$with_gnu_ld" = no; then
-         no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
-         if $CC --version | grep -v '^2\.7' > /dev/null; then
-           archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $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 -nostdlib ${wl}-M $wl$lib.exp -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 \"\-L\""
-         else
-           # g++ 2.7 appears to require `-G' NOT `-shared' on this
-           # platform.
-           archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $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 -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 \"\-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 can NOT 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.
-    # 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.
-    # So that behaviour is only enabled if SCOABSPATH is set to a
-    # non-empty value in the environment.  Most likely only useful for
-    # creating official distributions of packages.
-    # This is a hack until libtool officially supports absolute path
-    # names for shared libraries.
-    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='`test -z "$SCOABSPATH" && echo ${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,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-       archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-       ;;
-      *)
-       archive_cmds_CXX='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-       archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$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
-{ echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
-echo "${ECHO_T}$ld_shlibs_CXX" >&6; }
-test "$ld_shlibs_CXX" = no && can_build_shared=no
-
-GCC_CXX="$GXX"
-LD_CXX="$LD"
-
-cat > conftest.$ac_ext <<EOF
-class Foo
-{
-public:
-  Foo (void) { a = 0; }
-private:
-  int a;
-};
-EOF
-
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; 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
-
-  # The `*' in the case matches for architectures that use `case' in
-  # $output_verbose_cmd can trigger glob expansion during the loop
-  # eval without this substitution.
-  output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"`
-
-  for p in `eval $output_verbose_link_cmd`; do
-    case $p in
-
-    -L* | -R* | -l*)
-       # Some compilers place space between "-{L,R}" and the path.
-       # Remove the space.
-       if test $p = "-L" \
-         || test $p = "-R"; then
-        prev=$p
-        continue
-       else
-        prev=
-       fi
-
-       if test "$pre_test_object_deps_done" = no; then
-        case $p 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
-       ;;
-
-    *.$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 "$pre_test_object_deps_done" = no; 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
-
-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
-
-# 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=
-  ;;
-
-linux*)
-  case `$CC -V 2>&1 | sed 5q` in
-  *Sun\ C*)
-    # Sun C++ 5.9
-    #
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-    if test "$solaris_use_stlport4" != yes; then
-      postdeps_CXX='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
-
-solaris*)
-  case $cc_basename in
-  CC*)
-    # The more standards-conforming stlport4 library is
-    # incompatible with the Cstd library. Avoid specifying
-    # it if it's in CXXFLAGS. Ignore libCrun as
-    # -library=stlport4 depends on it.
-    case " $CXX $CXXFLAGS " in
-    *" -library=stlport4 "*)
-      solaris_use_stlport4=yes
-      ;;
-    esac
-
-    # Adding this requires a known-good setup of shared libraries for
-    # Sun compiler versions before 5.6, else PIC objects from an old
-    # archive will be linked into the output, leading to subtle bugs.
-    if test "$solaris_use_stlport4" != yes; then
-      postdeps_CXX='-library=Cstd -library=Crun'
-    fi
-    ;;
-  esac
-  ;;
-esac
-
-case " $postdeps_CXX " in
-*" -lc "*) archive_cmds_need_lc_CXX=no ;;
-esac
-
-lt_prog_compiler_wl_CXX=
-lt_prog_compiler_pic_CXX=
-lt_prog_compiler_static_CXX=
-
-{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
-echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; }
-
-  # C++ specific cases for pic, static, wl, etc.
-  if test "$GXX" = yes; 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 "$host_cpu" = ia64; then
-       # AIX 5 now supports IA64 processor
-       lt_prog_compiler_static_CXX='-Bstatic'
-      fi
-      ;;
-    amigaos*)
-      # 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'
-      ;;
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-    mingw* | cygwin* | os2* | pw32*)
-      # 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'
-      ;;
-    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=
-      ;;
-    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 IA64 HP-UX and 64-bit HP-UX, but
-      # not for PA HP-UX.
-      case $host_cpu in
-      hppa*64*|ia64*)
-       ;;
-      *)
-       lt_prog_compiler_pic_CXX='-fPIC'
-       ;;
-      esac
-      ;;
-    *)
-      lt_prog_compiler_pic_CXX='-fPIC'
-      ;;
-    esac
-  else
-    case $host_os in
-      aix[4-9]*)
-       # All AIX code is PIC.
-       if test "$host_cpu" = ia64; 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_AC_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
-       ;;
-       darwin*)
-         # PIC is the default on this platform
-         # Common symbols not allowed in MH_DYLIB files
-         case $cc_basename in
-           xlc*)
-           lt_prog_compiler_pic_CXX='-qnocommon'
-           lt_prog_compiler_wl_CXX='-Wl,'
-           ;;
-         esac
-       ;;
-      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 "$host_cpu" != ia64; 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)
-       case $cc_basename in
-         KCC*)
-           # KAI C++ Compiler
-           lt_prog_compiler_wl_CXX='--backend -Wl,'
-           lt_prog_compiler_pic_CXX='-fPIC'
-           ;;
-         icpc* | ecpc*)
-           # Intel C++
-           lt_prog_compiler_wl_CXX='-Wl,'
-           lt_prog_compiler_pic_CXX='-KPIC'
-           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'
-           ;;
-         *)
-           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)
-       ;;
-      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*)
-           # 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
-       ;;
-      tandem*)
-       case $cc_basename in
-         NCC*)
-           # NonStop-UX NCC 3.20
-           lt_prog_compiler_pic_CXX='-KPIC'
-           ;;
-         *)
-           ;;
-       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
-       ;;
-      vxworks*)
-       ;;
-      *)
-       lt_prog_compiler_can_build_shared_CXX=no
-       ;;
-    esac
-  fi
-
-{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5
-echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6; }
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$lt_prog_compiler_pic_CXX"; then
-
-{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
-echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6; }
-if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 -DPIC"
-   # 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:12774: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&5
-   echo "$as_me:12778: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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
-{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works_CXX" >&5
-echo "${ECHO_T}$lt_cv_prog_compiler_pic_works_CXX" >&6; }
-
-if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; 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
-case $host_os in
-  # For platforms which do not support PIC, -DPIC is meaningless:
-  *djgpp*)
-    lt_prog_compiler_pic_CXX=
-    ;;
-  *)
-    lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
-    ;;
-esac
-
-#
-# 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\"
-{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
-echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; }
-if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/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
-{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works_CXX" >&5
-echo "${ECHO_T}$lt_cv_prog_compiler_static_works_CXX" >&6; }
-
-if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then
-    :
-else
-    lt_prog_compiler_static_CXX=
-fi
-
-
-{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
-echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; }
-if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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:12878: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>out/conftest.err)
-   ac_status=$?
-   cat out/conftest.err >&5
-   echo "$as_me:12882: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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 ..
-   rmdir conftest
-   $rm conftest*
-
-fi
-{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5
-echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6; }
-
-
-hard_links="nottested"
-if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
-  # do not overwrite the value of need_locks provided by the user
-  { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
-echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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
-  { echo "$as_me:$LINENO: result: $hard_links" >&5
-echo "${ECHO_T}$hard_links" >&6; }
-  if test "$hard_links" = no; then
-    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-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
-
-{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; }
-
-  export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  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 AIX nm, but means don't demangle with GNU 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")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
-    else
-      export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
-    fi
-    ;;
-  pw32*)
-    export_symbols_cmds_CXX="$ltdll_cmds"
-  ;;
-  cygwin* | mingw*)
-    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
-  ;;
-  linux* | k*bsd*-gnu)
-    link_all_deplibs_CXX=no
-  ;;
-  *)
-    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  ;;
-  esac
-  exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
-
-{ echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
-echo "${ECHO_T}$ld_shlibs_CXX" >&6; }
-test "$ld_shlibs_CXX" = no && can_build_shared=no
-
-#
-# 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 "$enable_shared" = yes && test "$GCC" = yes; 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.
-      { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
-echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; }
-      $rm conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } 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:$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=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-        then
-         archive_cmds_need_lc_CXX=no
-        else
-         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*
-      { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5
-echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6; }
-      ;;
-    esac
-  fi
-  ;;
-esac
-
-{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
-echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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
-  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
-  need_lib_prefix=no
-  need_version=no
-  hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; 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
-    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
-    # soname into executable. Probably we can add versioning support to
-    # collect2, so additional links can be useful in future.
-    if test "$aix_use_runtimelinking" = yes; then
-      # 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}'
-    else
-      # 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'
-    fi
-    shlibpath_var=LIBPATH
-  fi
-  ;;
-
-amigaos*)
-  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=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $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'
-  ;;
-
-beos*)
-  library_names_spec='${libname}${shared_ext}'
-  dynamic_linker="$host_os ld.so"
-  shlibpath_var=LIBRARY_PATH
-  ;;
-
-bsdi[45]*)
-  version_type=linux
-  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*)
-  version_type=windows
-  shrext_cmds=".dll"
-  need_version=no
-  need_lib_prefix=no
-
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32*)
-    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'
-    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="/usr/lib /lib/w32api /lib /usr/local/lib"
-      ;;
-    mingw*)
-      # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        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
-      ;;
-    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
-    ;;
-
-  *)
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
-    ;;
-  esac
-  dynamic_linker='Win32 ld.exe'
-  # 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}${versuffix}$shared_ext ${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
-  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
-  ;;
-
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
-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[123]*) 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} $libname${shared_ext}'
-      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
-  ;;
-
-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
-  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 "X$HPUX_IA64_MODE" = X32; then
-      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
-    else
-      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
-    fi
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-   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'
-  ;;
-
-interix[3-9]*)
-  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'
-  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 "$lt_cv_prog_gnu_ld" = yes; then
-               version_type=linux
-       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
-  ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-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'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  # 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
-
-  # Append ld.so.conf contents 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;/^$/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
-  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=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=yes
-  ;;
-
-openbsd*)
-  version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
-  need_lib_prefix=no
-  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-  case $host_os in
-    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
-    *)                         need_version=no  ;;
-  esac
-  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
-  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    case $host_os in
-      openbsd2.[89] | openbsd2.[89].*)
-       shlibpath_overrides_runpath=no
-       ;;
-      *)
-       shlibpath_overrides_runpath=yes
-       ;;
-      esac
-  else
-    shlibpath_overrides_runpath=yes
-  fi
-  ;;
-
-os2*)
-  libname_spec='$name'
-  shrext_cmds=".dll"
-  need_lib_prefix=no
-  library_names_spec='$libname${shared_ext} $libname.a'
-  dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
-  ;;
-
-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
-  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 "$with_gnu_ld" = yes; then
-    need_lib_prefix=no
-  fi
-  need_version=yes
-  ;;
-
-sysv4 | sysv4.3*)
-  version_type=linux
-  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
-      export_dynamic_flag_spec='${wl}-Blargedynsym'
-      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
-    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=freebsd-elf
-  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
-  hardcode_into_libs=yes
-  if test "$with_gnu_ld" = yes; then
-    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
-    shlibpath_overrides_runpath=no
-  else
-    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
-    shlibpath_overrides_runpath=yes
-    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'
-  ;;
-
-uts4*)
-  version_type=linux
-  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
-{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-echo "${ECHO_T}$dynamic_linker" >&6; }
-test "$dynamic_linker" = no && can_build_shared=no
-
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec"
-fi
-
-sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec"
-fi
-
-sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
-  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
-echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; }
-hardcode_action_CXX=
-if test -n "$hardcode_libdir_flag_spec_CXX" || \
-   test -n "$runpath_var_CXX" || \
-   test "X$hardcode_automatic_CXX" = "Xyes" ; then
-
-  # We can hardcode non-existant directories.
-  if test "$hardcode_direct_CXX" != no &&
-     # 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 "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
-     test "$hardcode_minus_L_CXX" != no; 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
-{ echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5
-echo "${ECHO_T}$hardcode_action_CXX" >&6; }
-
-if test "$hardcode_action_CXX" = relink; then
-  # Fast installation is not supported
-  enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
-  # Fast installation is not necessary
-  enable_fast_install=needless
-fi
-
-
-# The else clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
-  # See if we are running on zsh, and set the options which allow our commands through
-  # without removal of \ escapes.
-  if test -n "${ZSH_VERSION+set}" ; then
-    setopt NO_GLOB_SUBST
-  fi
-  # Now quote all the things that may contain metacharacters while being
-  # careful not to overquote the AC_SUBSTed values.  We take copies of the
-  # variables and quote the copies for generation of the libtool script.
-  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
-    SED SHELL STRIP \
-    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
-    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
-    deplibs_check_method reload_flag reload_cmds need_locks \
-    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
-    lt_cv_sys_global_symbol_to_c_name_address \
-    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
-    old_postinstall_cmds old_postuninstall_cmds \
-    compiler_CXX \
-    CC_CXX \
-    LD_CXX \
-    lt_prog_compiler_wl_CXX \
-    lt_prog_compiler_pic_CXX \
-    lt_prog_compiler_static_CXX \
-    lt_prog_compiler_no_builtin_flag_CXX \
-    export_dynamic_flag_spec_CXX \
-    thread_safe_flag_spec_CXX \
-    whole_archive_flag_spec_CXX \
-    enable_shared_with_static_runtimes_CXX \
-    old_archive_cmds_CXX \
-    old_archive_from_new_cmds_CXX \
-    predep_objects_CXX \
-    postdep_objects_CXX \
-    predeps_CXX \
-    postdeps_CXX \
-    compiler_lib_search_path_CXX \
-    compiler_lib_search_dirs_CXX \
-    archive_cmds_CXX \
-    archive_expsym_cmds_CXX \
-    postinstall_cmds_CXX \
-    postuninstall_cmds_CXX \
-    old_archive_from_expsyms_cmds_CXX \
-    allow_undefined_flag_CXX \
-    no_undefined_flag_CXX \
-    export_symbols_cmds_CXX \
-    hardcode_libdir_flag_spec_CXX \
-    hardcode_libdir_flag_spec_ld_CXX \
-    hardcode_libdir_separator_CXX \
-    hardcode_automatic_CXX \
-    module_cmds_CXX \
-    module_expsym_cmds_CXX \
-    lt_cv_prog_compiler_c_o_CXX \
-    fix_srcfile_path_CXX \
-    exclude_expsyms_CXX \
-    include_expsyms_CXX; do
-
-    case $var in
-    old_archive_cmds_CXX | \
-    old_archive_from_new_cmds_CXX | \
-    archive_cmds_CXX | \
-    archive_expsym_cmds_CXX | \
-    module_cmds_CXX | \
-    module_expsym_cmds_CXX | \
-    old_archive_from_expsyms_cmds_CXX | \
-    export_symbols_cmds_CXX | \
-    extract_expsyms_cmds | reload_cmds | finish_cmds | \
-    postinstall_cmds | postuninstall_cmds | \
-    old_postinstall_cmds | old_postuninstall_cmds | \
-    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
-      # Double-quote double-evaled strings.
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
-      ;;
-    *)
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
-      ;;
-    esac
-  done
-
-  case $lt_echo in
-  *'\$0 --fallback-echo"')
-    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
-    ;;
-  esac
-
-cfgfile="$ofile"
-
-  cat <<__EOF__ >> "$cfgfile"
-# ### BEGIN LIBTOOL TAG CONFIG: $tagname
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# 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
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# 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
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A C compiler.
-LTCC=$lt_LTCC
-
-# LTCC compiler flags.
-LTCFLAGS=$lt_LTCFLAGS
-
-# A language-specific compiler.
-CC=$lt_compiler_CXX
-
-# Is the compiler the GNU C compiler?
-with_gcc=$GCC_CXX
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# The linker used to build libraries.
-LD=$lt_LD_CXX
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$lt_STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl_CXX
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally ".so").
-shrext_cmds='$shrext_cmds'
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic_CXX
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# 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
-
-# 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
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static_CXX
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_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
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX
-
-# Library versioning type.
-version_type=$version_type
-
-# 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
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_old_archive_cmds_CXX
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# 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 and install a shared archive.
-archive_cmds=$lt_archive_cmds_CXX
-archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to build a loadable module (assumed same as above if empty)
-module_cmds=$lt_module_cmds_CXX
-module_expsym_cmds=$lt_module_expsym_cmds_CXX
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$lt_predep_objects_CXX
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$lt_postdep_objects_CXX
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$lt_predeps_CXX
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdeps=$lt_postdeps_CXX
-
-# The directories searched by this compiler when creating a shared
-# library
-compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_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
-
-# 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
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag_CXX
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag_CXX
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# 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 in a C name address pair
-global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action_CXX
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# 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
-
-# If ld is used when linking, flag to hardcode \$libdir into
-# a binary during linking. This must work even if \$libdir does
-# not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_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 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
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs_CXX
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
-
-# 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
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# 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
-
-# ### END LIBTOOL TAG CONFIG: $tagname
-
-__EOF__
-
-
-else
-  # If there is no Makefile yet, we rely on a make rule to execute
-  # `config.status --recheck' to rerun these tests and create the
-  # libtool script then.
-  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
-  if test -f "$ltmain_in"; then
-    test -f Makefile && make "$ltmain"
-  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
-
-CC=$lt_save_CC
-LDCXX=$LD
-LD=$lt_save_LD
-GCC=$lt_save_GCC
-with_gnu_ldcxx=$with_gnu_ld
-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
-
-       else
-         tagname=""
-       fi
-       ;;
-
-      F77)
-       if test -n "$F77" && test "X$F77" != "Xno"; then
-
-ac_ext=f
-ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
-ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_f77_compiler_gnu
-
-
-archive_cmds_need_lc_F77=no
-allow_undefined_flag_F77=
-always_export_symbols_F77=no
-archive_expsym_cmds_F77=
-export_dynamic_flag_spec_F77=
-hardcode_direct_F77=no
-hardcode_libdir_flag_spec_F77=
-hardcode_libdir_flag_spec_ld_F77=
-hardcode_libdir_separator_F77=
-hardcode_minus_L_F77=no
-hardcode_automatic_F77=no
-module_cmds_F77=
-module_expsym_cmds_F77=
-link_all_deplibs_F77=unknown
-old_archive_cmds_F77=$old_archive_cmds
-no_undefined_flag_F77=
-whole_archive_flag_spec_F77=
-enable_shared_with_static_runtimes_F77=no
-
-# Source file extension for f77 test sources.
-ac_ext=f
-
-# Object file extension for compiled f77 test sources.
-objext=o
-objext_F77=$objext
-
-# 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.
-
-# 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"
-CC=${F77-"f77"}
-compiler=$CC
-compiler_F77=$CC
-for cc_temp in $compiler""; do
-  case $cc_temp in
-    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-
-{ echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
-echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6; }
-{ echo "$as_me:$LINENO: result: $can_build_shared" >&5
-echo "${ECHO_T}$can_build_shared" >&6; }
-
-{ echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
-echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6; }
-test "$can_build_shared" = "no" && 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 "$enable_shared" = yes && enable_static=no
-  if test -n "$RANLIB"; then
-    archive_cmds="$archive_cmds~\$RANLIB \$lib"
-    postinstall_cmds='$RANLIB $lib'
-  fi
-  ;;
-aix[4-9]*)
-  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
-    test "$enable_shared" = yes && enable_static=no
-  fi
-  ;;
-esac
-{ echo "$as_me:$LINENO: result: $enable_shared" >&5
-echo "${ECHO_T}$enable_shared" >&6; }
-
-{ echo "$as_me:$LINENO: checking whether to build static libraries" >&5
-echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6; }
-# Make sure either enable_shared or enable_static is yes.
-test "$enable_shared" = yes || enable_static=yes
-{ echo "$as_me:$LINENO: result: $enable_static" >&5
-echo "${ECHO_T}$enable_static" >&6; }
-
-GCC_F77="$G77"
-LD_F77="$LD"
-
-lt_prog_compiler_wl_F77=
-lt_prog_compiler_pic_F77=
-lt_prog_compiler_static_F77=
-
-{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
-echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; }
-
-  if test "$GCC" = yes; then
-    lt_prog_compiler_wl_F77='-Wl,'
-    lt_prog_compiler_static_F77='-static'
-
-    case $host_os in
-      aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-       # AIX 5 now supports IA64 processor
-       lt_prog_compiler_static_F77='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      # 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_F77='-m68020 -resident32 -malways-restore-a4'
-      ;;
-
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-
-    mingw* | cygwin* | pw32* | os2*)
-      # 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_F77='-DDLL_EXPORT'
-      ;;
-
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      lt_prog_compiler_pic_F77='-fno-common'
-      ;;
-
-    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_F77=no
-      enable_shared=no
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-       lt_prog_compiler_pic_F77=-Kconform_pic
-      fi
-      ;;
-
-    hpux*)
-      # 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_F77='-fPIC'
-       ;;
-      esac
-      ;;
-
-    *)
-      lt_prog_compiler_pic_F77='-fPIC'
-      ;;
-    esac
-  else
-    # PORTME Check for flag to pass linker flags through the system compiler.
-    case $host_os in
-    aix*)
-      lt_prog_compiler_wl_F77='-Wl,'
-      if test "$host_cpu" = ia64; then
-       # AIX 5 now supports IA64 processor
-       lt_prog_compiler_static_F77='-Bstatic'
-      else
-       lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp'
-      fi
-      ;;
-      darwin*)
-        # PIC is the default on this platform
-        # Common symbols not allowed in MH_DYLIB files
-       case $cc_basename in
-         xlc*)
-         lt_prog_compiler_pic_F77='-qnocommon'
-         lt_prog_compiler_wl_F77='-Wl,'
-         ;;
-       esac
-       ;;
-
-    mingw* | cygwin* | pw32* | os2*)
-      # 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_F77='-DDLL_EXPORT'
-      ;;
-
-    hpux9* | hpux10* | hpux11*)
-      lt_prog_compiler_wl_F77='-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_F77='+Z'
-       ;;
-      esac
-      # Is there a better lt_prog_compiler_static that works with the bundled CC?
-      lt_prog_compiler_static_F77='${wl}-a ${wl}archive'
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      lt_prog_compiler_wl_F77='-Wl,'
-      # PIC (with -KPIC) is the default.
-      lt_prog_compiler_static_F77='-non_shared'
-      ;;
-
-    newsos6)
-      lt_prog_compiler_pic_F77='-KPIC'
-      lt_prog_compiler_static_F77='-Bstatic'
-      ;;
-
-    linux* | k*bsd*-gnu)
-      case $cc_basename in
-      icc* | ecc*)
-       lt_prog_compiler_wl_F77='-Wl,'
-       lt_prog_compiler_pic_F77='-KPIC'
-       lt_prog_compiler_static_F77='-static'
-        ;;
-      pgcc* | pgf77* | pgf90* | pgf95*)
-        # Portland Group compilers (*not* the Pentium gcc compiler,
-       # which looks to be a dead project)
-       lt_prog_compiler_wl_F77='-Wl,'
-       lt_prog_compiler_pic_F77='-fpic'
-       lt_prog_compiler_static_F77='-Bstatic'
-        ;;
-      ccc*)
-        lt_prog_compiler_wl_F77='-Wl,'
-        # All Alpha code is PIC.
-        lt_prog_compiler_static_F77='-non_shared'
-        ;;
-      *)
-        case `$CC -V 2>&1 | sed 5q` in
-       *Sun\ C*)
-         # Sun C 5.9
-         lt_prog_compiler_pic_F77='-KPIC'
-         lt_prog_compiler_static_F77='-Bstatic'
-         lt_prog_compiler_wl_F77='-Wl,'
-         ;;
-       *Sun\ F*)
-         # Sun Fortran 8.3 passes all unrecognized flags to the linker
-         lt_prog_compiler_pic_F77='-KPIC'
-         lt_prog_compiler_static_F77='-Bstatic'
-         lt_prog_compiler_wl_F77=''
-         ;;
-       esac
-       ;;
-      esac
-      ;;
-
-    osf3* | osf4* | osf5*)
-      lt_prog_compiler_wl_F77='-Wl,'
-      # All OSF/1 code is PIC.
-      lt_prog_compiler_static_F77='-non_shared'
-      ;;
-
-    rdos*)
-      lt_prog_compiler_static_F77='-non_shared'
-      ;;
-
-    solaris*)
-      lt_prog_compiler_pic_F77='-KPIC'
-      lt_prog_compiler_static_F77='-Bstatic'
-      case $cc_basename in
-      f77* | f90* | f95*)
-       lt_prog_compiler_wl_F77='-Qoption ld ';;
-      *)
-       lt_prog_compiler_wl_F77='-Wl,';;
-      esac
-      ;;
-
-    sunos4*)
-      lt_prog_compiler_wl_F77='-Qoption ld '
-      lt_prog_compiler_pic_F77='-PIC'
-      lt_prog_compiler_static_F77='-Bstatic'
-      ;;
-
-    sysv4 | sysv4.2uw2* | sysv4.3*)
-      lt_prog_compiler_wl_F77='-Wl,'
-      lt_prog_compiler_pic_F77='-KPIC'
-      lt_prog_compiler_static_F77='-Bstatic'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec ;then
-       lt_prog_compiler_pic_F77='-Kconform_pic'
-       lt_prog_compiler_static_F77='-Bstatic'
-      fi
-      ;;
-
-    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-      lt_prog_compiler_wl_F77='-Wl,'
-      lt_prog_compiler_pic_F77='-KPIC'
-      lt_prog_compiler_static_F77='-Bstatic'
-      ;;
-
-    unicos*)
-      lt_prog_compiler_wl_F77='-Wl,'
-      lt_prog_compiler_can_build_shared_F77=no
-      ;;
-
-    uts4*)
-      lt_prog_compiler_pic_F77='-pic'
-      lt_prog_compiler_static_F77='-Bstatic'
-      ;;
-
-    *)
-      lt_prog_compiler_can_build_shared_F77=no
-      ;;
-    esac
-  fi
-
-{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5
-echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6; }
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$lt_prog_compiler_pic_F77"; then
-
-{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5
-echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6; }
-if test "${lt_cv_prog_compiler_pic_works_F77+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_cv_prog_compiler_pic_works_F77=no
-  ac_outfile=conftest.$ac_objext
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$lt_prog_compiler_pic_F77"
-   # 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:14476: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&5
-   echo "$as_me:14480: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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_F77=yes
-     fi
-   fi
-   $rm conftest*
-
-fi
-{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works_F77" >&5
-echo "${ECHO_T}$lt_cv_prog_compiler_pic_works_F77" >&6; }
-
-if test x"$lt_cv_prog_compiler_pic_works_F77" = xyes; then
-    case $lt_prog_compiler_pic_F77 in
-     "" | " "*) ;;
-     *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;;
-     esac
-else
-    lt_prog_compiler_pic_F77=
-     lt_prog_compiler_can_build_shared_F77=no
-fi
-
-fi
-case $host_os in
-  # For platforms which do not support PIC, -DPIC is meaningless:
-  *djgpp*)
-    lt_prog_compiler_pic_F77=
-    ;;
-  *)
-    lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77"
-    ;;
-esac
-
-#
-# Check to make sure the static flag actually works.
-#
-wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\"
-{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
-echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; }
-if test "${lt_cv_prog_compiler_static_works_F77+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_cv_prog_compiler_static_works_F77=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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/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_F77=yes
-       fi
-     else
-       lt_cv_prog_compiler_static_works_F77=yes
-     fi
-   fi
-   $rm -r conftest*
-   LDFLAGS="$save_LDFLAGS"
-
-fi
-{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works_F77" >&5
-echo "${ECHO_T}$lt_cv_prog_compiler_static_works_F77" >&6; }
-
-if test x"$lt_cv_prog_compiler_static_works_F77" = xyes; then
-    :
-else
-    lt_prog_compiler_static_F77=
-fi
-
-
-{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
-echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; }
-if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_cv_prog_compiler_c_o_F77=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:14580: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>out/conftest.err)
-   ac_status=$?
-   cat out/conftest.err >&5
-   echo "$as_me:14584: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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_F77=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 ..
-   rmdir conftest
-   $rm conftest*
-
-fi
-{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5
-echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6; }
-
-
-hard_links="nottested"
-if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then
-  # do not overwrite the value of need_locks provided by the user
-  { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
-echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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
-  { echo "$as_me:$LINENO: result: $hard_links" >&5
-echo "${ECHO_T}$hard_links" >&6; }
-  if test "$hard_links" = no; then
-    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-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
-
-{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; }
-
-  runpath_var=
-  allow_undefined_flag_F77=
-  enable_shared_with_static_runtimes_F77=no
-  archive_cmds_F77=
-  archive_expsym_cmds_F77=
-  old_archive_From_new_cmds_F77=
-  old_archive_from_expsyms_cmds_F77=
-  export_dynamic_flag_spec_F77=
-  whole_archive_flag_spec_F77=
-  thread_safe_flag_spec_F77=
-  hardcode_libdir_flag_spec_F77=
-  hardcode_libdir_flag_spec_ld_F77=
-  hardcode_libdir_separator_F77=
-  hardcode_direct_F77=no
-  hardcode_minus_L_F77=no
-  hardcode_shlibpath_var_F77=unsupported
-  link_all_deplibs_F77=unknown
-  hardcode_automatic_F77=no
-  module_cmds_F77=
-  module_expsym_cmds_F77=
-  always_export_symbols_F77=no
-  export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  # include_expsyms should be a list of space-separated symbols to be *always*
-  # included in the symbol list
-  include_expsyms_F77=
-  # 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_F77='_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=
-  # Just being paranoid about ensuring that cc_basename is set.
-  for cc_temp in $compiler""; do
-  case $cc_temp in
-    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-  case $host_os in
-  cygwin* | mingw* | pw32*)
-    # 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 "$GCC" != yes; then
-      with_gnu_ld=no
-    fi
-    ;;
-  interix*)
-    # we just hope/assume this is gcc and not c89 (= MSVC++)
-    with_gnu_ld=yes
-    ;;
-  openbsd*)
-    with_gnu_ld=no
-    ;;
-  esac
-
-  ld_shlibs_F77=yes
-  if test "$with_gnu_ld" = yes; 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_F77='${wl}--rpath ${wl}$libdir'
-    export_dynamic_flag_spec_F77='${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_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-      else
-       whole_archive_flag_spec_F77=
-    fi
-    supports_anon_versioning=no
-    case `$LD -v 2>/dev/null` in
-      *\ [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 "$host_cpu" != ia64; then
-       ld_shlibs_F77=no
-       cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, 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 modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-EOF
-      fi
-      ;;
-
-    amigaos*)
-      archive_cmds_F77='$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_F77='-L$libdir'
-      hardcode_minus_L_F77=yes
-
-      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
-      # that the semantics of dynamic libraries on AmigaOS, at least up
-      # to version 4, is to share data among multiple programs linked
-      # with the same dynamic library.  Since this doesn't match the
-      # behavior of shared libraries on other platforms, we can't use
-      # them.
-      ld_shlibs_F77=no
-      ;;
-
-    beos*)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-       allow_undefined_flag_F77=unsupported
-       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
-       # support --undefined.  This deserves some investigation.  FIXME
-       archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-      else
-       ld_shlibs_F77=no
-      fi
-      ;;
-
-    cygwin* | mingw* | pw32*)
-      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless,
-      # as there is no search path for DLLs.
-      hardcode_libdir_flag_spec_F77='-L$libdir'
-      allow_undefined_flag_F77=unsupported
-      always_export_symbols_F77=no
-      enable_shared_with_static_runtimes_F77=yes
-      export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
-
-      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-        archive_cmds_F77='$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 (1st line
-       # is EXPORTS), use it as is; otherwise, prepend...
-       archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; 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_F77=no
-      fi
-      ;;
-
-    interix[3-9]*)
-      hardcode_direct_F77=no
-      hardcode_shlibpath_var_F77=no
-      hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
-      export_dynamic_flag_spec_F77='${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_F77='$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_F77='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* | k*bsd*-gnu)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-       tmp_addflag=
-       case $cc_basename,$host_cpu in
-       pgcc*)                          # Portland Group C compiler
-         whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-         tmp_addflag=' $pic_flag'
-         ;;
-       pgf77* | pgf90* | pgf95*)       # Portland Group f77 and f90 compilers
-         whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$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' ;;
-       esac
-       case `$CC -V 2>&1 | sed 5q` in
-       *Sun\ C*)                       # Sun C 5.9
-         whole_archive_flag_spec_F77='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-         tmp_sharedflag='-G' ;;
-       *Sun\ F*)                       # Sun Fortran 8.3
-         tmp_sharedflag='-G' ;;
-       *)
-         tmp_sharedflag='-shared' ;;
-       esac
-       archive_cmds_F77='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
-       if test $supports_anon_versioning = yes; then
-         archive_expsym_cmds_F77='$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
-       link_all_deplibs_F77=no
-      else
-       ld_shlibs_F77=no
-      fi
-      ;;
-
-    netbsd* | netbsdelf*-gnu)
-      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-       archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
-       wlarc=
-      else
-       archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       archive_expsym_cmds_F77='$CC -shared $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_F77=no
-       cat <<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.
-
-EOF
-      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-       archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-       ld_shlibs_F77=no
-      fi
-      ;;
-
-    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
-      case `$LD -v 2>&1` in
-        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
-       ld_shlibs_F77=no
-       cat <<_LT_EOF 1>&2
-
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-*** 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
-       ;;
-       *)
-         if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-           hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
-           archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
-           archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
-         else
-           ld_shlibs_F77=no
-         fi
-       ;;
-      esac
-      ;;
-
-    sunos4*)
-      archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      wlarc=
-      hardcode_direct_F77=yes
-      hardcode_shlibpath_var_F77=no
-      ;;
-
-    *)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-       archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-       ld_shlibs_F77=no
-      fi
-      ;;
-    esac
-
-    if test "$ld_shlibs_F77" = no; then
-      runpath_var=
-      hardcode_libdir_flag_spec_F77=
-      export_dynamic_flag_spec_F77=
-      whole_archive_flag_spec_F77=
-    fi
-  else
-    # PORTME fill in a description of your system's linker (not GNU ld)
-    case $host_os in
-    aix3*)
-      allow_undefined_flag_F77=unsupported
-      always_export_symbols_F77=yes
-      archive_expsym_cmds_F77='$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_F77=yes
-      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
-       # Neither direct hardcoding nor static linking is supported with a
-       # broken collect2.
-       hardcode_direct_F77=unsupported
-      fi
-      ;;
-
-    aix[4-9]*)
-      if test "$host_cpu" = ia64; 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 AIX nm, but means don't demangle with GNU nm
-       if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
-         export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
-       else
-         export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | 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
-       # need to do runtime linking.
-       case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
-         for ld_flag in $LDFLAGS; do
-         if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
-           aix_use_runtimelinking=yes
-           break
-         fi
-         done
-         ;;
-       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_F77=''
-      hardcode_direct_F77=yes
-      hardcode_libdir_separator_F77=':'
-      link_all_deplibs_F77=yes
-
-      if test "$GCC" = yes; 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_F77=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_F77=yes
-         hardcode_libdir_flag_spec_F77='-L$libdir'
-         hardcode_libdir_separator_F77=
-         fi
-         ;;
-       esac
-       shared_flag='-shared'
-       if test "$aix_use_runtimelinking" = yes; then
-         shared_flag="$shared_flag "'${wl}-G'
-       fi
-      else
-       # not using gcc
-       if test "$host_cpu" = ia64; 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 "$aix_use_runtimelinking" = yes; then
-           shared_flag='${wl}-G'
-         else
-           shared_flag='${wl}-bM:SRE'
-         fi
-       fi
-      fi
-
-      # 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_F77=yes
-      if test "$aix_use_runtimelinking" = yes; then
-       # Warning - without using the other runtime loading flags (-brtl),
-       # -berok will link without error, but may produce a broken library.
-       allow_undefined_flag_F77='-berok'
-       # Determine the default libpath from the value encoded in an empty executable.
-       cat >conftest.$ac_ext <<_ACEOF
-      program main
-
-      end
-_ACEOF
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_f77_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-       /^0/ {
-           s/^0  *\(.*\)$/\1/
-           p
-       }
-    }'
-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 "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
-       hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
-       archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-       else
-       if test "$host_cpu" = ia64; then
-         hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib'
-         allow_undefined_flag_F77="-z nodefs"
-         archive_expsym_cmds_F77="\$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.
-        cat >conftest.$ac_ext <<_ACEOF
-      program main
-
-      end
-_ACEOF
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_f77_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-       /^0/ {
-           s/^0  *\(.*\)$/\1/
-           p
-       }
-    }'
-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 "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
-        hardcode_libdir_flag_spec_F77='${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_F77=' ${wl}-bernotok'
-         allow_undefined_flag_F77=' ${wl}-berok'
-         # Exported symbols can be pulled into shared objects from archives
-         whole_archive_flag_spec_F77='$convenience'
-         archive_cmds_need_lc_F77=yes
-         # This is similar to how AIX traditionally builds its shared libraries.
-         archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-       fi
-      fi
-      ;;
-
-    amigaos*)
-      archive_cmds_F77='$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_F77='-L$libdir'
-      hardcode_minus_L_F77=yes
-      # see comment about different semantics on the GNU ld section
-      ld_shlibs_F77=no
-      ;;
-
-    bsdi[45]*)
-      export_dynamic_flag_spec_F77=-rdynamic
-      ;;
-
-    cygwin* | mingw* | pw32*)
-      # 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.
-      hardcode_libdir_flag_spec_F77=' '
-      allow_undefined_flag_F77=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_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
-      # The linker will automatically build a .lib file if we build a DLL.
-      old_archive_From_new_cmds_F77='true'
-      # FIXME: Should let the user specify the lib program.
-      old_archive_cmds_F77='lib -OUT:$oldlib$oldobjs$old_deplibs'
-      fix_srcfile_path_F77='`cygpath -w "$srcfile"`'
-      enable_shared_with_static_runtimes_F77=yes
-      ;;
-
-    darwin* | rhapsody*)
-      case $host_os in
-        rhapsody* | darwin1.[012])
-         allow_undefined_flag_F77='${wl}-undefined ${wl}suppress'
-         ;;
-       *) # Darwin 1.3 on
-         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
-           allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-         else
-           case ${MACOSX_DEPLOYMENT_TARGET} in
-             10.[012])
-               allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-               ;;
-             10.*)
-               allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup'
-               ;;
-           esac
-         fi
-         ;;
-      esac
-      archive_cmds_need_lc_F77=no
-      hardcode_direct_F77=no
-      hardcode_automatic_F77=yes
-      hardcode_shlibpath_var_F77=unsupported
-      whole_archive_flag_spec_F77=''
-      link_all_deplibs_F77=yes
-    if test "$GCC" = yes ; then
-       output_verbose_link_cmd='echo'
-        archive_cmds_F77="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-        module_cmds_F77="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-        archive_expsym_cmds_F77="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_F77="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
-      case $cc_basename in
-        xlc*)
-         output_verbose_link_cmd='echo'
-         archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring'
-         module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-         archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          ;;
-       *)
-         ld_shlibs_F77=no
-          ;;
-      esac
-    fi
-      ;;
-
-    dgux*)
-      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_libdir_flag_spec_F77='-L$libdir'
-      hardcode_shlibpath_var_F77=no
-      ;;
-
-    freebsd1*)
-      ld_shlibs_F77=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_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
-      hardcode_libdir_flag_spec_F77='-R$libdir'
-      hardcode_direct_F77=yes
-      hardcode_shlibpath_var_F77=no
-      ;;
-
-    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
-      archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_direct_F77=yes
-      hardcode_minus_L_F77=yes
-      hardcode_shlibpath_var_F77=no
-      ;;
-
-    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-    freebsd* | dragonfly*)
-      archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-      hardcode_libdir_flag_spec_F77='-R$libdir'
-      hardcode_direct_F77=yes
-      hardcode_shlibpath_var_F77=no
-      ;;
-
-    hpux9*)
-      if test "$GCC" = yes; then
-       archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      else
-       archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      fi
-      hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
-      hardcode_libdir_separator_F77=:
-      hardcode_direct_F77=yes
-
-      # hardcode_minus_L: Not really in the search PATH,
-      # but as the default location of the library.
-      hardcode_minus_L_F77=yes
-      export_dynamic_flag_spec_F77='${wl}-E'
-      ;;
-
-    hpux10*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-       archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-      else
-       archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      if test "$with_gnu_ld" = no; then
-       hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
-       hardcode_libdir_separator_F77=:
-
-       hardcode_direct_F77=yes
-       export_dynamic_flag_spec_F77='${wl}-E'
-
-       # hardcode_minus_L: Not really in the search PATH,
-       # but as the default location of the library.
-       hardcode_minus_L_F77=yes
-      fi
-      ;;
-
-    hpux11*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-       case $host_cpu in
-       hppa*64*)
-         archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       ia64*)
-         archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       *)
-         archive_cmds_F77='$CC -shared -fPIC ${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_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       ia64*)
-         archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       *)
-         archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       esac
-      fi
-      if test "$with_gnu_ld" = no; then
-       hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
-       hardcode_libdir_separator_F77=:
-
-       case $host_cpu in
-       hppa*64*|ia64*)
-         hardcode_libdir_flag_spec_ld_F77='+b $libdir'
-         hardcode_direct_F77=no
-         hardcode_shlibpath_var_F77=no
-         ;;
-       *)
-         hardcode_direct_F77=yes
-         export_dynamic_flag_spec_F77='${wl}-E'
-
-         # hardcode_minus_L: Not really in the search PATH,
-         # but as the default location of the library.
-         hardcode_minus_L_F77=yes
-         ;;
-       esac
-      fi
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      if test "$GCC" = yes; then
-       archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-       archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-       hardcode_libdir_flag_spec_ld_F77='-rpath $libdir'
-      fi
-      hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator_F77=:
-      link_all_deplibs_F77=yes
-      ;;
-
-    netbsd* | netbsdelf*-gnu)
-      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-       archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
-      else
-       archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
-      fi
-      hardcode_libdir_flag_spec_F77='-R$libdir'
-      hardcode_direct_F77=yes
-      hardcode_shlibpath_var_F77=no
-      ;;
-
-    newsos6)
-      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_direct_F77=yes
-      hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator_F77=:
-      hardcode_shlibpath_var_F77=no
-      ;;
-
-    openbsd*)
-      if test -f /usr/libexec/ld.so; then
-       hardcode_direct_F77=yes
-       hardcode_shlibpath_var_F77=no
-       if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-         archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-         archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
-         hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
-         export_dynamic_flag_spec_F77='${wl}-E'
-       else
-         case $host_os in
-          openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
-            archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-            hardcode_libdir_flag_spec_F77='-R$libdir'
-            ;;
-          *)
-            archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-            hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
-            ;;
-         esac
-        fi
-      else
-       ld_shlibs_F77=no
-      fi
-      ;;
-
-    os2*)
-      hardcode_libdir_flag_spec_F77='-L$libdir'
-      hardcode_minus_L_F77=yes
-      allow_undefined_flag_F77=unsupported
-      archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
-      old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
-      ;;
-
-    osf3*)
-      if test "$GCC" = yes; then
-       allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
-       archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-       allow_undefined_flag_F77=' -expect_unresolved \*'
-       archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-      fi
-      hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator_F77=:
-      ;;
-
-    osf4* | osf5*)     # as osf3* with the addition of -msym flag
-      if test "$GCC" = yes; then
-       allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
-       archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-       hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
-      else
-       allow_undefined_flag_F77=' -expect_unresolved \*'
-       archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-       archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
-       $LD -shared${allow_undefined_flag} -input $lib.exp $linker_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_F77='-rpath $libdir'
-      fi
-      hardcode_libdir_separator_F77=:
-      ;;
-
-    solaris*)
-      no_undefined_flag_F77=' -z text'
-      if test "$GCC" = yes; then
-       wlarc='${wl}'
-       archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-       archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-         $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
-      else
-       wlarc=''
-       archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-       archive_expsym_cmds_F77='$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'
-      fi
-      hardcode_libdir_flag_spec_F77='-R$libdir'
-      hardcode_shlibpath_var_F77=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 "$GCC" = yes; then
-         whole_archive_flag_spec_F77='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
-       else
-         whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract'
-       fi
-       ;;
-      esac
-      link_all_deplibs_F77=yes
-      ;;
-
-    sunos4*)
-      if test "x$host_vendor" = xsequent; then
-       # Use $CC to link under sequent, because it throws in some extra .o
-       # files that make .init and .fini sections work.
-       archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-       archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      hardcode_libdir_flag_spec_F77='-L$libdir'
-      hardcode_direct_F77=yes
-      hardcode_minus_L_F77=yes
-      hardcode_shlibpath_var_F77=no
-      ;;
-
-    sysv4)
-      case $host_vendor in
-       sni)
-         archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-         hardcode_direct_F77=yes # is this really true???
-       ;;
-       siemens)
-         ## LD is ld it makes a PLAMLIB
-         ## CC just makes a GrossModule.
-         archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-         reload_cmds_F77='$CC -r -o $output$reload_objs'
-         hardcode_direct_F77=no
-        ;;
-       motorola)
-         archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-         hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie
-       ;;
-      esac
-      runpath_var='LD_RUN_PATH'
-      hardcode_shlibpath_var_F77=no
-      ;;
-
-    sysv4.3*)
-      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_shlibpath_var_F77=no
-      export_dynamic_flag_spec_F77='-Bexport'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-       archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-       hardcode_shlibpath_var_F77=no
-       runpath_var=LD_RUN_PATH
-       hardcode_runpath_var=yes
-       ld_shlibs_F77=yes
-      fi
-      ;;
-
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
-      no_undefined_flag_F77='${wl}-z,text'
-      archive_cmds_need_lc_F77=no
-      hardcode_shlibpath_var_F77=no
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-       archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-       archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      ;;
-
-    sysv5* | sco3.2v5* | sco5v6*)
-      # Note: We can NOT 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_F77='${wl}-z,text'
-      allow_undefined_flag_F77='${wl}-z,nodefs'
-      archive_cmds_need_lc_F77=no
-      hardcode_shlibpath_var_F77=no
-      hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
-      hardcode_libdir_separator_F77=':'
-      link_all_deplibs_F77=yes
-      export_dynamic_flag_spec_F77='${wl}-Bexport'
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-       archive_cmds_F77='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-       archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-       archive_cmds_F77='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-       archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      ;;
-
-    uts4*)
-      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_libdir_flag_spec_F77='-L$libdir'
-      hardcode_shlibpath_var_F77=no
-      ;;
-
-    *)
-      ld_shlibs_F77=no
-      ;;
-    esac
-  fi
-
-{ echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5
-echo "${ECHO_T}$ld_shlibs_F77" >&6; }
-test "$ld_shlibs_F77" = no && can_build_shared=no
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$archive_cmds_need_lc_F77" in
-x|xyes)
-  # Assume -lc should be added
-  archive_cmds_need_lc_F77=yes
-
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
-    case $archive_cmds_F77 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.
-      { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
-echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; }
-      $rm conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$lt_prog_compiler_wl_F77
-       pic_flag=$lt_prog_compiler_pic_F77
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$allow_undefined_flag_F77
-        allow_undefined_flag_F77=
-        if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
-  (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-        then
-         archive_cmds_need_lc_F77=no
-        else
-         archive_cmds_need_lc_F77=yes
-        fi
-        allow_undefined_flag_F77=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $rm conftest*
-      { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5
-echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6; }
-      ;;
-    esac
-  fi
-  ;;
-esac
-
-{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
-echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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
-  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
-  need_lib_prefix=no
-  need_version=no
-  hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; 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
-    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
-    # soname into executable. Probably we can add versioning support to
-    # collect2, so additional links can be useful in future.
-    if test "$aix_use_runtimelinking" = yes; then
-      # 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}'
-    else
-      # 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'
-    fi
-    shlibpath_var=LIBPATH
-  fi
-  ;;
-
-amigaos*)
-  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=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $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'
-  ;;
-
-beos*)
-  library_names_spec='${libname}${shared_ext}'
-  dynamic_linker="$host_os ld.so"
-  shlibpath_var=LIBRARY_PATH
-  ;;
-
-bsdi[45]*)
-  version_type=linux
-  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*)
-  version_type=windows
-  shrext_cmds=".dll"
-  need_version=no
-  need_lib_prefix=no
-
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32*)
-    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'
-    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="/usr/lib /lib/w32api /lib /usr/local/lib"
-      ;;
-    mingw*)
-      # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        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
-      ;;
-    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
-    ;;
-
-  *)
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
-    ;;
-  esac
-  dynamic_linker='Win32 ld.exe'
-  # 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}${versuffix}$shared_ext ${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
-  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
-  ;;
-
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
-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[123]*) 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} $libname${shared_ext}'
-      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
-  ;;
-
-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
-  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 "X$HPUX_IA64_MODE" = X32; then
-      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
-    else
-      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
-    fi
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-   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'
-  ;;
-
-interix[3-9]*)
-  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'
-  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 "$lt_cv_prog_gnu_ld" = yes; then
-               version_type=linux
-       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
-  ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-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'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  # 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
-
-  # Append ld.so.conf contents 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;/^$/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
-  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=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=yes
-  ;;
-
-openbsd*)
-  version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
-  need_lib_prefix=no
-  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-  case $host_os in
-    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
-    *)                         need_version=no  ;;
-  esac
-  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
-  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    case $host_os in
-      openbsd2.[89] | openbsd2.[89].*)
-       shlibpath_overrides_runpath=no
-       ;;
-      *)
-       shlibpath_overrides_runpath=yes
-       ;;
-      esac
-  else
-    shlibpath_overrides_runpath=yes
-  fi
-  ;;
-
-os2*)
-  libname_spec='$name'
-  shrext_cmds=".dll"
-  need_lib_prefix=no
-  library_names_spec='$libname${shared_ext} $libname.a'
-  dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
-  ;;
-
-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
-  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 "$with_gnu_ld" = yes; then
-    need_lib_prefix=no
-  fi
-  need_version=yes
-  ;;
-
-sysv4 | sysv4.3*)
-  version_type=linux
-  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
-      export_dynamic_flag_spec='${wl}-Blargedynsym'
-      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
-    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=freebsd-elf
-  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
-  hardcode_into_libs=yes
-  if test "$with_gnu_ld" = yes; then
-    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
-    shlibpath_overrides_runpath=no
-  else
-    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
-    shlibpath_overrides_runpath=yes
-    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'
-  ;;
-
-uts4*)
-  version_type=linux
-  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
-{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-echo "${ECHO_T}$dynamic_linker" >&6; }
-test "$dynamic_linker" = no && can_build_shared=no
-
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec"
-fi
-
-sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec"
-fi
-
-sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
-  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
-echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; }
-hardcode_action_F77=
-if test -n "$hardcode_libdir_flag_spec_F77" || \
-   test -n "$runpath_var_F77" || \
-   test "X$hardcode_automatic_F77" = "Xyes" ; then
-
-  # We can hardcode non-existant directories.
-  if test "$hardcode_direct_F77" != no &&
-     # 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 "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no &&
-     test "$hardcode_minus_L_F77" != no; then
-    # Linking always hardcodes the temporary library directory.
-    hardcode_action_F77=relink
-  else
-    # We can link without hardcoding, and we can hardcode nonexisting dirs.
-    hardcode_action_F77=immediate
-  fi
-else
-  # We cannot hardcode anything, or else we can only hardcode existing
-  # directories.
-  hardcode_action_F77=unsupported
-fi
-{ echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5
-echo "${ECHO_T}$hardcode_action_F77" >&6; }
-
-if test "$hardcode_action_F77" = relink; then
-  # Fast installation is not supported
-  enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
-  # Fast installation is not necessary
-  enable_fast_install=needless
-fi
-
-
-# The else clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
-  # See if we are running on zsh, and set the options which allow our commands through
-  # without removal of \ escapes.
-  if test -n "${ZSH_VERSION+set}" ; then
-    setopt NO_GLOB_SUBST
-  fi
-  # Now quote all the things that may contain metacharacters while being
-  # careful not to overquote the AC_SUBSTed values.  We take copies of the
-  # variables and quote the copies for generation of the libtool script.
-  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
-    SED SHELL STRIP \
-    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
-    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
-    deplibs_check_method reload_flag reload_cmds need_locks \
-    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
-    lt_cv_sys_global_symbol_to_c_name_address \
-    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
-    old_postinstall_cmds old_postuninstall_cmds \
-    compiler_F77 \
-    CC_F77 \
-    LD_F77 \
-    lt_prog_compiler_wl_F77 \
-    lt_prog_compiler_pic_F77 \
-    lt_prog_compiler_static_F77 \
-    lt_prog_compiler_no_builtin_flag_F77 \
-    export_dynamic_flag_spec_F77 \
-    thread_safe_flag_spec_F77 \
-    whole_archive_flag_spec_F77 \
-    enable_shared_with_static_runtimes_F77 \
-    old_archive_cmds_F77 \
-    old_archive_from_new_cmds_F77 \
-    predep_objects_F77 \
-    postdep_objects_F77 \
-    predeps_F77 \
-    postdeps_F77 \
-    compiler_lib_search_path_F77 \
-    compiler_lib_search_dirs_F77 \
-    archive_cmds_F77 \
-    archive_expsym_cmds_F77 \
-    postinstall_cmds_F77 \
-    postuninstall_cmds_F77 \
-    old_archive_from_expsyms_cmds_F77 \
-    allow_undefined_flag_F77 \
-    no_undefined_flag_F77 \
-    export_symbols_cmds_F77 \
-    hardcode_libdir_flag_spec_F77 \
-    hardcode_libdir_flag_spec_ld_F77 \
-    hardcode_libdir_separator_F77 \
-    hardcode_automatic_F77 \
-    module_cmds_F77 \
-    module_expsym_cmds_F77 \
-    lt_cv_prog_compiler_c_o_F77 \
-    fix_srcfile_path_F77 \
-    exclude_expsyms_F77 \
-    include_expsyms_F77; do
-
-    case $var in
-    old_archive_cmds_F77 | \
-    old_archive_from_new_cmds_F77 | \
-    archive_cmds_F77 | \
-    archive_expsym_cmds_F77 | \
-    module_cmds_F77 | \
-    module_expsym_cmds_F77 | \
-    old_archive_from_expsyms_cmds_F77 | \
-    export_symbols_cmds_F77 | \
-    extract_expsyms_cmds | reload_cmds | finish_cmds | \
-    postinstall_cmds | postuninstall_cmds | \
-    old_postinstall_cmds | old_postuninstall_cmds | \
-    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
-      # Double-quote double-evaled strings.
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
-      ;;
-    *)
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
-      ;;
-    esac
-  done
-
-  case $lt_echo in
-  *'\$0 --fallback-echo"')
-    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
-    ;;
-  esac
-
-cfgfile="$ofile"
-
-  cat <<__EOF__ >> "$cfgfile"
-# ### BEGIN LIBTOOL TAG CONFIG: $tagname
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$archive_cmds_need_lc_F77
-
-# Whether or not to disallow shared libs when runtime libs are static
-allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# 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
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A C compiler.
-LTCC=$lt_LTCC
-
-# LTCC compiler flags.
-LTCFLAGS=$lt_LTCFLAGS
-
-# A language-specific compiler.
-CC=$lt_compiler_F77
-
-# Is the compiler the GNU C compiler?
-with_gcc=$GCC_F77
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# The linker used to build libraries.
-LD=$lt_LD_F77
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$lt_STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl_F77
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally ".so").
-shrext_cmds='$shrext_cmds'
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic_F77
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# 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
-
-# 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
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static_F77
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77
-
-# Library versioning type.
-version_type=$version_type
-
-# 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
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_old_archive_cmds_F77
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77
-
-# Commands used to build and install a shared archive.
-archive_cmds=$lt_archive_cmds_F77
-archive_expsym_cmds=$lt_archive_expsym_cmds_F77
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to build a loadable module (assumed same as above if empty)
-module_cmds=$lt_module_cmds_F77
-module_expsym_cmds=$lt_module_expsym_cmds_F77
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$lt_predep_objects_F77
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$lt_postdep_objects_F77
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$lt_predeps_F77
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdeps=$lt_postdeps_F77
-
-# The directories searched by this compiler when creating a shared
-# library
-compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_F77
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_compiler_lib_search_path_F77
-
-# 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
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag_F77
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag_F77
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# 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 in a C name address pair
-global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action_F77
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# 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_F77
-
-# If ld is used when linking, flag to hardcode \$libdir into
-# a binary during linking. This must work even if \$libdir does
-# not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77
-
-# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$hardcode_direct_F77
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$hardcode_minus_L_F77
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var_F77
-
-# 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_F77
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs_F77
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$always_export_symbols_F77
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_export_symbols_cmds_F77
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_exclude_expsyms_F77
-
-# Symbols that must always be exported.
-include_expsyms=$lt_include_expsyms_F77
-
-# ### END LIBTOOL TAG CONFIG: $tagname
-
-__EOF__
-
-
-else
-  # If there is no Makefile yet, we rely on a make rule to execute
-  # `config.status --recheck' to rerun these tests and create the
-  # libtool script then.
-  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
-  if test -f "$ltmain_in"; then
-    test -f Makefile && make "$ltmain"
-  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
-
-CC="$lt_save_CC"
-
-       else
-         tagname=""
-       fi
-       ;;
-
-      GCJ)
-       if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
-
-
-# Source file extension for Java test sources.
-ac_ext=java
-
-# Object file extension for compiled Java test sources.
-objext=o
-objext_GCJ=$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.
-
-# 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"
-CC=${GCJ-"gcj"}
-compiler=$CC
-compiler_GCJ=$CC
-for cc_temp in $compiler""; do
-  case $cc_temp in
-    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-
-# GCJ did not exist at the time GCC didn't implicitly link libc in.
-archive_cmds_need_lc_GCJ=no
-
-old_archive_cmds_GCJ=$old_archive_cmds
-
-
-lt_prog_compiler_no_builtin_flag_GCJ=
-
-if test "$GCC" = yes; then
-  lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin'
-
-
-{ echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
-echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6; }
-if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&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"
-   # 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:16800: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&5
-   echo "$as_me:16804: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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
-{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
-echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6; }
-
-if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
-    lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions"
-else
-    :
-fi
-
-fi
-
-lt_prog_compiler_wl_GCJ=
-lt_prog_compiler_pic_GCJ=
-lt_prog_compiler_static_GCJ=
-
-{ echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
-echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6; }
-
-  if test "$GCC" = yes; then
-    lt_prog_compiler_wl_GCJ='-Wl,'
-    lt_prog_compiler_static_GCJ='-static'
-
-    case $host_os in
-      aix*)
-      # All AIX code is PIC.
-      if test "$host_cpu" = ia64; then
-       # AIX 5 now supports IA64 processor
-       lt_prog_compiler_static_GCJ='-Bstatic'
-      fi
-      ;;
-
-    amigaos*)
-      # 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_GCJ='-m68020 -resident32 -malways-restore-a4'
-      ;;
-
-    beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
-      # PIC is the default for these OSes.
-      ;;
-
-    mingw* | cygwin* | pw32* | os2*)
-      # 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
-
-      ;;
-
-    darwin* | rhapsody*)
-      # PIC is the default on this platform
-      # Common symbols not allowed in MH_DYLIB files
-      lt_prog_compiler_pic_GCJ='-fno-common'
-      ;;
-
-    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_GCJ=no
-      enable_shared=no
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-       lt_prog_compiler_pic_GCJ=-Kconform_pic
-      fi
-      ;;
-
-    hpux*)
-      # 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_GCJ='-fPIC'
-       ;;
-      esac
-      ;;
-
-    *)
-      lt_prog_compiler_pic_GCJ='-fPIC'
-      ;;
-    esac
-  else
-    # PORTME Check for flag to pass linker flags through the system compiler.
-    case $host_os in
-    aix*)
-      lt_prog_compiler_wl_GCJ='-Wl,'
-      if test "$host_cpu" = ia64; then
-       # AIX 5 now supports IA64 processor
-       lt_prog_compiler_static_GCJ='-Bstatic'
-      else
-       lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp'
-      fi
-      ;;
-      darwin*)
-        # PIC is the default on this platform
-        # Common symbols not allowed in MH_DYLIB files
-       case $cc_basename in
-         xlc*)
-         lt_prog_compiler_pic_GCJ='-qnocommon'
-         lt_prog_compiler_wl_GCJ='-Wl,'
-         ;;
-       esac
-       ;;
-
-    mingw* | cygwin* | pw32* | os2*)
-      # 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).
-
-      ;;
-
-    hpux9* | hpux10* | hpux11*)
-      lt_prog_compiler_wl_GCJ='-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_GCJ='+Z'
-       ;;
-      esac
-      # Is there a better lt_prog_compiler_static that works with the bundled CC?
-      lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive'
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      lt_prog_compiler_wl_GCJ='-Wl,'
-      # PIC (with -KPIC) is the default.
-      lt_prog_compiler_static_GCJ='-non_shared'
-      ;;
-
-    newsos6)
-      lt_prog_compiler_pic_GCJ='-KPIC'
-      lt_prog_compiler_static_GCJ='-Bstatic'
-      ;;
-
-    linux* | k*bsd*-gnu)
-      case $cc_basename in
-      icc* | ecc*)
-       lt_prog_compiler_wl_GCJ='-Wl,'
-       lt_prog_compiler_pic_GCJ='-KPIC'
-       lt_prog_compiler_static_GCJ='-static'
-        ;;
-      pgcc* | pgf77* | pgf90* | pgf95*)
-        # Portland Group compilers (*not* the Pentium gcc compiler,
-       # which looks to be a dead project)
-       lt_prog_compiler_wl_GCJ='-Wl,'
-       lt_prog_compiler_pic_GCJ='-fpic'
-       lt_prog_compiler_static_GCJ='-Bstatic'
-        ;;
-      ccc*)
-        lt_prog_compiler_wl_GCJ='-Wl,'
-        # All Alpha code is PIC.
-        lt_prog_compiler_static_GCJ='-non_shared'
-        ;;
-      *)
-        case `$CC -V 2>&1 | sed 5q` in
-       *Sun\ C*)
-         # Sun C 5.9
-         lt_prog_compiler_pic_GCJ='-KPIC'
-         lt_prog_compiler_static_GCJ='-Bstatic'
-         lt_prog_compiler_wl_GCJ='-Wl,'
-         ;;
-       *Sun\ F*)
-         # Sun Fortran 8.3 passes all unrecognized flags to the linker
-         lt_prog_compiler_pic_GCJ='-KPIC'
-         lt_prog_compiler_static_GCJ='-Bstatic'
-         lt_prog_compiler_wl_GCJ=''
-         ;;
-       esac
-       ;;
-      esac
-      ;;
-
-    osf3* | osf4* | osf5*)
-      lt_prog_compiler_wl_GCJ='-Wl,'
-      # All OSF/1 code is PIC.
-      lt_prog_compiler_static_GCJ='-non_shared'
-      ;;
-
-    rdos*)
-      lt_prog_compiler_static_GCJ='-non_shared'
-      ;;
-
-    solaris*)
-      lt_prog_compiler_pic_GCJ='-KPIC'
-      lt_prog_compiler_static_GCJ='-Bstatic'
-      case $cc_basename in
-      f77* | f90* | f95*)
-       lt_prog_compiler_wl_GCJ='-Qoption ld ';;
-      *)
-       lt_prog_compiler_wl_GCJ='-Wl,';;
-      esac
-      ;;
-
-    sunos4*)
-      lt_prog_compiler_wl_GCJ='-Qoption ld '
-      lt_prog_compiler_pic_GCJ='-PIC'
-      lt_prog_compiler_static_GCJ='-Bstatic'
-      ;;
-
-    sysv4 | sysv4.2uw2* | sysv4.3*)
-      lt_prog_compiler_wl_GCJ='-Wl,'
-      lt_prog_compiler_pic_GCJ='-KPIC'
-      lt_prog_compiler_static_GCJ='-Bstatic'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec ;then
-       lt_prog_compiler_pic_GCJ='-Kconform_pic'
-       lt_prog_compiler_static_GCJ='-Bstatic'
-      fi
-      ;;
-
-    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-      lt_prog_compiler_wl_GCJ='-Wl,'
-      lt_prog_compiler_pic_GCJ='-KPIC'
-      lt_prog_compiler_static_GCJ='-Bstatic'
-      ;;
-
-    unicos*)
-      lt_prog_compiler_wl_GCJ='-Wl,'
-      lt_prog_compiler_can_build_shared_GCJ=no
-      ;;
-
-    uts4*)
-      lt_prog_compiler_pic_GCJ='-pic'
-      lt_prog_compiler_static_GCJ='-Bstatic'
-      ;;
-
-    *)
-      lt_prog_compiler_can_build_shared_GCJ=no
-      ;;
-    esac
-  fi
-
-{ echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5
-echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6; }
-
-#
-# Check to make sure the PIC flag actually works.
-#
-if test -n "$lt_prog_compiler_pic_GCJ"; then
-
-{ echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5
-echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6; }
-if test "${lt_cv_prog_compiler_pic_works_GCJ+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_cv_prog_compiler_pic_works_GCJ=no
-  ac_outfile=conftest.$ac_objext
-   echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-   lt_compiler_flag="$lt_prog_compiler_pic_GCJ"
-   # 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:17090: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>conftest.err)
-   ac_status=$?
-   cat conftest.err >&5
-   echo "$as_me:17094: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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_GCJ=yes
-     fi
-   fi
-   $rm conftest*
-
-fi
-{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_pic_works_GCJ" >&5
-echo "${ECHO_T}$lt_cv_prog_compiler_pic_works_GCJ" >&6; }
-
-if test x"$lt_cv_prog_compiler_pic_works_GCJ" = xyes; then
-    case $lt_prog_compiler_pic_GCJ in
-     "" | " "*) ;;
-     *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;;
-     esac
-else
-    lt_prog_compiler_pic_GCJ=
-     lt_prog_compiler_can_build_shared_GCJ=no
-fi
-
-fi
-case $host_os in
-  # For platforms which do not support PIC, -DPIC is meaningless:
-  *djgpp*)
-    lt_prog_compiler_pic_GCJ=
-    ;;
-  *)
-    lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ"
-    ;;
-esac
-
-#
-# Check to make sure the static flag actually works.
-#
-wl=$lt_prog_compiler_wl_GCJ eval lt_tmp_static_flag=\"$lt_prog_compiler_static_GCJ\"
-{ echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
-echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6; }
-if test "${lt_cv_prog_compiler_static_works_GCJ+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_cv_prog_compiler_static_works_GCJ=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 "X$_lt_linker_boilerplate" | $Xsed -e '/^$/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_GCJ=yes
-       fi
-     else
-       lt_cv_prog_compiler_static_works_GCJ=yes
-     fi
-   fi
-   $rm -r conftest*
-   LDFLAGS="$save_LDFLAGS"
-
-fi
-{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_static_works_GCJ" >&5
-echo "${ECHO_T}$lt_cv_prog_compiler_static_works_GCJ" >&6; }
-
-if test x"$lt_cv_prog_compiler_static_works_GCJ" = xyes; then
-    :
-else
-    lt_prog_compiler_static_GCJ=
-fi
-
-
-{ echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
-echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6; }
-if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_cv_prog_compiler_c_o_GCJ=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:17194: $lt_compile\"" >&5)
-   (eval "$lt_compile" 2>out/conftest.err)
-   ac_status=$?
-   cat out/conftest.err >&5
-   echo "$as_me:17198: \$? = $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 "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/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_GCJ=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 ..
-   rmdir conftest
-   $rm conftest*
-
-fi
-{ echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5
-echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6; }
-
-
-hard_links="nottested"
-if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then
-  # do not overwrite the value of need_locks provided by the user
-  { echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
-echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&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
-  { echo "$as_me:$LINENO: result: $hard_links" >&5
-echo "${ECHO_T}$hard_links" >&6; }
-  if test "$hard_links" = no; then
-    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
-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
-
-{ echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
-echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6; }
-
-  runpath_var=
-  allow_undefined_flag_GCJ=
-  enable_shared_with_static_runtimes_GCJ=no
-  archive_cmds_GCJ=
-  archive_expsym_cmds_GCJ=
-  old_archive_From_new_cmds_GCJ=
-  old_archive_from_expsyms_cmds_GCJ=
-  export_dynamic_flag_spec_GCJ=
-  whole_archive_flag_spec_GCJ=
-  thread_safe_flag_spec_GCJ=
-  hardcode_libdir_flag_spec_GCJ=
-  hardcode_libdir_flag_spec_ld_GCJ=
-  hardcode_libdir_separator_GCJ=
-  hardcode_direct_GCJ=no
-  hardcode_minus_L_GCJ=no
-  hardcode_shlibpath_var_GCJ=unsupported
-  link_all_deplibs_GCJ=unknown
-  hardcode_automatic_GCJ=no
-  module_cmds_GCJ=
-  module_expsym_cmds_GCJ=
-  always_export_symbols_GCJ=no
-  export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
-  # include_expsyms should be a list of space-separated symbols to be *always*
-  # included in the symbol list
-  include_expsyms_GCJ=
-  # 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_GCJ='_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=
-  # Just being paranoid about ensuring that cc_basename is set.
-  for cc_temp in $compiler""; do
-  case $cc_temp in
-    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-  case $host_os in
-  cygwin* | mingw* | pw32*)
-    # 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 "$GCC" != yes; then
-      with_gnu_ld=no
-    fi
-    ;;
-  interix*)
-    # we just hope/assume this is gcc and not c89 (= MSVC++)
-    with_gnu_ld=yes
-    ;;
-  openbsd*)
-    with_gnu_ld=no
-    ;;
-  esac
-
-  ld_shlibs_GCJ=yes
-  if test "$with_gnu_ld" = yes; 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_GCJ='${wl}--rpath ${wl}$libdir'
-    export_dynamic_flag_spec_GCJ='${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_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
-      else
-       whole_archive_flag_spec_GCJ=
-    fi
-    supports_anon_versioning=no
-    case `$LD -v 2>/dev/null` in
-      *\ [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 "$host_cpu" != ia64; then
-       ld_shlibs_GCJ=no
-       cat <<EOF 1>&2
-
-*** Warning: the GNU linker, at least up to release 2.9.1, 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 modify your PATH
-*** so that a non-GNU linker is found, and then restart.
-
-EOF
-      fi
-      ;;
-
-    amigaos*)
-      archive_cmds_GCJ='$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_GCJ='-L$libdir'
-      hardcode_minus_L_GCJ=yes
-
-      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
-      # that the semantics of dynamic libraries on AmigaOS, at least up
-      # to version 4, is to share data among multiple programs linked
-      # with the same dynamic library.  Since this doesn't match the
-      # behavior of shared libraries on other platforms, we can't use
-      # them.
-      ld_shlibs_GCJ=no
-      ;;
-
-    beos*)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-       allow_undefined_flag_GCJ=unsupported
-       # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
-       # support --undefined.  This deserves some investigation.  FIXME
-       archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-      else
-       ld_shlibs_GCJ=no
-      fi
-      ;;
-
-    cygwin* | mingw* | pw32*)
-      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless,
-      # as there is no search path for DLLs.
-      hardcode_libdir_flag_spec_GCJ='-L$libdir'
-      allow_undefined_flag_GCJ=unsupported
-      always_export_symbols_GCJ=no
-      enable_shared_with_static_runtimes_GCJ=yes
-      export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
-
-      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-        archive_cmds_GCJ='$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 (1st line
-       # is EXPORTS), use it as is; otherwise, prepend...
-       archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; 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_GCJ=no
-      fi
-      ;;
-
-    interix[3-9]*)
-      hardcode_direct_GCJ=no
-      hardcode_shlibpath_var_GCJ=no
-      hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
-      export_dynamic_flag_spec_GCJ='${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_GCJ='$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_GCJ='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* | k*bsd*-gnu)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-       tmp_addflag=
-       case $cc_basename,$host_cpu in
-       pgcc*)                          # Portland Group C compiler
-         whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-         tmp_addflag=' $pic_flag'
-         ;;
-       pgf77* | pgf90* | pgf95*)       # Portland Group f77 and f90 compilers
-         whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$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' ;;
-       esac
-       case `$CC -V 2>&1 | sed 5q` in
-       *Sun\ C*)                       # Sun C 5.9
-         whole_archive_flag_spec_GCJ='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
-         tmp_sharedflag='-G' ;;
-       *Sun\ F*)                       # Sun Fortran 8.3
-         tmp_sharedflag='-G' ;;
-       *)
-         tmp_sharedflag='-shared' ;;
-       esac
-       archive_cmds_GCJ='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-
-       if test $supports_anon_versioning = yes; then
-         archive_expsym_cmds_GCJ='$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
-       link_all_deplibs_GCJ=no
-      else
-       ld_shlibs_GCJ=no
-      fi
-      ;;
-
-    netbsd* | netbsdelf*-gnu)
-      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-       archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
-       wlarc=
-      else
-       archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       archive_expsym_cmds_GCJ='$CC -shared $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_GCJ=no
-       cat <<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.
-
-EOF
-      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-       archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-       ld_shlibs_GCJ=no
-      fi
-      ;;
-
-    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
-      case `$LD -v 2>&1` in
-        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
-       ld_shlibs_GCJ=no
-       cat <<_LT_EOF 1>&2
-
-*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
-*** 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
-       ;;
-       *)
-         if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-           hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
-           archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
-           archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
-         else
-           ld_shlibs_GCJ=no
-         fi
-       ;;
-      esac
-      ;;
-
-    sunos4*)
-      archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      wlarc=
-      hardcode_direct_GCJ=yes
-      hardcode_shlibpath_var_GCJ=no
-      ;;
-
-    *)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-       archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
-       archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
-      else
-       ld_shlibs_GCJ=no
-      fi
-      ;;
-    esac
-
-    if test "$ld_shlibs_GCJ" = no; then
-      runpath_var=
-      hardcode_libdir_flag_spec_GCJ=
-      export_dynamic_flag_spec_GCJ=
-      whole_archive_flag_spec_GCJ=
-    fi
-  else
-    # PORTME fill in a description of your system's linker (not GNU ld)
-    case $host_os in
-    aix3*)
-      allow_undefined_flag_GCJ=unsupported
-      always_export_symbols_GCJ=yes
-      archive_expsym_cmds_GCJ='$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_GCJ=yes
-      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
-       # Neither direct hardcoding nor static linking is supported with a
-       # broken collect2.
-       hardcode_direct_GCJ=unsupported
-      fi
-      ;;
-
-    aix[4-9]*)
-      if test "$host_cpu" = ia64; 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 AIX nm, but means don't demangle with GNU nm
-       if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
-         export_symbols_cmds_GCJ='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols'
-       else
-         export_symbols_cmds_GCJ='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | 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
-       # need to do runtime linking.
-       case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
-         for ld_flag in $LDFLAGS; do
-         if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
-           aix_use_runtimelinking=yes
-           break
-         fi
-         done
-         ;;
-       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_GCJ=''
-      hardcode_direct_GCJ=yes
-      hardcode_libdir_separator_GCJ=':'
-      link_all_deplibs_GCJ=yes
-
-      if test "$GCC" = yes; 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_GCJ=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_GCJ=yes
-         hardcode_libdir_flag_spec_GCJ='-L$libdir'
-         hardcode_libdir_separator_GCJ=
-         fi
-         ;;
-       esac
-       shared_flag='-shared'
-       if test "$aix_use_runtimelinking" = yes; then
-         shared_flag="$shared_flag "'${wl}-G'
-       fi
-      else
-       # not using gcc
-       if test "$host_cpu" = ia64; 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 "$aix_use_runtimelinking" = yes; then
-           shared_flag='${wl}-G'
-         else
-           shared_flag='${wl}-bM:SRE'
-         fi
-       fi
-      fi
-
-      # 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_GCJ=yes
-      if test "$aix_use_runtimelinking" = yes; then
-       # Warning - without using the other runtime loading flags (-brtl),
-       # -berok will link without error, but may produce a broken library.
-       allow_undefined_flag_GCJ='-berok'
-       # Determine the default libpath from the value encoded in an empty executable.
-       cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-       /^0/ {
-           s/^0  *\(.*\)$/\1/
-           p
-       }
-    }'
-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 "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
-       hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
-       archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
-       else
-       if test "$host_cpu" = ia64; then
-         hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib'
-         allow_undefined_flag_GCJ="-z nodefs"
-         archive_expsym_cmds_GCJ="\$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.
-        cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_link") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext &&
-       $as_test_x conftest$ac_exeext; then
-
-lt_aix_libpath_sed='
-    /Import File Strings/,/^$/ {
-       /^0/ {
-           s/^0  *\(.*\)$/\1/
-           p
-       }
-    }'
-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 "$aix_libpath"; then
-  aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
-fi
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
-      conftest$ac_exeext conftest.$ac_ext
-if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
-
-        hardcode_libdir_flag_spec_GCJ='${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_GCJ=' ${wl}-bernotok'
-         allow_undefined_flag_GCJ=' ${wl}-berok'
-         # Exported symbols can be pulled into shared objects from archives
-         whole_archive_flag_spec_GCJ='$convenience'
-         archive_cmds_need_lc_GCJ=yes
-         # This is similar to how AIX traditionally builds its shared libraries.
-         archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
-       fi
-      fi
-      ;;
-
-    amigaos*)
-      archive_cmds_GCJ='$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_GCJ='-L$libdir'
-      hardcode_minus_L_GCJ=yes
-      # see comment about different semantics on the GNU ld section
-      ld_shlibs_GCJ=no
-      ;;
-
-    bsdi[45]*)
-      export_dynamic_flag_spec_GCJ=-rdynamic
-      ;;
-
-    cygwin* | mingw* | pw32*)
-      # 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.
-      hardcode_libdir_flag_spec_GCJ=' '
-      allow_undefined_flag_GCJ=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_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
-      # The linker will automatically build a .lib file if we build a DLL.
-      old_archive_From_new_cmds_GCJ='true'
-      # FIXME: Should let the user specify the lib program.
-      old_archive_cmds_GCJ='lib -OUT:$oldlib$oldobjs$old_deplibs'
-      fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`'
-      enable_shared_with_static_runtimes_GCJ=yes
-      ;;
-
-    darwin* | rhapsody*)
-      case $host_os in
-        rhapsody* | darwin1.[012])
-         allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress'
-         ;;
-       *) # Darwin 1.3 on
-         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
-           allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-         else
-           case ${MACOSX_DEPLOYMENT_TARGET} in
-             10.[012])
-               allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
-               ;;
-             10.*)
-               allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup'
-               ;;
-           esac
-         fi
-         ;;
-      esac
-      archive_cmds_need_lc_GCJ=no
-      hardcode_direct_GCJ=no
-      hardcode_automatic_GCJ=yes
-      hardcode_shlibpath_var_GCJ=unsupported
-      whole_archive_flag_spec_GCJ=''
-      link_all_deplibs_GCJ=yes
-    if test "$GCC" = yes ; then
-       output_verbose_link_cmd='echo'
-        archive_cmds_GCJ="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
-        module_cmds_GCJ="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
-        archive_expsym_cmds_GCJ="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_GCJ="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
-      case $cc_basename in
-        xlc*)
-         output_verbose_link_cmd='echo'
-         archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $xlcverstring'
-         module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
-          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
-         archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $xlcverstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          module_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag  -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
-          ;;
-       *)
-         ld_shlibs_GCJ=no
-          ;;
-      esac
-    fi
-      ;;
-
-    dgux*)
-      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_libdir_flag_spec_GCJ='-L$libdir'
-      hardcode_shlibpath_var_GCJ=no
-      ;;
-
-    freebsd1*)
-      ld_shlibs_GCJ=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_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
-      hardcode_libdir_flag_spec_GCJ='-R$libdir'
-      hardcode_direct_GCJ=yes
-      hardcode_shlibpath_var_GCJ=no
-      ;;
-
-    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
-    freebsd2*)
-      archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_direct_GCJ=yes
-      hardcode_minus_L_GCJ=yes
-      hardcode_shlibpath_var_GCJ=no
-      ;;
-
-    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
-    freebsd* | dragonfly*)
-      archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
-      hardcode_libdir_flag_spec_GCJ='-R$libdir'
-      hardcode_direct_GCJ=yes
-      hardcode_shlibpath_var_GCJ=no
-      ;;
-
-    hpux9*)
-      if test "$GCC" = yes; then
-       archive_cmds_GCJ='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      else
-       archive_cmds_GCJ='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
-      fi
-      hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
-      hardcode_libdir_separator_GCJ=:
-      hardcode_direct_GCJ=yes
-
-      # hardcode_minus_L: Not really in the search PATH,
-      # but as the default location of the library.
-      hardcode_minus_L_GCJ=yes
-      export_dynamic_flag_spec_GCJ='${wl}-E'
-      ;;
-
-    hpux10*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-       archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-      else
-       archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      if test "$with_gnu_ld" = no; then
-       hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
-       hardcode_libdir_separator_GCJ=:
-
-       hardcode_direct_GCJ=yes
-       export_dynamic_flag_spec_GCJ='${wl}-E'
-
-       # hardcode_minus_L: Not really in the search PATH,
-       # but as the default location of the library.
-       hardcode_minus_L_GCJ=yes
-      fi
-      ;;
-
-    hpux11*)
-      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
-       case $host_cpu in
-       hppa*64*)
-         archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       ia64*)
-         archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       *)
-         archive_cmds_GCJ='$CC -shared -fPIC ${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_GCJ='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       ia64*)
-         archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       *)
-         archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
-         ;;
-       esac
-      fi
-      if test "$with_gnu_ld" = no; then
-       hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
-       hardcode_libdir_separator_GCJ=:
-
-       case $host_cpu in
-       hppa*64*|ia64*)
-         hardcode_libdir_flag_spec_ld_GCJ='+b $libdir'
-         hardcode_direct_GCJ=no
-         hardcode_shlibpath_var_GCJ=no
-         ;;
-       *)
-         hardcode_direct_GCJ=yes
-         export_dynamic_flag_spec_GCJ='${wl}-E'
-
-         # hardcode_minus_L: Not really in the search PATH,
-         # but as the default location of the library.
-         hardcode_minus_L_GCJ=yes
-         ;;
-       esac
-      fi
-      ;;
-
-    irix5* | irix6* | nonstopux*)
-      if test "$GCC" = yes; then
-       archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-       archive_cmds_GCJ='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-       hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir'
-      fi
-      hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator_GCJ=:
-      link_all_deplibs_GCJ=yes
-      ;;
-
-    netbsd* | netbsdelf*-gnu)
-      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
-       archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
-      else
-       archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
-      fi
-      hardcode_libdir_flag_spec_GCJ='-R$libdir'
-      hardcode_direct_GCJ=yes
-      hardcode_shlibpath_var_GCJ=no
-      ;;
-
-    newsos6)
-      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_direct_GCJ=yes
-      hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator_GCJ=:
-      hardcode_shlibpath_var_GCJ=no
-      ;;
-
-    openbsd*)
-      if test -f /usr/libexec/ld.so; then
-       hardcode_direct_GCJ=yes
-       hardcode_shlibpath_var_GCJ=no
-       if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-         archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-         archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
-         hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
-         export_dynamic_flag_spec_GCJ='${wl}-E'
-       else
-         case $host_os in
-          openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
-            archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
-            hardcode_libdir_flag_spec_GCJ='-R$libdir'
-            ;;
-          *)
-            archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
-            hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
-            ;;
-         esac
-        fi
-      else
-       ld_shlibs_GCJ=no
-      fi
-      ;;
-
-    os2*)
-      hardcode_libdir_flag_spec_GCJ='-L$libdir'
-      hardcode_minus_L_GCJ=yes
-      allow_undefined_flag_GCJ=unsupported
-      archive_cmds_GCJ='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
-      old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
-      ;;
-
-    osf3*)
-      if test "$GCC" = yes; then
-       allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
-       archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-      else
-       allow_undefined_flag_GCJ=' -expect_unresolved \*'
-       archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-      fi
-      hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator_GCJ=:
-      ;;
-
-    osf4* | osf5*)     # as osf3* with the addition of -msym flag
-      if test "$GCC" = yes; then
-       allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
-       archive_cmds_GCJ='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
-       hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
-      else
-       allow_undefined_flag_GCJ=' -expect_unresolved \*'
-       archive_cmds_GCJ='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
-       archive_expsym_cmds_GCJ='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
-       $LD -shared${allow_undefined_flag} -input $lib.exp $linker_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_GCJ='-rpath $libdir'
-      fi
-      hardcode_libdir_separator_GCJ=:
-      ;;
-
-    solaris*)
-      no_undefined_flag_GCJ=' -z text'
-      if test "$GCC" = yes; then
-       wlarc='${wl}'
-       archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
-       archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
-         $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
-      else
-       wlarc=''
-       archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
-       archive_expsym_cmds_GCJ='$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'
-      fi
-      hardcode_libdir_flag_spec_GCJ='-R$libdir'
-      hardcode_shlibpath_var_GCJ=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 "$GCC" = yes; then
-         whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
-       else
-         whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract'
-       fi
-       ;;
-      esac
-      link_all_deplibs_GCJ=yes
-      ;;
-
-    sunos4*)
-      if test "x$host_vendor" = xsequent; then
-       # Use $CC to link under sequent, because it throws in some extra .o
-       # files that make .init and .fini sections work.
-       archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-       archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
-      fi
-      hardcode_libdir_flag_spec_GCJ='-L$libdir'
-      hardcode_direct_GCJ=yes
-      hardcode_minus_L_GCJ=yes
-      hardcode_shlibpath_var_GCJ=no
-      ;;
-
-    sysv4)
-      case $host_vendor in
-       sni)
-         archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-         hardcode_direct_GCJ=yes # is this really true???
-       ;;
-       siemens)
-         ## LD is ld it makes a PLAMLIB
-         ## CC just makes a GrossModule.
-         archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags'
-         reload_cmds_GCJ='$CC -r -o $output$reload_objs'
-         hardcode_direct_GCJ=no
-        ;;
-       motorola)
-         archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-         hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie
-       ;;
-      esac
-      runpath_var='LD_RUN_PATH'
-      hardcode_shlibpath_var_GCJ=no
-      ;;
-
-    sysv4.3*)
-      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_shlibpath_var_GCJ=no
-      export_dynamic_flag_spec_GCJ='-Bexport'
-      ;;
-
-    sysv4*MP*)
-      if test -d /usr/nec; then
-       archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-       hardcode_shlibpath_var_GCJ=no
-       runpath_var=LD_RUN_PATH
-       hardcode_runpath_var=yes
-       ld_shlibs_GCJ=yes
-      fi
-      ;;
-
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
-      no_undefined_flag_GCJ='${wl}-z,text'
-      archive_cmds_need_lc_GCJ=no
-      hardcode_shlibpath_var_GCJ=no
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-       archive_cmds_GCJ='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-       archive_cmds_GCJ='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-       archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      ;;
-
-    sysv5* | sco3.2v5* | sco5v6*)
-      # Note: We can NOT 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_GCJ='${wl}-z,text'
-      allow_undefined_flag_GCJ='${wl}-z,nodefs'
-      archive_cmds_need_lc_GCJ=no
-      hardcode_shlibpath_var_GCJ=no
-      hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
-      hardcode_libdir_separator_GCJ=':'
-      link_all_deplibs_GCJ=yes
-      export_dynamic_flag_spec_GCJ='${wl}-Bexport'
-      runpath_var='LD_RUN_PATH'
-
-      if test "$GCC" = yes; then
-       archive_cmds_GCJ='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-       archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-      else
-       archive_cmds_GCJ='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-       archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
-      fi
-      ;;
-
-    uts4*)
-      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
-      hardcode_libdir_flag_spec_GCJ='-L$libdir'
-      hardcode_shlibpath_var_GCJ=no
-      ;;
-
-    *)
-      ld_shlibs_GCJ=no
-      ;;
-    esac
-  fi
-
-{ echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5
-echo "${ECHO_T}$ld_shlibs_GCJ" >&6; }
-test "$ld_shlibs_GCJ" = no && can_build_shared=no
-
-#
-# Do we need to explicitly link libc?
-#
-case "x$archive_cmds_need_lc_GCJ" in
-x|xyes)
-  # Assume -lc should be added
-  archive_cmds_need_lc_GCJ=yes
-
-  if test "$enable_shared" = yes && test "$GCC" = yes; then
-    case $archive_cmds_GCJ 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.
-      { echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
-echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6; }
-      $rm conftest*
-      echo "$lt_simple_compile_test_code" > conftest.$ac_ext
-
-      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } 2>conftest.err; then
-        soname=conftest
-        lib=conftest
-        libobjs=conftest.$ac_objext
-        deplibs=
-        wl=$lt_prog_compiler_wl_GCJ
-       pic_flag=$lt_prog_compiler_pic_GCJ
-        compiler_flags=-v
-        linker_flags=-v
-        verstring=
-        output_objdir=.
-        libname=conftest
-        lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ
-        allow_undefined_flag_GCJ=
-        if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
-  (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }
-        then
-         archive_cmds_need_lc_GCJ=no
-        else
-         archive_cmds_need_lc_GCJ=yes
-        fi
-        allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag
-      else
-        cat conftest.err 1>&5
-      fi
-      $rm conftest*
-      { echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5
-echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6; }
-      ;;
-    esac
-  fi
-  ;;
-esac
-
-{ echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
-echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&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
-  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
-  need_lib_prefix=no
-  need_version=no
-  hardcode_into_libs=yes
-  if test "$host_cpu" = ia64; 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
-    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
-    # soname into executable. Probably we can add versioning support to
-    # collect2, so additional links can be useful in future.
-    if test "$aix_use_runtimelinking" = yes; then
-      # 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}'
-    else
-      # 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'
-    fi
-    shlibpath_var=LIBPATH
-  fi
-  ;;
-
-amigaos*)
-  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=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $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'
-  ;;
-
-beos*)
-  library_names_spec='${libname}${shared_ext}'
-  dynamic_linker="$host_os ld.so"
-  shlibpath_var=LIBRARY_PATH
-  ;;
-
-bsdi[45]*)
-  version_type=linux
-  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*)
-  version_type=windows
-  shrext_cmds=".dll"
-  need_version=no
-  need_lib_prefix=no
-
-  case $GCC,$host_os in
-  yes,cygwin* | yes,mingw* | yes,pw32*)
-    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'
-    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="/usr/lib /lib/w32api /lib /usr/local/lib"
-      ;;
-    mingw*)
-      # MinGW DLLs use traditional 'lib' prefix
-      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
-      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
-      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
-        # It is most probably a Windows format PATH printed by
-        # mingw gcc, but we are running on Cygwin. Gcc prints its search
-        # path with ; separators, and with drive letters. We can handle the
-        # drive letters (cygwin fileutils understands them), so leave them,
-        # especially as we might pass files found there to a mingw objdump,
-        # which wouldn't understand a cygwinified path. Ahh.
-        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
-      ;;
-    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
-    ;;
-
-  *)
-    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
-    ;;
-  esac
-  dynamic_linker='Win32 ld.exe'
-  # 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}${versuffix}$shared_ext ${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
-  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
-  ;;
-
-freebsd1*)
-  dynamic_linker=no
-  ;;
-
-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[123]*) 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} $libname${shared_ext}'
-      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
-  ;;
-
-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
-  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 "X$HPUX_IA64_MODE" = X32; then
-      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
-    else
-      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
-    fi
-    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
-    ;;
-   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'
-  ;;
-
-interix[3-9]*)
-  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'
-  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 "$lt_cv_prog_gnu_ld" = yes; then
-               version_type=linux
-       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
-  ;;
-
-# This must be Linux ELF.
-linux* | k*bsd*-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'
-  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
-  shlibpath_var=LD_LIBRARY_PATH
-  shlibpath_overrides_runpath=no
-  # 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
-
-  # Append ld.so.conf contents 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;/^$/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
-  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=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=yes
-  ;;
-
-openbsd*)
-  version_type=sunos
-  sys_lib_dlsearch_path_spec="/usr/lib"
-  need_lib_prefix=no
-  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
-  case $host_os in
-    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
-    *)                         need_version=no  ;;
-  esac
-  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
-  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-    case $host_os in
-      openbsd2.[89] | openbsd2.[89].*)
-       shlibpath_overrides_runpath=no
-       ;;
-      *)
-       shlibpath_overrides_runpath=yes
-       ;;
-      esac
-  else
-    shlibpath_overrides_runpath=yes
-  fi
-  ;;
-
-os2*)
-  libname_spec='$name'
-  shrext_cmds=".dll"
-  need_lib_prefix=no
-  library_names_spec='$libname${shared_ext} $libname.a'
-  dynamic_linker='OS/2 ld.exe'
-  shlibpath_var=LIBPATH
-  ;;
-
-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
-  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 "$with_gnu_ld" = yes; then
-    need_lib_prefix=no
-  fi
-  need_version=yes
-  ;;
-
-sysv4 | sysv4.3*)
-  version_type=linux
-  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
-      export_dynamic_flag_spec='${wl}-Blargedynsym'
-      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
-    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=freebsd-elf
-  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
-  hardcode_into_libs=yes
-  if test "$with_gnu_ld" = yes; then
-    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
-    shlibpath_overrides_runpath=no
-  else
-    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
-    shlibpath_overrides_runpath=yes
-    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'
-  ;;
-
-uts4*)
-  version_type=linux
-  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
-{ echo "$as_me:$LINENO: result: $dynamic_linker" >&5
-echo "${ECHO_T}$dynamic_linker" >&6; }
-test "$dynamic_linker" = no && can_build_shared=no
-
-if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_cv_sys_lib_search_path_spec="$sys_lib_search_path_spec"
-fi
-
-sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
-if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  lt_cv_sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec"
-fi
-
-sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
-
-variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
-if test "$GCC" = yes; then
-  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
-fi
-
-{ echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
-echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6; }
-hardcode_action_GCJ=
-if test -n "$hardcode_libdir_flag_spec_GCJ" || \
-   test -n "$runpath_var_GCJ" || \
-   test "X$hardcode_automatic_GCJ" = "Xyes" ; then
-
-  # We can hardcode non-existant directories.
-  if test "$hardcode_direct_GCJ" != no &&
-     # 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 "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no &&
-     test "$hardcode_minus_L_GCJ" != no; then
-    # Linking always hardcodes the temporary library directory.
-    hardcode_action_GCJ=relink
-  else
-    # We can link without hardcoding, and we can hardcode nonexisting dirs.
-    hardcode_action_GCJ=immediate
-  fi
-else
-  # We cannot hardcode anything, or else we can only hardcode existing
-  # directories.
-  hardcode_action_GCJ=unsupported
-fi
-{ echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5
-echo "${ECHO_T}$hardcode_action_GCJ" >&6; }
-
-if test "$hardcode_action_GCJ" = relink; then
-  # Fast installation is not supported
-  enable_fast_install=no
-elif test "$shlibpath_overrides_runpath" = yes ||
-     test "$enable_shared" = no; then
-  # Fast installation is not necessary
-  enable_fast_install=needless
-fi
-
-
-# The else clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
-  # See if we are running on zsh, and set the options which allow our commands through
-  # without removal of \ escapes.
-  if test -n "${ZSH_VERSION+set}" ; then
-    setopt NO_GLOB_SUBST
-  fi
-  # Now quote all the things that may contain metacharacters while being
-  # careful not to overquote the AC_SUBSTed values.  We take copies of the
-  # variables and quote the copies for generation of the libtool script.
-  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
-    SED SHELL STRIP \
-    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
-    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
-    deplibs_check_method reload_flag reload_cmds need_locks \
-    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
-    lt_cv_sys_global_symbol_to_c_name_address \
-    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
-    old_postinstall_cmds old_postuninstall_cmds \
-    compiler_GCJ \
-    CC_GCJ \
-    LD_GCJ \
-    lt_prog_compiler_wl_GCJ \
-    lt_prog_compiler_pic_GCJ \
-    lt_prog_compiler_static_GCJ \
-    lt_prog_compiler_no_builtin_flag_GCJ \
-    export_dynamic_flag_spec_GCJ \
-    thread_safe_flag_spec_GCJ \
-    whole_archive_flag_spec_GCJ \
-    enable_shared_with_static_runtimes_GCJ \
-    old_archive_cmds_GCJ \
-    old_archive_from_new_cmds_GCJ \
-    predep_objects_GCJ \
-    postdep_objects_GCJ \
-    predeps_GCJ \
-    postdeps_GCJ \
-    compiler_lib_search_path_GCJ \
-    compiler_lib_search_dirs_GCJ \
-    archive_cmds_GCJ \
-    archive_expsym_cmds_GCJ \
-    postinstall_cmds_GCJ \
-    postuninstall_cmds_GCJ \
-    old_archive_from_expsyms_cmds_GCJ \
-    allow_undefined_flag_GCJ \
-    no_undefined_flag_GCJ \
-    export_symbols_cmds_GCJ \
-    hardcode_libdir_flag_spec_GCJ \
-    hardcode_libdir_flag_spec_ld_GCJ \
-    hardcode_libdir_separator_GCJ \
-    hardcode_automatic_GCJ \
-    module_cmds_GCJ \
-    module_expsym_cmds_GCJ \
-    lt_cv_prog_compiler_c_o_GCJ \
-    fix_srcfile_path_GCJ \
-    exclude_expsyms_GCJ \
-    include_expsyms_GCJ; do
-
-    case $var in
-    old_archive_cmds_GCJ | \
-    old_archive_from_new_cmds_GCJ | \
-    archive_cmds_GCJ | \
-    archive_expsym_cmds_GCJ | \
-    module_cmds_GCJ | \
-    module_expsym_cmds_GCJ | \
-    old_archive_from_expsyms_cmds_GCJ | \
-    export_symbols_cmds_GCJ | \
-    extract_expsyms_cmds | reload_cmds | finish_cmds | \
-    postinstall_cmds | postuninstall_cmds | \
-    old_postinstall_cmds | old_postuninstall_cmds | \
-    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
-      # Double-quote double-evaled strings.
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
-      ;;
-    *)
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
-      ;;
-    esac
-  done
-
-  case $lt_echo in
-  *'\$0 --fallback-echo"')
-    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
-    ;;
-  esac
-
-cfgfile="$ofile"
-
-  cat <<__EOF__ >> "$cfgfile"
-# ### BEGIN LIBTOOL TAG CONFIG: $tagname
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$archive_cmds_need_lc_GCJ
-
-# Whether or not to disallow shared libs when runtime libs are static
-allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# 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
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A C compiler.
-LTCC=$lt_LTCC
-
-# LTCC compiler flags.
-LTCFLAGS=$lt_LTCFLAGS
-
-# A language-specific compiler.
-CC=$lt_compiler_GCJ
-
-# Is the compiler the GNU C compiler?
-with_gcc=$GCC_GCJ
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# The linker used to build libraries.
-LD=$lt_LD_GCJ
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$lt_STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl_GCJ
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally ".so").
-shrext_cmds='$shrext_cmds'
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic_GCJ
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# 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
-
-# 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
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static_GCJ
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ
-
-# Library versioning type.
-version_type=$version_type
-
-# 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
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_old_archive_cmds_GCJ
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ
-
-# Commands used to build and install a shared archive.
-archive_cmds=$lt_archive_cmds_GCJ
-archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to build a loadable module (assumed same as above if empty)
-module_cmds=$lt_module_cmds_GCJ
-module_expsym_cmds=$lt_module_expsym_cmds_GCJ
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$lt_predep_objects_GCJ
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$lt_postdep_objects_GCJ
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$lt_predeps_GCJ
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdeps=$lt_postdeps_GCJ
-
-# The directories searched by this compiler when creating a shared
-# library
-compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_GCJ
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ
-
-# 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
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag_GCJ
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag_GCJ
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# 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 in a C name address pair
-global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action_GCJ
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# 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_GCJ
-
-# If ld is used when linking, flag to hardcode \$libdir into
-# a binary during linking. This must work even if \$libdir does
-# not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ
-
-# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$hardcode_direct_GCJ
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$hardcode_minus_L_GCJ
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ
-
-# 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_GCJ
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs_GCJ
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$always_export_symbols_GCJ
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_export_symbols_cmds_GCJ
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_exclude_expsyms_GCJ
-
-# Symbols that must always be exported.
-include_expsyms=$lt_include_expsyms_GCJ
-
-# ### END LIBTOOL TAG CONFIG: $tagname
-
-__EOF__
-
-
-else
-  # If there is no Makefile yet, we rely on a make rule to execute
-  # `config.status --recheck' to rerun these tests and create the
-  # libtool script then.
-  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
-  if test -f "$ltmain_in"; then
-    test -f Makefile && make "$ltmain"
-  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
-
-CC="$lt_save_CC"
-
-       else
-         tagname=""
-       fi
-       ;;
-
-      RC)
-
-
-# Source file extension for RC test sources.
-ac_ext=rc
-
-# Object file extension for compiled RC test sources.
-objext=o
-objext_RC=$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.
-
-# 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"
-CC=${RC-"windres"}
-compiler=$CC
-compiler_RC=$CC
-for cc_temp in $compiler""; do
-  case $cc_temp in
-    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
-
-lt_cv_prog_compiler_c_o_RC=yes
-
-# The else clause should only fire when bootstrapping the
-# libtool distribution, otherwise you forgot to ship ltmain.sh
-# with your package, and you will get complaints that there are
-# no rules to generate ltmain.sh.
-if test -f "$ltmain"; then
-  # See if we are running on zsh, and set the options which allow our commands through
-  # without removal of \ escapes.
-  if test -n "${ZSH_VERSION+set}" ; then
-    setopt NO_GLOB_SUBST
-  fi
-  # Now quote all the things that may contain metacharacters while being
-  # careful not to overquote the AC_SUBSTed values.  We take copies of the
-  # variables and quote the copies for generation of the libtool script.
-  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
-    SED SHELL STRIP \
-    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
-    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
-    deplibs_check_method reload_flag reload_cmds need_locks \
-    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
-    lt_cv_sys_global_symbol_to_c_name_address \
-    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
-    old_postinstall_cmds old_postuninstall_cmds \
-    compiler_RC \
-    CC_RC \
-    LD_RC \
-    lt_prog_compiler_wl_RC \
-    lt_prog_compiler_pic_RC \
-    lt_prog_compiler_static_RC \
-    lt_prog_compiler_no_builtin_flag_RC \
-    export_dynamic_flag_spec_RC \
-    thread_safe_flag_spec_RC \
-    whole_archive_flag_spec_RC \
-    enable_shared_with_static_runtimes_RC \
-    old_archive_cmds_RC \
-    old_archive_from_new_cmds_RC \
-    predep_objects_RC \
-    postdep_objects_RC \
-    predeps_RC \
-    postdeps_RC \
-    compiler_lib_search_path_RC \
-    compiler_lib_search_dirs_RC \
-    archive_cmds_RC \
-    archive_expsym_cmds_RC \
-    postinstall_cmds_RC \
-    postuninstall_cmds_RC \
-    old_archive_from_expsyms_cmds_RC \
-    allow_undefined_flag_RC \
-    no_undefined_flag_RC \
-    export_symbols_cmds_RC \
-    hardcode_libdir_flag_spec_RC \
-    hardcode_libdir_flag_spec_ld_RC \
-    hardcode_libdir_separator_RC \
-    hardcode_automatic_RC \
-    module_cmds_RC \
-    module_expsym_cmds_RC \
-    lt_cv_prog_compiler_c_o_RC \
-    fix_srcfile_path_RC \
-    exclude_expsyms_RC \
-    include_expsyms_RC; do
-
-    case $var in
-    old_archive_cmds_RC | \
-    old_archive_from_new_cmds_RC | \
-    archive_cmds_RC | \
-    archive_expsym_cmds_RC | \
-    module_cmds_RC | \
-    module_expsym_cmds_RC | \
-    old_archive_from_expsyms_cmds_RC | \
-    export_symbols_cmds_RC | \
-    extract_expsyms_cmds | reload_cmds | finish_cmds | \
-    postinstall_cmds | postuninstall_cmds | \
-    old_postinstall_cmds | old_postuninstall_cmds | \
-    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
-      # Double-quote double-evaled strings.
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
-      ;;
-    *)
-      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
-      ;;
-    esac
-  done
-
-  case $lt_echo in
-  *'\$0 --fallback-echo"')
-    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
-    ;;
-  esac
-
-cfgfile="$ofile"
-
-  cat <<__EOF__ >> "$cfgfile"
-# ### BEGIN LIBTOOL TAG CONFIG: $tagname
-
-# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
-
-# Shell to use when invoking shell scripts.
-SHELL=$lt_SHELL
-
-# Whether or not to build shared libraries.
-build_libtool_libs=$enable_shared
-
-# Whether or not to build static libraries.
-build_old_libs=$enable_static
-
-# Whether or not to add -lc for building shared libraries.
-build_libtool_need_lc=$archive_cmds_need_lc_RC
-
-# Whether or not to disallow shared libs when runtime libs are static
-allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC
-
-# Whether or not to optimize for fast installation.
-fast_install=$enable_fast_install
-
-# 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
-
-# An echo program that does not interpret backslashes.
-echo=$lt_echo
-
-# The archiver.
-AR=$lt_AR
-AR_FLAGS=$lt_AR_FLAGS
-
-# A C compiler.
-LTCC=$lt_LTCC
-
-# LTCC compiler flags.
-LTCFLAGS=$lt_LTCFLAGS
-
-# A language-specific compiler.
-CC=$lt_compiler_RC
-
-# Is the compiler the GNU C compiler?
-with_gcc=$GCC_RC
-
-# An ERE matcher.
-EGREP=$lt_EGREP
-
-# The linker used to build libraries.
-LD=$lt_LD_RC
-
-# Whether we need hard or soft links.
-LN_S=$lt_LN_S
-
-# A BSD-compatible nm program.
-NM=$lt_NM
-
-# A symbol stripping program
-STRIP=$lt_STRIP
-
-# Used to examine libraries when file_magic_cmd begins "file"
-MAGIC_CMD=$MAGIC_CMD
-
-# Used on cygwin: DLL creation program.
-DLLTOOL="$DLLTOOL"
-
-# Used on cygwin: object dumper.
-OBJDUMP="$OBJDUMP"
-
-# Used on cygwin: assembler.
-AS="$AS"
-
-# The name of the directory that contains temporary libtool files.
-objdir=$objdir
-
-# How to create reloadable object files.
-reload_flag=$lt_reload_flag
-reload_cmds=$lt_reload_cmds
-
-# How to pass a linker flag through the compiler.
-wl=$lt_lt_prog_compiler_wl_RC
-
-# Object file suffix (normally "o").
-objext="$ac_objext"
-
-# Old archive suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally ".so").
-shrext_cmds='$shrext_cmds'
-
-# Executable file suffix (normally "").
-exeext="$exeext"
-
-# Additional compiler flags for building library objects.
-pic_flag=$lt_lt_prog_compiler_pic_RC
-pic_mode=$pic_mode
-
-# What is the maximum length of a command?
-max_cmd_len=$lt_cv_sys_max_cmd_len
-
-# Does compiler simultaneously support -c and -o options?
-compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC
-
-# Must we lock files when doing compilation?
-need_locks=$lt_need_locks
-
-# 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
-
-# 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
-
-# Compiler flag to prevent dynamic linking.
-link_static_flag=$lt_lt_prog_compiler_static_RC
-
-# Compiler flag to turn off builtin functions.
-no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC
-
-# Compiler flag to allow reflexive dlopens.
-export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC
-
-# Compiler flag to generate shared objects directly from archives.
-whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC
-
-# Compiler flag to generate thread-safe objects.
-thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC
-
-# Library versioning type.
-version_type=$version_type
-
-# 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
-
-# Commands used to build and install an old-style archive.
-RANLIB=$lt_RANLIB
-old_archive_cmds=$lt_old_archive_cmds_RC
-old_postinstall_cmds=$lt_old_postinstall_cmds
-old_postuninstall_cmds=$lt_old_postuninstall_cmds
-
-# Create an old-style archive from a shared archive.
-old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC
-
-# Create a temporary old-style archive to link instead of a shared archive.
-old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC
-
-# Commands used to build and install a shared archive.
-archive_cmds=$lt_archive_cmds_RC
-archive_expsym_cmds=$lt_archive_expsym_cmds_RC
-postinstall_cmds=$lt_postinstall_cmds
-postuninstall_cmds=$lt_postuninstall_cmds
-
-# Commands used to build a loadable module (assumed same as above if empty)
-module_cmds=$lt_module_cmds_RC
-module_expsym_cmds=$lt_module_expsym_cmds_RC
-
-# Commands to strip libraries.
-old_striplib=$lt_old_striplib
-striplib=$lt_striplib
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predep_objects=$lt_predep_objects_RC
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdep_objects=$lt_postdep_objects_RC
-
-# Dependencies to place before the objects being linked to create a
-# shared library.
-predeps=$lt_predeps_RC
-
-# Dependencies to place after the objects being linked to create a
-# shared library.
-postdeps=$lt_postdeps_RC
-
-# The directories searched by this compiler when creating a shared
-# library
-compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_RC
-
-# The library search path used internally by the compiler when linking
-# a shared library.
-compiler_lib_search_path=$lt_compiler_lib_search_path_RC
-
-# 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
-
-# Flag that allows shared libraries with undefined symbols to be built.
-allow_undefined_flag=$lt_allow_undefined_flag_RC
-
-# Flag that forces no undefined symbols.
-no_undefined_flag=$lt_no_undefined_flag_RC
-
-# Commands used to finish a libtool library installation in a directory.
-finish_cmds=$lt_finish_cmds
-
-# Same as above, but a single script fragment to be evaled but not shown.
-finish_eval=$lt_finish_eval
-
-# 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 in a C name address pair
-global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
-
-# This is the shared library runtime path variable.
-runpath_var=$runpath_var
-
-# This is the shared library path variable.
-shlibpath_var=$shlibpath_var
-
-# Is shlibpath searched before the hard-coded library search path?
-shlibpath_overrides_runpath=$shlibpath_overrides_runpath
-
-# How to hardcode a shared library path into an executable.
-hardcode_action=$hardcode_action_RC
-
-# Whether we should hardcode library paths into libraries.
-hardcode_into_libs=$hardcode_into_libs
-
-# 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_RC
-
-# If ld is used when linking, flag to hardcode \$libdir into
-# a binary during linking. This must work even if \$libdir does
-# not exist.
-hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC
-
-# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct=$hardcode_direct_RC
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L=$hardcode_minus_L_RC
-
-# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
-# the resulting binary.
-hardcode_shlibpath_var=$hardcode_shlibpath_var_RC
-
-# 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_RC
-
-# Variables whose values should be saved in libtool wrapper scripts and
-# restored at relink time.
-variables_saved_for_relink="$variables_saved_for_relink"
-
-# Whether libtool must link a program against all its dependency libraries.
-link_all_deplibs=$link_all_deplibs_RC
-
-# Compile-time system search path for libraries
-sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
-
-# Run-time system search path for libraries
-sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
-
-# Fix the shell variable \$srcfile for the compiler.
-fix_srcfile_path=$lt_fix_srcfile_path
-
-# Set to yes if exported symbols are required.
-always_export_symbols=$always_export_symbols_RC
-
-# The commands to list exported symbols.
-export_symbols_cmds=$lt_export_symbols_cmds_RC
-
-# The commands to extract the exported symbol list from a shared archive.
-extract_expsyms_cmds=$lt_extract_expsyms_cmds
-
-# Symbols that should not be listed in the preloaded symbols.
-exclude_expsyms=$lt_exclude_expsyms_RC
-
-# Symbols that must always be exported.
-include_expsyms=$lt_include_expsyms_RC
-
-# ### END LIBTOOL TAG CONFIG: $tagname
-
-__EOF__
-
-
-else
-  # If there is no Makefile yet, we rely on a make rule to execute
-  # `config.status --recheck' to rerun these tests and create the
-  # libtool script then.
-  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
-  if test -f "$ltmain_in"; then
-    test -f Makefile && make "$ltmain"
-  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
-
-CC="$lt_save_CC"
-
-       ;;
-
-      *)
-       { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5
-echo "$as_me: error: Unsupported tag name: $tagname" >&2;}
-   { (exit 1); exit 1; }; }
-       ;;
-      esac
-
-      # Append the new tag name to the list of available tags.
-      if test -n "$tagname" ; then
-      available_tags="$available_tags $tagname"
-    fi
-    fi
-  done
-  IFS="$lt_save_ifs"
-
-  # Now substitute the updated list of available tags.
-  if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
-    mv "${ofile}T" "$ofile"
-    chmod +x "$ofile"
-  else
-    rm -f "${ofile}T"
-    { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5
-echo "$as_me: error: unable to update list of available tagged configurations." >&2;}
-   { (exit 1); exit 1; }; }
-  fi
-fi
-
-
-
-# This can be used to rebuild libtool when needed
-LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
-
-# Always use our own libtool.
-LIBTOOL='$(SHELL) $(top_builddir)/libtool'
-
-# Prevent multiple expansion
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-# Check whether --with-kernel was given.
-if test "${with_kernel+set}" = set; then
-  withval=$with_kernel; kbuilddir="$withval"; ksourcedir="$withval";
-fi
-
-
-# Check whether --with-kbuild was given.
-if test "${with_kbuild+set}" = set; then
-  withval=$with_kbuild; kbuilddir="$withval"
-fi
-
-
-# Check whether --with-ksource was given.
-if test "${with_ksource+set}" = set; then
-  withval=$with_ksource; ksourcedir="$withval"
-fi
-
-
-# Check whether --with-xtlibdir was given.
-if test "${with_xtlibdir+set}" = set; then
-  withval=$with_xtlibdir; xtlibdir="$withval"
-else
-  xtlibdir="${libexecdir}/xtables"
-fi
-
-# Check whether --enable-devel was given.
-if test "${enable_devel+set}" = set; then
-  enableval=$enable_devel; enable_devel="$enableval"
-else
-  enable_devel="yes"
-fi
-
-# Check whether --enable-libipq was given.
-if test "${enable_libipq+set}" = set; then
-  enableval=$enable_libipq;
-fi
-
-
-if test "${ac_cv_header_netinet_ip6_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for netinet/ip6.h" >&5
-echo $ECHO_N "checking for netinet/ip6.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_netinet_ip6_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_netinet_ip6_h" >&5
-echo "${ECHO_T}$ac_cv_header_netinet_ip6_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking netinet/ip6.h usability" >&5
-echo $ECHO_N "checking netinet/ip6.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <netinet/ip6.h>
-_ACEOF
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking netinet/ip6.h presence" >&5
-echo $ECHO_N "checking netinet/ip6.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <netinet/ip6.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: netinet/ip6.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: netinet/ip6.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netinet/ip6.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: netinet/ip6.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: netinet/ip6.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: netinet/ip6.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netinet/ip6.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: netinet/ip6.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netinet/ip6.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: netinet/ip6.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netinet/ip6.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: netinet/ip6.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netinet/ip6.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: netinet/ip6.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: netinet/ip6.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: netinet/ip6.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for netinet/ip6.h" >&5
-echo $ECHO_N "checking for netinet/ip6.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_netinet_ip6_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_netinet_ip6_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_netinet_ip6_h" >&5
-echo "${ECHO_T}$ac_cv_header_netinet_ip6_h" >&6; }
-
-fi
-if test $ac_cv_header_netinet_ip6_h = yes; then
-  :
-else
-  { { echo "$as_me:$LINENO: error: but we need that for IPv6" >&5
-echo "$as_me: error: but we need that for IPv6" >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-
-if test "${ac_cv_header_linux_dccp_h+set}" = set; then
-  { echo "$as_me:$LINENO: checking for linux/dccp.h" >&5
-echo $ECHO_N "checking for linux/dccp.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_linux_dccp_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_dccp_h" >&5
-echo "${ECHO_T}$ac_cv_header_linux_dccp_h" >&6; }
-else
-  # Is the header compilable?
-{ echo "$as_me:$LINENO: checking linux/dccp.h usability" >&5
-echo $ECHO_N "checking linux/dccp.h usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-$ac_includes_default
-#include <linux/dccp.h>
-_ACEOF
-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 "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_compile") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then
-  ac_header_compiler=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking linux/dccp.h presence" >&5
-echo $ECHO_N "checking linux/dccp.h presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-#include <linux/dccp.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
-  ac_status=$?
-  grep -v '^ *+' conftest.er1 >conftest.err
-  rm -f conftest.er1
-  cat conftest.err >&5
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); } >/dev/null && {
-        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       }; then
-  ac_header_preproc=yes
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-  ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
-  yes:no: )
-    { echo "$as_me:$LINENO: WARNING: linux/dccp.h: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: linux/dccp.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { echo "$as_me:$LINENO: WARNING: linux/dccp.h: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: linux/dccp.h: proceeding with the compiler's result" >&2;}
-    ac_header_preproc=yes
-    ;;
-  no:yes:* )
-    { echo "$as_me:$LINENO: WARNING: linux/dccp.h: present but cannot be compiled" >&5
-echo "$as_me: WARNING: linux/dccp.h: present but cannot be compiled" >&2;}
-    { echo "$as_me:$LINENO: WARNING: linux/dccp.h:     check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: linux/dccp.h:     check for missing prerequisite headers?" >&2;}
-    { echo "$as_me:$LINENO: WARNING: linux/dccp.h: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: linux/dccp.h: see the Autoconf documentation" >&2;}
-    { echo "$as_me:$LINENO: WARNING: linux/dccp.h:     section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: linux/dccp.h:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { echo "$as_me:$LINENO: WARNING: linux/dccp.h: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: linux/dccp.h: proceeding with the preprocessor's result" >&2;}
-    { echo "$as_me:$LINENO: WARNING: linux/dccp.h: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: linux/dccp.h: in the future, the compiler will take precedence" >&2;}
-
-    ;;
-esac
-{ echo "$as_me:$LINENO: checking for linux/dccp.h" >&5
-echo $ECHO_N "checking for linux/dccp.h... $ECHO_C" >&6; }
-if test "${ac_cv_header_linux_dccp_h+set}" = set; then
-  echo $ECHO_N "(cached) $ECHO_C" >&6
-else
-  ac_cv_header_linux_dccp_h=$ac_header_preproc
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_linux_dccp_h" >&5
-echo "${ECHO_T}$ac_cv_header_linux_dccp_h" >&6; }
-
-fi
-
-
-
-blacklist_modules="";
-if test "$ac_cv_header_linux_dccp_h" != "yes"; then
-       blacklist_modules="$blacklist_modules dccp";
-fi;
-
-
-
-
-if test "$enable_static" == "yes"; then
-  ENABLE_STATIC_TRUE=
-  ENABLE_STATIC_FALSE='#'
-else
-  ENABLE_STATIC_TRUE='#'
-  ENABLE_STATIC_FALSE=
-fi
-
-
-
-if test "$enable_shared" == "yes"; then
-  ENABLE_SHARED_TRUE=
-  ENABLE_SHARED_FALSE='#'
-else
-  ENABLE_SHARED_TRUE='#'
-  ENABLE_SHARED_FALSE=
-fi
-
-
-
-if test "$enable_devel" == "yes"; then
-  ENABLE_DEVEL_TRUE=
-  ENABLE_DEVEL_FALSE='#'
-else
-  ENABLE_DEVEL_TRUE='#'
-  ENABLE_DEVEL_FALSE=
-fi
-
-
-
-if test "$enable_libipq" == "yes"; then
-  ENABLE_LIBIPQ_TRUE=
-  ENABLE_LIBIPQ_FALSE='#'
-else
-  ENABLE_LIBIPQ_TRUE='#'
-  ENABLE_LIBIPQ_FALSE=
-fi
-
-
-regular_CFLAGS="-D_LARGEFILE_SOURCE=1 -D_LARGE_FILES -D_FILE_OFFSET_BITS=64 \
-       -D_REENTRANT -Wall -Waggregate-return -Wmissing-declarations \
-       -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes \
-       -Winline -pipe \
-       -DXTABLES_LIBDIR=\\\"\${xtlibdir}\\\" -DXTABLES_INTERNAL";
-kinclude_CFLAGS="";
-if [ -n "$kbuilddir" ]; then
-       kinclude_CFLAGS="$kinclude_CFLAGS -I $kbuilddir/include";
-fi;
-if [ -n "$ksourcedir" ]; then
-       kinclude_CFLAGS="$kinclude_CFLAGS -I $ksourcedir/include";
-fi;
-
-
-
-
-
-
-
-XTABLES_VERSION_MAJOR=1
-XTABLES_VERSION_MINOR=4
-XTABLES_VERSION_PATCH=1
-XTABLES_VERSION_EXTRA=.1
-
-
-
-
-
-ac_config_files="$ac_config_files Makefile extensions/GNUmakefile libipq/Makefile include/xtables.h"
-
-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_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
-echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
-      esac
-      case $ac_var in #(
-      _ | IFS | as_nl) ;; #(
-      *) $as_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
-    test "x$cache_file" != "x/dev/null" &&
-      { echo "$as_me:$LINENO: updating cache $cache_file" >&5
-echo "$as_me: updating cache $cache_file" >&6;}
-    cat confcache >$cache_file
-  else
-    { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
-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=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
-  # 1. Remove the extension, and $U if already installed.
-  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
-  ac_i=`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.
-  ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
-  ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
-  { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"AMDEP\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
-  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-if test -z "${ENABLE_STATIC_TRUE}" && test -z "${ENABLE_STATIC_FALSE}"; then
-  { { echo "$as_me:$LINENO: error: conditional \"ENABLE_STATIC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"ENABLE_STATIC\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-if test -z "${ENABLE_SHARED_TRUE}" && test -z "${ENABLE_SHARED_FALSE}"; then
-  { { echo "$as_me:$LINENO: error: conditional \"ENABLE_SHARED\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"ENABLE_SHARED\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-if test -z "${ENABLE_DEVEL_TRUE}" && test -z "${ENABLE_DEVEL_FALSE}"; then
-  { { echo "$as_me:$LINENO: error: conditional \"ENABLE_DEVEL\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"ENABLE_DEVEL\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-if test -z "${ENABLE_LIBIPQ_TRUE}" && test -z "${ENABLE_LIBIPQ_FALSE}"; then
-  { { echo "$as_me:$LINENO: error: conditional \"ENABLE_LIBIPQ\" was never defined.
-Usually this means the macro was only invoked conditionally." >&5
-echo "$as_me: error: conditional \"ENABLE_LIBIPQ\" was never defined.
-Usually this means the macro was only invoked conditionally." >&2;}
-   { (exit 1); exit 1; }; }
-fi
-
-: ${CONFIG_STATUS=./config.status}
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF
-#! $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}
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-## --------------------- ##
-## 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=:
-  # 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
-
-
-
-
-# PATH needs CR
-# 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
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
-  else
-    PATH_SEPARATOR=:
-  fi
-  rm -f conf$$.sh
-fi
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  as_unset=unset
-else
-  as_unset=false
-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.)
-as_nl='
-'
-IFS=" ""       $as_nl"
-
-# Find who we are.  Look in the path if we contain no directory separator.
-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
-  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  { (exit 1); exit 1; }
-fi
-
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-  fi
-done
-
-# Required to use basename.
-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
-
-
-# Name of the executable.
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-        X"$0" : 'X\(//\)$' \| \
-        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-           s//\1/
-           q
-         }
-         /^X\/\(\/\/\)$/{
-           s//\1/
-           q
-         }
-         /^X\/\(\/\).*/{
-           s//\1/
-           q
-         }
-         s/.*/./; q'`
-
-# CDPATH.
-$as_unset CDPATH
-
-
-
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
-
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line after each line using $LINENO; the second 'sed'
-  # does the real work.  The second script uses 'N' to pair each
-  # line-number line with the line containing $LINENO, and appends
-  # trailing '-' during substitution so that $LINENO is not a special
-  # case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # scripts with optimization help from Paolo Bonzini.  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" ||
-    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
-   { (exit 1); exit 1; }; }
-
-  # 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
-}
-
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
--n*)
-  case `echo 'x\c'` in
-  *c*) ECHO_T='        ';;     # ECHO_T is single tab character.
-  *)   ECHO_C='\c';;
-  esac;;
-*)
-  ECHO_N='-n';;
-esac
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-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
-fi
-echo >conf$$.file
-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 -p'.
-  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-    as_ln_s='cp -p'
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
-else
-  as_ln_s='cp -p'
-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=:
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
-  as_test_x='test -x'
-else
-  if ls -dL / >/dev/null 2>&1; then
-    as_ls_L_option=L
-  else
-    as_ls_L_option=
-  fi
-  as_test_x='
-    eval sh -c '\''
-      if test -d "$1"; then
-        test -d "$1/.";
-      else
-       case $1 in
-        -*)set "./$1";;
-       esac;
-       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
-       ???[sx]*):;;*)false;;esac;fi
-    '\'' sh
-  '
-fi
-as_executable_p=$as_test_x
-
-# 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
-
-# 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 iptables $as_me 1.4.1.1, which was
-generated by GNU Autoconf 2.61.  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
-
-cat >>$CONFIG_STATUS <<_ACEOF
-# 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_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
-
-Usage: $0 [OPTIONS] [FILE]...
-
-  -h, --help       print this help, then exit
-  -V, --version    print version number and configuration settings, then exit
-  -q, --quiet      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 <bug-autoconf@gnu.org>."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-ac_cs_version="\\
-iptables config.status 1.4.1.1
-configured by $0, generated by GNU Autoconf 2.61,
-  with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
-
-Copyright (C) 2006 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'
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-# If no file are specified by the user, then we need to provide default
-# value.  By we need to know if files were specified by the user.
-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=$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 )
-    echo "$ac_cs_version"; exit ;;
-  --debug | --debu | --deb | --de | --d | -d )
-    debug=: ;;
-  --file | --fil | --fi | --f )
-    $ac_shift
-    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
-    ac_need_defaults=false;;
-  --header | --heade | --head | --hea )
-    $ac_shift
-    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
-    ac_need_defaults=false;;
-  --he | --h)
-    # Conflict between --help and --header
-    { echo "$as_me: error: ambiguous option: $1
-Try \`$0 --help' for more information." >&2
-   { (exit 1); exit 1; }; };;
-  --help | --hel | -h )
-    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.
-  -*) { echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2
-   { (exit 1); exit 1; }; } ;;
-
-  *) ac_config_targets="$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
-if \$ac_cs_recheck; then
-  echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
-  CONFIG_SHELL=$SHELL
-  export CONFIG_SHELL
-  exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-exec 5>>config.log
-{
-  echo
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-  echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-#
-# INIT-COMMANDS
-#
-AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-# 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" ;;
-    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-    "extensions/GNUmakefile") CONFIG_FILES="$CONFIG_FILES extensions/GNUmakefile" ;;
-    "libipq/Makefile") CONFIG_FILES="$CONFIG_FILES libipq/Makefile" ;;
-    "include/xtables.h") CONFIG_FILES="$CONFIG_FILES include/xtables.h" ;;
-
-  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
-   { (exit 1); exit 1; }; };;
-  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=
-  trap 'exit_status=$?
-  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
-' 0
-  trap '{ (exit 1); exit 1; }' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
-  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
-}  ||
-{
-  tmp=./conf$$-$RANDOM
-  (umask 077 && mkdir "$tmp")
-} ||
-{
-   echo "$me: cannot create a temporary directory in ." >&2
-   { (exit 1); exit 1; }
-}
-
-#
-# Set up the sed scripts for CONFIG_FILES section.
-#
-
-# No need to generate the scripts if there are no CONFIG_FILES.
-# This happens for instance when ./config.status config.h
-if test -n "$CONFIG_FILES"; then
-
-_ACEOF
-
-
-
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
-  cat >conf$$subs.sed <<_ACEOF
-SHELL!$SHELL$ac_delim
-PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
-PACKAGE_NAME!$PACKAGE_NAME$ac_delim
-PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
-PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
-PACKAGE_STRING!$PACKAGE_STRING$ac_delim
-PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
-exec_prefix!$exec_prefix$ac_delim
-prefix!$prefix$ac_delim
-program_transform_name!$program_transform_name$ac_delim
-bindir!$bindir$ac_delim
-sbindir!$sbindir$ac_delim
-libexecdir!$libexecdir$ac_delim
-datarootdir!$datarootdir$ac_delim
-datadir!$datadir$ac_delim
-sysconfdir!$sysconfdir$ac_delim
-sharedstatedir!$sharedstatedir$ac_delim
-localstatedir!$localstatedir$ac_delim
-includedir!$includedir$ac_delim
-oldincludedir!$oldincludedir$ac_delim
-docdir!$docdir$ac_delim
-infodir!$infodir$ac_delim
-htmldir!$htmldir$ac_delim
-dvidir!$dvidir$ac_delim
-pdfdir!$pdfdir$ac_delim
-psdir!$psdir$ac_delim
-libdir!$libdir$ac_delim
-localedir!$localedir$ac_delim
-mandir!$mandir$ac_delim
-DEFS!$DEFS$ac_delim
-ECHO_C!$ECHO_C$ac_delim
-ECHO_N!$ECHO_N$ac_delim
-ECHO_T!$ECHO_T$ac_delim
-LIBS!$LIBS$ac_delim
-build_alias!$build_alias$ac_delim
-host_alias!$host_alias$ac_delim
-target_alias!$target_alias$ac_delim
-INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim
-INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim
-INSTALL_DATA!$INSTALL_DATA$ac_delim
-CYGPATH_W!$CYGPATH_W$ac_delim
-PACKAGE!$PACKAGE$ac_delim
-VERSION!$VERSION$ac_delim
-ACLOCAL!$ACLOCAL$ac_delim
-AUTOCONF!$AUTOCONF$ac_delim
-AUTOMAKE!$AUTOMAKE$ac_delim
-AUTOHEADER!$AUTOHEADER$ac_delim
-MAKEINFO!$MAKEINFO$ac_delim
-install_sh!$install_sh$ac_delim
-STRIP!$STRIP$ac_delim
-INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim
-mkdir_p!$mkdir_p$ac_delim
-AWK!$AWK$ac_delim
-SET_MAKE!$SET_MAKE$ac_delim
-am__leading_dot!$am__leading_dot$ac_delim
-AMTAR!$AMTAR$ac_delim
-am__tar!$am__tar$ac_delim
-am__untar!$am__untar$ac_delim
-CC!$CC$ac_delim
-CFLAGS!$CFLAGS$ac_delim
-LDFLAGS!$LDFLAGS$ac_delim
-CPPFLAGS!$CPPFLAGS$ac_delim
-ac_ct_CC!$ac_ct_CC$ac_delim
-EXEEXT!$EXEEXT$ac_delim
-OBJEXT!$OBJEXT$ac_delim
-DEPDIR!$DEPDIR$ac_delim
-am__include!$am__include$ac_delim
-am__quote!$am__quote$ac_delim
-AMDEP_TRUE!$AMDEP_TRUE$ac_delim
-AMDEP_FALSE!$AMDEP_FALSE$ac_delim
-AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim
-CCDEPMODE!$CCDEPMODE$ac_delim
-am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim
-am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim
-build!$build$ac_delim
-build_cpu!$build_cpu$ac_delim
-build_vendor!$build_vendor$ac_delim
-build_os!$build_os$ac_delim
-host!$host$ac_delim
-host_cpu!$host_cpu$ac_delim
-host_vendor!$host_vendor$ac_delim
-host_os!$host_os$ac_delim
-SED!$SED$ac_delim
-GREP!$GREP$ac_delim
-EGREP!$EGREP$ac_delim
-LN_S!$LN_S$ac_delim
-ECHO!$ECHO$ac_delim
-AR!$AR$ac_delim
-RANLIB!$RANLIB$ac_delim
-DSYMUTIL!$DSYMUTIL$ac_delim
-NMEDIT!$NMEDIT$ac_delim
-CPP!$CPP$ac_delim
-CXX!$CXX$ac_delim
-CXXFLAGS!$CXXFLAGS$ac_delim
-ac_ct_CXX!$ac_ct_CXX$ac_delim
-CXXDEPMODE!$CXXDEPMODE$ac_delim
-am__fastdepCXX_TRUE!$am__fastdepCXX_TRUE$ac_delim
-_ACEOF
-
-  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
-    break
-  elif $ac_last_try; then
-    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
-   { (exit 1); exit 1; }; }
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-
-ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
-if test -n "$ac_eof"; then
-  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
-  ac_eof=`expr $ac_eof + 1`
-fi
-
-cat >>$CONFIG_STATUS <<_ACEOF
-cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-_ACEOF
-sed '
-s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
-s/^/s,@/; s/!/@,|#_!!_#|/
-:n
-t n
-s/'"$ac_delim"'$/,g/; t
-s/$/\\/; p
-N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
-' >>$CONFIG_STATUS <conf$$subs.sed
-rm -f conf$$subs.sed
-cat >>$CONFIG_STATUS <<_ACEOF
-CEOF$ac_eof
-_ACEOF
-
-
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
-  cat >conf$$subs.sed <<_ACEOF
-am__fastdepCXX_FALSE!$am__fastdepCXX_FALSE$ac_delim
-CXXCPP!$CXXCPP$ac_delim
-F77!$F77$ac_delim
-FFLAGS!$FFLAGS$ac_delim
-ac_ct_F77!$ac_ct_F77$ac_delim
-LIBTOOL!$LIBTOOL$ac_delim
-blacklist_modules!$blacklist_modules$ac_delim
-ENABLE_STATIC_TRUE!$ENABLE_STATIC_TRUE$ac_delim
-ENABLE_STATIC_FALSE!$ENABLE_STATIC_FALSE$ac_delim
-ENABLE_SHARED_TRUE!$ENABLE_SHARED_TRUE$ac_delim
-ENABLE_SHARED_FALSE!$ENABLE_SHARED_FALSE$ac_delim
-ENABLE_DEVEL_TRUE!$ENABLE_DEVEL_TRUE$ac_delim
-ENABLE_DEVEL_FALSE!$ENABLE_DEVEL_FALSE$ac_delim
-ENABLE_LIBIPQ_TRUE!$ENABLE_LIBIPQ_TRUE$ac_delim
-ENABLE_LIBIPQ_FALSE!$ENABLE_LIBIPQ_FALSE$ac_delim
-regular_CFLAGS!$regular_CFLAGS$ac_delim
-kinclude_CFLAGS!$kinclude_CFLAGS$ac_delim
-kbuilddir!$kbuilddir$ac_delim
-ksourcedir!$ksourcedir$ac_delim
-xtlibdir!$xtlibdir$ac_delim
-XTABLES_VERSION_MAJOR!$XTABLES_VERSION_MAJOR$ac_delim
-XTABLES_VERSION_MINOR!$XTABLES_VERSION_MINOR$ac_delim
-XTABLES_VERSION_PATCH!$XTABLES_VERSION_PATCH$ac_delim
-XTABLES_VERSION_EXTRA!$XTABLES_VERSION_EXTRA$ac_delim
-LIBOBJS!$LIBOBJS$ac_delim
-LTLIBOBJS!$LTLIBOBJS$ac_delim
-_ACEOF
-
-  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 26; then
-    break
-  elif $ac_last_try; then
-    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
-   { (exit 1); exit 1; }; }
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-
-ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
-if test -n "$ac_eof"; then
-  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
-  ac_eof=`expr $ac_eof + 1`
-fi
-
-cat >>$CONFIG_STATUS <<_ACEOF
-cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
-_ACEOF
-sed '
-s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
-s/^/s,@/; s/!/@,|#_!!_#|/
-:n
-t n
-s/'"$ac_delim"'$/,g/; t
-s/$/\\/; p
-N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
-' >>$CONFIG_STATUS <conf$$subs.sed
-rm -f conf$$subs.sed
-cat >>$CONFIG_STATUS <<_ACEOF
-:end
-s/|#_!!_#|//g
-CEOF$ac_eof
-_ACEOF
-
-
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ 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[        ]*=/{
-s/:*\$(srcdir):*/:/
-s/:*\${srcdir}:*/:/
-s/:*@srcdir@:*/:/
-s/^\([^=]*=[    ]*\):*/\1/
-s/:*$//
-s/^[^=]*=[      ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-fi # test -n "$CONFIG_FILES"
-
-
-for ac_tag in  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS
-do
-  case $ac_tag in
-  :[FHLC]) ac_mode=$ac_tag; continue;;
-  esac
-  case $ac_mode$ac_tag in
-  :[FHL]*:*);;
-  :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
-echo "$as_me: error: Invalid tag $ac_tag." >&2;}
-   { (exit 1); exit 1; }; };;
-  :[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="$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 ||
-          { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
-echo "$as_me: error: cannot find input file: $ac_f" >&2;}
-   { (exit 1); exit 1; }; };;
-      esac
-      ac_file_inputs="$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 "`IFS=:
-         echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
-    if test x"$ac_file" != x-; then
-      configure_input="$ac_file.  $configure_input"
-      { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
-    fi
-
-    case $ac_tag in
-    *:-:* | *:-) cat >"$tmp/stdin";;
-    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 ||
-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"
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`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 ||
-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" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
-echo "$as_me: error: cannot create directory $as_dir" >&2;}
-   { (exit 1); exit 1; }; }; }
-  ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
-  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
-  # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`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
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-# 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=
-
-case `sed -n '/datarootdir/ {
-  p
-  q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p
-' $ac_file_inputs` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
-  { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-  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
-  sed "$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s&@configure_input@&$configure_input&;t t
-s&@top_builddir@&$ac_top_builddir_sub&;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
-$ac_datarootdir_hack
-" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[         ]*datarootdir[  ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
-  { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined." >&5
-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 "$tmp/stdin"
-  case $ac_file in
-  -) cat "$tmp/out"; rm -f "$tmp/out";;
-  *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
-  esac
- ;;
-  :H)
-  #
-  # CONFIG_HEADER
-  #
-_ACEOF
-
-# Transform confdefs.h into a sed script `conftest.defines', that
-# substitutes the proper values into config.h.in to produce config.h.
-rm -f conftest.defines conftest.tail
-# First, append a space to every undef/define line, to ease matching.
-echo 's/$/ /' >conftest.defines
-# Then, protect against being on the right side of a sed subst, or in
-# an unquoted here document, in config.status.  If some macros were
-# called several times there might be several #defines for the same
-# symbol, which is useless.  But do not sort them, since the last
-# AC_DEFINE must be honored.
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where
-# NAME is the cpp macro being defined, VALUE is the value it is being given.
-# PARAMS is the parameter list in the macro definition--in most cases, it's
-# just an empty string.
-ac_dA='s,^\\([  #]*\\)[^        ]*\\([  ]*'
-ac_dB='\\)[     (].*,\\1define\\2'
-ac_dC=' '
-ac_dD=' ,'
-
-uniq confdefs.h |
-  sed -n '
-       t rset
-       :rset
-       s/^[     ]*#[    ]*define[       ][      ]*//
-       t ok
-       d
-       :ok
-       s/[\\&,]/\\&/g
-       s/^\('"$ac_word_re"'\)\(([^()]*)\)[      ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p
-       s/^\('"$ac_word_re"'\)[  ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p
-  ' >>conftest.defines
-
-# Remove the space that was appended to ease matching.
-# Then 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.
-# (The regexp can be short, since the line contains either #define or #undef.)
-echo 's/ $//
-s,^[    #]*u.*,/* & */,' >>conftest.defines
-
-# Break up conftest.defines:
-ac_max_sed_lines=50
-
-# First sed command is:         sed -f defines.sed $ac_file_inputs >"$tmp/out1"
-# Second one is:        sed -f defines.sed "$tmp/out1" >"$tmp/out2"
-# Third one will be:    sed -f defines.sed "$tmp/out2" >"$tmp/out1"
-# et cetera.
-ac_in='$ac_file_inputs'
-ac_out='"$tmp/out1"'
-ac_nxt='"$tmp/out2"'
-
-while :
-do
-  # Write a here document:
-    cat >>$CONFIG_STATUS <<_ACEOF
-    # First, check the format of the line:
-    cat >"\$tmp/defines.sed" <<\\CEOF
-/^[     ]*#[    ]*undef[        ][      ]*$ac_word_re[  ]*\$/b def
-/^[     ]*#[    ]*define[       ][      ]*$ac_word_re[(         ]/b def
-b
-:def
-_ACEOF
-  sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS
-  echo 'CEOF
-    sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS
-  ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in
-  sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail
-  grep . conftest.tail >/dev/null || break
-  rm -f conftest.defines
-  mv conftest.tail conftest.defines
-done
-rm -f conftest.defines conftest.tail
-
-echo "ac_result=$ac_in" >>$CONFIG_STATUS
-cat >>$CONFIG_STATUS <<\_ACEOF
-  if test x"$ac_file" != x-; then
-    echo "/* $configure_input  */" >"$tmp/config.h"
-    cat "$ac_result" >>"$tmp/config.h"
-    if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then
-      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
-echo "$as_me: $ac_file is unchanged" >&6;}
-    else
-      rm -f $ac_file
-      mv "$tmp/config.h" $ac_file
-    fi
-  else
-    echo "/* $configure_input  */"
-    cat "$ac_result"
-  fi
-  rm -f "$tmp/out12"
-# Compute $ac_file's index in $config_headers.
-_am_stamp_count=1
-for _am_header in $config_headers :; do
-  case $_am_header in
-    $ac_file | $ac_file:* )
-      break ;;
-    * )
-      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
-  esac
-done
-echo "timestamp for $ac_file" >`$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 ||
-echo X$ac_file |
-    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)  { echo "$as_me:$LINENO: executing $ac_file commands" >&5
-echo "$as_me: executing $ac_file commands" >&6;}
- ;;
-  esac
-
-
-  case $ac_file$ac_mode in
-    "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; 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.
-  # So let's grep whole file.
-  if grep '^#.*generated by automake' $mf > /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 ||
-echo X"$mf" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)[^/].*/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\).*/{
-           s//\1/
-           q
-         }
-         s/.*/./; q'`
-  else
-    continue
-  fi
-  # Extract the definition of DEPDIR, am__include, and am__quote
-  # from the Makefile without running `make'.
-  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
-  test -z "$DEPDIR" && continue
-  am__include=`sed -n 's/^am__include = //p' < "$mf"`
-  test -z "am__include" && continue
-  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-  # When using ansi2knr, U may be empty or an underscore; expand it
-  U=`sed -n 's/^U = //p' < "$mf"`
-  # Find all dependency output files, they are included files with
-  # $(DEPDIR) in their names.  We invoke sed twice because it is the
-  # simplest approach to changing $(DEPDIR) to its actual value in the
-  # expansion.
-  for file in `sed -n "
-    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
-    # Make sure the directory exists.
-    test -f "$dirpart/$file" && continue
-    fdir=`$as_dirname -- "$file" ||
-$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-        X"$file" : 'X\(//\)[^/]' \| \
-        X"$file" : 'X\(//\)$' \| \
-        X"$file" : 'X\(/\)' \| . 2>/dev/null ||
-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
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`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 ||
-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" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
-echo "$as_me: error: cannot create directory $as_dir" >&2;}
-   { (exit 1); exit 1; }; }; }
-    # echo "creating $dirpart/$file"
-    echo '# dummy' > "$dirpart/$file"
-  done
-done
- ;;
-
-  esac
-done # for ac_tag
-
-
-{ (exit 0); exit 0; }
-_ACEOF
-chmod +x $CONFIG_STATUS
-ac_clean_files=$ac_clean_files_save
-
-
-# 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 || { (exit 1); exit 1; }
-fi
-
diff --git a/configure.ac b/configure.ac
deleted file mode 100644 (file)
index ce26e28..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-define([_XTABLES_VERSION_MAJOR], 1)
-define([_XTABLES_VERSION_MINOR], 4)
-define([_XTABLES_VERSION_PATCH], 1)
-define([_XTABLES_VERSION_EXTRA], .1)
-
-define([_XTABLES_VERSION],_XTABLES_VERSION_MAJOR._XTABLES_VERSION_MINOR._XTABLES_VERSION_PATCH[]_XTABLES_VERSION_EXTRA)
-
-AC_INIT([iptables], _XTABLES_VERSION)
-AC_CONFIG_HEADERS([config.h])
-AC_PROG_INSTALL
-AM_INIT_AUTOMAKE
-AC_PROG_CC
-AM_PROG_CC_C_O
-AC_DISABLE_STATIC
-AC_PROG_LIBTOOL
-
-AC_ARG_WITH([kernel],
-       AS_HELP_STRING([--with-kernel=PATH],
-       [Path to kernel source/build directory]),
-       [kbuilddir="$withval"; ksourcedir="$withval";])
-AC_ARG_WITH([kbuild],
-       AS_HELP_STRING([--with-kbuild=PATH],
-       [Path to kernel build directory [[/lib/modules/CURRENT/build]]]),
-       [kbuilddir="$withval"])
-AC_ARG_WITH([ksource],
-       AS_HELP_STRING([--with-ksource=PATH],
-       [Path to kernel source directory [[/lib/modules/CURRENT/source]]]),
-       [ksourcedir="$withval"])
-AC_ARG_WITH([xtlibdir],
-       AS_HELP_STRING([--with-xtlibdir=PATH],
-       [Path where to install Xtables extensions [[LIBEXECDIR/xtables]]]),
-       [xtlibdir="$withval"],
-       [xtlibdir="${libexecdir}/xtables"])
-AC_ARG_ENABLE([devel],
-       AS_HELP_STRING([--enable-devel],
-       [Install Xtables development headers]),
-       [enable_devel="$enableval"], [enable_devel="yes"])
-AC_ARG_ENABLE([libipq],
-       AS_HELP_STRING([--enable-libipq], [Build and install libipq]))
-
-AC_CHECK_HEADER([netinet/ip6.h], [], [AC_MSG_ERROR(but we need that for IPv6)])
-AC_CHECK_HEADER([linux/dccp.h])
-
-blacklist_modules="";
-if test "$ac_cv_header_linux_dccp_h" != "yes"; then
-       blacklist_modules="$blacklist_modules dccp";
-fi;
-AC_SUBST([blacklist_modules])
-
-AM_CONDITIONAL([ENABLE_STATIC], [test "$enable_static" == "yes"])
-AM_CONDITIONAL([ENABLE_SHARED], [test "$enable_shared" == "yes"])
-AM_CONDITIONAL([ENABLE_DEVEL], [test "$enable_devel" == "yes"])
-AM_CONDITIONAL([ENABLE_LIBIPQ], [test "$enable_libipq" == "yes"])
-
-regular_CFLAGS="-D_LARGEFILE_SOURCE=1 -D_LARGE_FILES -D_FILE_OFFSET_BITS=64 \
-       -D_REENTRANT -Wall -Waggregate-return -Wmissing-declarations \
-       -Wmissing-prototypes -Wredundant-decls -Wshadow -Wstrict-prototypes \
-       -Winline -pipe \
-       -DXTABLES_LIBDIR=\\\"\${xtlibdir}\\\" -DXTABLES_INTERNAL";
-kinclude_CFLAGS="";
-if [[ -n "$kbuilddir" ]]; then
-       kinclude_CFLAGS="$kinclude_CFLAGS -I $kbuilddir/include";
-fi;
-if [[ -n "$ksourcedir" ]]; then
-       kinclude_CFLAGS="$kinclude_CFLAGS -I $ksourcedir/include";
-fi;
-
-AC_SUBST([regular_CFLAGS])
-AC_SUBST([kinclude_CFLAGS])
-AC_SUBST([kbuilddir])
-AC_SUBST([ksourcedir])
-AC_SUBST([xtlibdir])
-
-XTABLES_VERSION_MAJOR=_XTABLES_VERSION_MAJOR
-XTABLES_VERSION_MINOR=_XTABLES_VERSION_MINOR
-XTABLES_VERSION_PATCH=_XTABLES_VERSION_PATCH
-XTABLES_VERSION_EXTRA=_XTABLES_VERSION_EXTRA
-AC_SUBST([XTABLES_VERSION_MAJOR])
-AC_SUBST([XTABLES_VERSION_MINOR])
-AC_SUBST([XTABLES_VERSION_PATCH])
-AC_SUBST([XTABLES_VERSION_EXTRA])
-
-AC_OUTPUT([Makefile extensions/GNUmakefile libipq/Makefile include/xtables.h])
diff --git a/copy-xid.patch b/copy-xid.patch
new file mode 100644 (file)
index 0000000..100cf99
--- /dev/null
@@ -0,0 +1,197 @@
+commit 12aa2a62d05523e66b104b3f6840c592309d3a05
+Author: S.Çağlar Onur <caglar@cs.princeton.edu>
+Date:   Sat Apr 3 01:17:41 2010 -0400
+
+    copy-xid
+
+diff --git a/extensions/libxt_CLASSIFY.c b/extensions/libxt_CLASSIFY.c
+index 82b8f4e..09c15c0 100644
+--- a/extensions/libxt_CLASSIFY.c
++++ b/extensions/libxt_CLASSIFY.c
+@@ -15,11 +15,13 @@ CLASSIFY_help(void)
+ {
+       printf(
+ "CLASSIFY target options:\n"
+-"--set-class MAJOR:MINOR    Set skb->priority value (always hexadecimal!)\n");
++"--set-class MAJOR:MINOR    Set skb->priority value (always hexadecimal!)\n"
++"  --add-mark                   Add value of skb->mark to skb->priority (PlanetLab specific)\n");
+ }
+ static const struct option CLASSIFY_opts[] = {
+       { "set-class", 1, NULL, '1' },
++      { "add-mark", 0, 0, '2' },
+       { .name = NULL }
+ };
+@@ -42,6 +44,8 @@ CLASSIFY_parse(int c, char **argv, int invert, unsigned int *flags,
+       struct xt_classify_target_info *clinfo
+               = (struct xt_classify_target_info *)(*target)->data;
++      clinfo->add_mark = 0;
++
+       switch (c) {
+       case '1':
+               if (CLASSIFY_string_to_priority(optarg, &clinfo->priority))
+@@ -53,6 +57,10 @@ CLASSIFY_parse(int c, char **argv, int invert, unsigned int *flags,
+               *flags = 1;
+               break;
++      case '2':
++              clinfo->add_mark = 1;
++              break;
++
+       default:
+               return 0;
+       }
+@@ -83,6 +91,9 @@ CLASSIFY_print(const void *ip,
+               (const struct xt_classify_target_info *)target->data;
+       printf("CLASSIFY set ");
+       CLASSIFY_print_class(clinfo->priority, numeric);
++
++      if (clinfo->add_mark)
++              printf ("add-mark ");
+ }
+ static void
+@@ -93,6 +104,9 @@ CLASSIFY_save(const void *ip, const struct xt_entry_target *target)
+       printf("--set-class %.4x:%.4x ",
+              TC_H_MAJ(clinfo->priority)>>16, TC_H_MIN(clinfo->priority));
++
++      if (clinfo->add_mark)
++              printf("--add-mark ");
+ }
+ static struct xtables_target classify_target = { 
+diff --git a/extensions/libxt_MARK.c b/extensions/libxt_MARK.c
+index dbfc7c0..db58a1b 100644
+--- a/extensions/libxt_MARK.c
++++ b/extensions/libxt_MARK.c
+@@ -19,6 +19,7 @@ enum {
+       XT_MARK_SET=0,
+       XT_MARK_AND,
+       XT_MARK_OR,
++      IPT_MARK_COPYXID,
+ };
+ struct xt_mark_target_info_v1 {
+@@ -36,13 +37,15 @@ static void MARK_help(void)
+ "MARK target options:\n"
+ "  --set-mark value                   Set nfmark value\n"
+ "  --and-mark value                   Binary AND the nfmark with value\n"
+-"  --or-mark  value                   Binary OR  the nfmark with value\n");
++"  --or-mark  value                   Binary OR  the nfmark with value\n"
++"  --copy-xid                         Set nfmark to be the connection xid (PlanetLab specific)\n");
+ }
+ static const struct option MARK_opts[] = {
+       { "set-mark", 1, NULL, '1' },
+       { "and-mark", 1, NULL, '2' },
+       { "or-mark", 1, NULL, '3' },
++      { "copy-xid", 1, 0, '4' },
+       { .name = NULL }
+ };
+@@ -52,6 +55,7 @@ static const struct option mark_tg_opts[] = {
+       {.name = "and-mark",  .has_arg = true, .val = '&'},
+       {.name = "or-mark",   .has_arg = true, .val = '|'},
+       {.name = "xor-mark",  .has_arg = true, .val = '^'},
++      {.name = "copy-xid",  .has_arg = true, .val = '%'},
+       { .name = NULL }
+ };
+@@ -63,6 +67,7 @@ static void mark_tg_help(void)
+ "  --set-mark value[/mask]   Clear bits in mask and OR value into nfmark\n"
+ "  --and-mark bits           Binary AND the nfmark with bits\n"
+ "  --or-mark bits            Binary OR the nfmark with bits\n"
++"  --copy-xid                Set nfmark to be the connection xid (PlanetLab specific)\n"
+ "  --xor-mask bits           Binary XOR the nfmark with bits\n"
+ "\n");
+ }
+@@ -126,6 +131,9 @@ MARK_parse_v1(int c, char **argv, int invert, unsigned int *flags,
+       case '3':
+               markinfo->mode = XT_MARK_OR;
+               break;
++      case '4':
++              markinfo->mode = IPT_MARK_COPYXID;
++              break;
+       default:
+               return 0;
+       }
+@@ -194,6 +202,12 @@ static int mark_tg_parse(int c, char **argv, int invert, unsigned int *flags,
+               info->mask = 0;
+               break;
++      case '%': /* --copy-xid */
++              xtables_param_act(XTF_ONE_ACTION, "MARK", *flags & F_MARK);
++              info->mark = ~0U; /* Consistency check */
++              info->mask = mask;
++              break;
++
+       default:
+               return false;
+       }
+@@ -206,7 +220,7 @@ static void mark_tg_check(unsigned int flags)
+ {
+       if (flags == 0)
+               xtables_error(PARAMETER_PROBLEM, "MARK: One of the --set-xmark, "
+-                         "--{and,or,xor,set}-mark options is required");
++                         "--{and,or,xor,set}-mark, or --copy-xid options is required");
+ }
+ static void
+@@ -249,6 +263,9 @@ static void MARK_print_v1(const void *ip, const struct xt_entry_target *target,
+       case XT_MARK_OR: 
+               printf("MARK or ");
+               break;
++      case IPT_MARK_COPYXID: 
++              printf("MARK copyxid ");
++              break;
+       }
+       print_mark(markinfo->mark);
+ }
+@@ -258,7 +275,9 @@ static void mark_tg_print(const void *ip, const struct xt_entry_target *target,
+ {
+       const struct xt_mark_tginfo2 *info = (const void *)target->data;
+-      if (info->mark == 0)
++      if (info->mark == ~0U)
++              printf("MARK copy-xid");
++      else if (info->mark == 0)
+               printf("MARK and 0x%x ", (unsigned int)(u_int32_t)~info->mask);
+       else if (info->mark == info->mask)
+               printf("MARK or 0x%x ", info->mark);
+@@ -285,6 +304,9 @@ static void MARK_save_v1(const void *ip, const struct xt_entry_target *target)
+       case XT_MARK_OR: 
+               printf("--or-mark ");
+               break;
++      case IPT_MARK_COPYXID:
++              printf("--copy-xid ");
++              break;
+       }
+       print_mark(markinfo->mark);
+ }
+@@ -293,7 +315,10 @@ static void mark_tg_save(const void *ip, const struct xt_entry_target *target)
+ {
+       const struct xt_mark_tginfo2 *info = (const void *)target->data;
+-      printf("--set-xmark 0x%x/0x%x ", info->mark, info->mask);
++      if (info->mark==~0U)
++              printf("--copy-xid 0x0");
++      else
++              printf("--set-xmark 0x%x/0x%x ", info->mark, info->mask);
+ }
+ static struct xtables_target mark_tg_reg[] = {
+diff --git a/include/linux/netfilter/xt_CLASSIFY.h b/include/linux/netfilter/xt_CLASSIFY.h
+index a813bf1..c5cec1d 100644
+--- a/include/linux/netfilter/xt_CLASSIFY.h
++++ b/include/linux/netfilter/xt_CLASSIFY.h
+@@ -5,6 +5,7 @@
+ struct xt_classify_target_info {
+       __u32 priority;
++      __u8 add_mark;
+ };
+ #endif /*_XT_CLASSIFY_H */
diff --git a/depcomp b/depcomp
deleted file mode 100755 (executable)
index 04701da..0000000
--- a/depcomp
+++ /dev/null
@@ -1,530 +0,0 @@
-#! /bin/sh
-# depcomp - compile a program generating dependencies as side-effects
-
-scriptversion=2005-07-09.11
-
-# Copyright (C) 1999, 2000, 2003, 2004, 2005 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 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 outputing dependencies.
-  libtool     Whether libtool is used (yes/no).
-
-Report bugs to <bug-automake@gnu.org>.
-EOF
-    exit $?
-    ;;
-  -v | --v*)
-    echo "depcomp $scriptversion"
-    exit $?
-    ;;
-esac
-
-if test -z "$depmode" || test -z "$source" || test -z "$object"; then
-  echo "depcomp: Variables source, object and depmode must be set" 1>&2
-  exit 1
-fi
-
-# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
-depfile=${depfile-`echo "$object" |
-  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
-tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
-
-rm -f "$tmpdepfile"
-
-# Some modes work just like other modes, but use different flags.  We
-# parameterize here, but still list the modes in the big case below,
-# to make depend.m4 easier to write.  Note that we *cannot* use a case
-# here, because this file can only contain one case statement.
-if test "$depmode" = hp; then
-  # HP compiler uses -M and no extra arg.
-  gccflag=-M
-  depmode=gcc
-fi
-
-if test "$depmode" = dashXmstdout; then
-   # This is just like dashmstdout with a different argument.
-   dashmflag=-xM
-   depmode=dashmstdout
-fi
-
-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.
-  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
-  stat=$?
-  if test $stat -eq 0; then :
-  else
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  mv "$tmpdepfile" "$depfile"
-  ;;
-
-gcc)
-## There are various ways to get dependency output from gcc.  Here's
-## why we pick this rather obscure method:
-## - Don't want to use -MD because we'd like the dependencies to end
-##   up in a subdir.  Having to rename by hand is ugly.
-##   (We might end up doing this anyway to support other compilers.)
-## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
-##   -MM, not -M (despite what the docs say).
-## - Using -M directly means running the compiler twice (even worse
-##   than renaming).
-  if test -z "$gccflag"; then
-    gccflag=-MD,
-  fi
-  "$@" -Wp,"$gccflag$tmpdepfile"
-  stat=$?
-  if test $stat -eq 0; then :
-  else
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  rm -f "$depfile"
-  echo "$object : \\" > "$depfile"
-  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
-## The second -e expression handles DOS-style file names with drive letters.
-  sed -e 's/^[^:]*: / /' \
-      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
-## This next piece of magic avoids the `deleted header file' problem.
-## The problem is that when a header file which appears in a .P file
-## is deleted, the dependency causes make to die (because there is
-## typically no way to rebuild the header).  We avoid this by adding
-## dummy dependencies for each header file.  Too bad gcc doesn't do
-## this for us directly.
-  tr ' ' '
-' < "$tmpdepfile" |
-## Some versions of gcc put a space before the `:'.  On the theory
-## that the space means something, we add a space to the output as
-## well.
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-hp)
-  # This case exists only to let depend.m4 do its work.  It works by
-  # looking at the text of this script.  This case will never be run,
-  # since it is checked for above.
-  exit 1
-  ;;
-
-sgi)
-  if test "$libtool" = yes; then
-    "$@" "-Wp,-MDupdate,$tmpdepfile"
-  else
-    "$@" -MDupdate "$tmpdepfile"
-  fi
-  stat=$?
-  if test $stat -eq 0; then :
-  else
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  rm -f "$depfile"
-
-  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
-    echo "$object : \\" > "$depfile"
-
-    # Clip off the initial element (the dependent).  Don't try to be
-    # clever and replace this with sed code, as IRIX sed won't handle
-    # lines with more than a fixed number of characters (4096 in
-    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
-    # the IRIX cc adds comments like `#:fec' to the end of the
-    # dependency line.
-    tr ' ' '
-' < "$tmpdepfile" \
-    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
-    tr '
-' ' ' >> $depfile
-    echo >> $depfile
-
-    # The second pass generates a dummy entry for each header file.
-    tr ' ' '
-' < "$tmpdepfile" \
-   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
-   >> $depfile
-  else
-    # The sourcefile does not contain any dependencies, so just
-    # store a dummy comment line, to avoid errors with the Makefile
-    # "include basename.Plo" scheme.
-    echo "#dummy" > "$depfile"
-  fi
-  rm -f "$tmpdepfile"
-  ;;
-
-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.
-  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
-  tmpdepfile="$stripped.u"
-  if test "$libtool" = yes; then
-    "$@" -Wc,-M
-  else
-    "$@" -M
-  fi
-  stat=$?
-
-  if test -f "$tmpdepfile"; then :
-  else
-    stripped=`echo "$stripped" | sed 's,^.*/,,'`
-    tmpdepfile="$stripped.u"
-  fi
-
-  if test $stat -eq 0; then :
-  else
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-
-  if test -f "$tmpdepfile"; then
-    outname="$stripped.o"
-    # Each line is of the form `foo.o: dependent.h'.
-    # Do two passes, one to just change these to
-    # `$object: dependent.h' and one to simply `dependent.h:'.
-    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
-    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
-  else
-    # The sourcefile does not contain any dependencies, so just
-    # store a dummy comment line, to avoid errors with the Makefile
-    # "include basename.Plo" scheme.
-    echo "#dummy" > "$depfile"
-  fi
-  rm -f "$tmpdepfile"
-  ;;
-
-icc)
-  # Intel's C compiler understands `-MD -MF file'.  However on
-  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
-  # ICC 7.0 will fill foo.d with something like
-  #    foo.o: sub/foo.c
-  #    foo.o: sub/foo.h
-  # which is wrong.  We want:
-  #    sub/foo.o: sub/foo.c
-  #    sub/foo.o: sub/foo.h
-  #    sub/foo.c:
-  #    sub/foo.h:
-  # ICC 7.1 will output
-  #    foo.o: sub/foo.c sub/foo.h
-  # and will wrap long lines using \ :
-  #    foo.o: sub/foo.c ... \
-  #     sub/foo.h ... \
-  #     ...
-
-  "$@" -MD -MF "$tmpdepfile"
-  stat=$?
-  if test $stat -eq 0; then :
-  else
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  rm -f "$depfile"
-  # Each line is of the form `foo.o: dependent.h',
-  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
-  # Do two passes, one to just change these to
-  # `$object: dependent.h' and one to simply `dependent.h:'.
-  sed "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"
-  ;;
-
-tru64)
-   # The Tru64 compiler uses -MD to generate dependencies as a side
-   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
-   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
-   # dependencies in `foo.d' instead, so we check for that too.
-   # Subdirectories are respected.
-   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
-   test "x$dir" = "x$object" && dir=
-   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
-
-   if test "$libtool" = yes; then
-      # With Tru64 cc, shared objects can also be used to make a
-      # static library.  This mecanism is used in libtool 1.4 series to
-      # handle both shared and static libraries in a single compilation.
-      # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
-      #
-      # With libtool 1.5 this exception was removed, and libtool now
-      # generates 2 separate objects for the 2 libraries.  These two
-      # compilations output dependencies in in $dir.libs/$base.o.d and
-      # in $dir$base.o.d.  We have to check for both files, because
-      # one of the two compilations can be disabled.  We should prefer
-      # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
-      # automatically cleaned when .libs/ is deleted, while ignoring
-      # the former would cause a distcleancheck panic.
-      tmpdepfile1=$dir.libs/$base.lo.d   # libtool 1.4
-      tmpdepfile2=$dir$base.o.d          # libtool 1.5
-      tmpdepfile3=$dir.libs/$base.o.d    # libtool 1.5
-      tmpdepfile4=$dir.libs/$base.d      # Compaq CCC V6.2-504
-      "$@" -Wc,-MD
-   else
-      tmpdepfile1=$dir$base.o.d
-      tmpdepfile2=$dir$base.d
-      tmpdepfile3=$dir$base.d
-      tmpdepfile4=$dir$base.d
-      "$@" -MD
-   fi
-
-   stat=$?
-   if test $stat -eq 0; then :
-   else
-      rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
-      exit $stat
-   fi
-
-   for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
-   do
-     test -f "$tmpdepfile" && break
-   done
-   if test -f "$tmpdepfile"; then
-      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
-      # That's a tab and a space in the [].
-      sed -e 's,^.*\.[a-z]*:[   ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
-   else
-      echo "#dummy" > "$depfile"
-   fi
-   rm -f "$tmpdepfile"
-   ;;
-
-#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 $1 != '--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:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
-  rm -f "$depfile"
-  cat < "$tmpdepfile" > "$depfile"
-  tr ' ' '
-' < "$tmpdepfile" | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-dashXmstdout)
-  # This case only exists to satisfy depend.m4.  It is never actually
-  # run, as this mode is specially recognized in the preamble.
-  exit 1
-  ;;
-
-makedepend)
-  "$@" || exit $?
-  # Remove any Libtool call
-  if test "$libtool" = yes; then
-    while test $1 != '--mode=compile'; do
-      shift
-    done
-    shift
-  fi
-  # X makedepend
-  shift
-  cleared=no
-  for arg in "$@"; do
-    case $cleared in
-    no)
-      set ""; shift
-      cleared=yes ;;
-    esac
-    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.
-    -*|$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"
-  cat < "$tmpdepfile" > "$depfile"
-  sed '1,2d' "$tmpdepfile" | tr ' ' '
-' | \
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile" "$tmpdepfile".bak
-  ;;
-
-cpp)
-  # Important note: in order to support this mode, a compiler *must*
-  # always write the preprocessed file to stdout.
-  "$@" || exit $?
-
-  # Remove the call to Libtool.
-  if test "$libtool" = yes; then
-    while test $1 != '--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, regardless of -o,
-  # because we must use -o when running libtool.
-  "$@" || exit $?
-  IFS=" "
-  for arg
-  do
-    case "$arg" in
-    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
-       set fnord "$@"
-       shift
-       shift
-       ;;
-    *)
-       set fnord "$@" "$arg"
-       shift
-       shift
-       ;;
-    esac
-  done
-  "$@" -E |
-  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
-  rm -f "$depfile"
-  echo "$object : \\" > "$depfile"
-  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::   \1 \\:p' >> "$depfile"
-  echo "       " >> "$depfile"
-  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-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-end: "$"
-# End:
diff --git a/extensions/GNUmakefile.in b/extensions/GNUmakefile.in
deleted file mode 100644 (file)
index 4a3bf4e..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-# -*- Makefile -*-
-
-top_builddir := @top_builddir@
-builddir     := @builddir@
-top_srcdir  := @top_srcdir@
-srcdir      := @srcdir@
-ksourcedir  := @ksourcedir@
-prefix      := @prefix@
-exec_prefix := @exec_prefix@
-libdir      := @libdir@
-libexecdir  := @libexecdir@
-xtlibdir    := @xtlibdir@
-
-CC             := @CC@
-CCLD           := ${CC}
-CFLAGS         := @CFLAGS@
-LDFLAGS        := @LDFLAGS@
-regular_CFLAGS := @regular_CFLAGS@
-kinclude_CFLAGS := @kinclude_CFLAGS@
-
-AM_CFLAGS      := ${regular_CFLAGS} -I${top_builddir}/include -I${top_srcdir}/include ${kinclude_CFLAGS}
-AM_DEPFLAGS     = -Wp,-MMD,$(@D)/.$(@F).d,-MT,$@
-
-ifeq (${V},)
-AM_LIBTOOL_SILENT = --silent
-AM_VERBOSE_CC     = @echo "  CC      " $@;
-AM_VERBOSE_CCLD   = @echo "  CCLD    " $@;
-AM_VERBOSE_CXX    = @echo "  CXX     " $@;
-AM_VERBOSE_CXXLD  = @echo "  CXXLD   " $@;
-AM_VERBOSE_AR     = @echo "  AR      " $@;
-AM_VERBOSE_GEN    = @echo "  GEN     " $@;
-endif
-
-#
-#      Wildcard module list
-#
-pfx_build_mod := $(patsubst ${srcdir}/libxt_%.c,%,$(wildcard ${srcdir}/libxt_*.c))
-pf4_build_mod := $(patsubst ${srcdir}/libipt_%.c,%,$(wildcard ${srcdir}/libipt_*.c))
-pf6_build_mod := $(patsubst ${srcdir}/libip6t_%.c,%,$(wildcard ${srcdir}/libip6t_*.c))
-pfx_build_mod := $(filter-out @blacklist_modules@,${pfx_build_mod})
-pf4_build_mod := $(filter-out @blacklist_modules@,${pf4_build_mod})
-pf6_build_mod := $(filter-out @blacklist_modules@,${pf6_build_mod})
-pfx_objs      := $(patsubst %,libxt_%.o,${pfx_build_mod})
-pf4_objs      := $(patsubst %,libipt_%.o,${pf4_build_mod})
-pf6_objs      := $(patsubst %,libip6t_%.o,${pf6_build_mod})
-pfx_solibs    := $(patsubst %,libxt_%.so,${pfx_build_mod})
-pf4_solibs    := $(patsubst %,libipt_%.so,${pf4_build_mod})
-pf6_solibs    := $(patsubst %,libip6t_%.so,${pf6_build_mod})
-
-
-#
-# Building blocks
-#
-targets := libext4.a libext6.a matches4.man matches6.man \
-           targets4.man targets6.man
-targets_install :=
-@ENABLE_STATIC_TRUE@ libext4_objs := ${pfx_objs} ${pf4_objs}
-@ENABLE_STATIC_TRUE@ libext6_objs := ${pfx_objs} ${pf6_objs}
-@ENABLE_SHARED_TRUE@ targets += ${pfx_solibs} ${pf4_solibs} ${pf6_solibs}
-@ENABLE_SHARED_TRUE@ targets_install += ${pfx_solibs} ${pf4_solibs} ${pf6_solibs}
-
-.SECONDARY:
-
-.PHONY: all install clean distclean FORCE
-
-all: ${targets}
-
-install: ${targets_install}
-       @mkdir -p "${DESTDIR}${xtlibdir}";
-       if test -n "${targets_install}"; then install -pm0755 $^ "${DESTDIR}${xtlibdir}/"; fi;
-
-clean:
-       rm -f *.o *.oo *.so *.a {matches,targets}[46].man initext4.c initext6.c;
-
-distclean: clean
-       rm -f .*.d .*.dd;
-
-init%.o: ${srcdir}/init%.c
-       ${AM_VERBOSE_CC} ${CC} ${AM_DEPFLAGS} ${AM_CFLAGS} -D_INIT=$*_init ${CFLAGS} -o $@ -c $<;
-
--include .*.d
-
-
-#
-#      Shared libraries
-#
-lib%.so: lib%.oo
-       ${AM_VERBOSE_CCLD} ${CCLD} ${AM_LDFLAGS} -shared ${LDFLAGS} -o $@ $<;
-
-lib%.oo: ${srcdir}/lib%.c
-       ${AM_VERBOSE_CC} ${CC} ${AM_DEPFLAGS} ${AM_CFLAGS} -D_INIT=lib$*_init -DPIC -fPIC ${CFLAGS} -o $@ -c $<;
-
-
-#
-#      Static bits
-#
-#      If static building is disabled, libext*.a will still be generated,
-#      but will be empty. This is good since we can do with less case
-#      handling code in the Makefiles.
-#
-lib%.o: ${srcdir}/lib%.c
-       ${AM_VERBOSE_CC} ${CC} ${AM_DEPFLAGS} ${AM_CFLAGS} -DNO_SHARED_LIBS=1 -D_INIT=lib$*_init ${CFLAGS} -o $@ -c $<;
-
-libext4.a: initext4.o ${libext4_objs}
-       ${AM_VERBOSE_AR} ${AR} crs $@ $^;
-
-libext6.a: initext6.o ${libext6_objs}
-       ${AM_VERBOSE_AR} ${AR} crs $@ $^;
-
-initext_func  := $(addprefix xt_,${pfx_build_mod}) $(addprefix ipt_,${pf4_build_mod})
-initext6_func := $(addprefix xt_,${pfx_build_mod}) $(addprefix ip6t_,${pf6_build_mod})
-
-.initext4.dd: FORCE
-       @echo "${initext_func}" >$@.tmp; \
-       cmp -s $@ $@.tmp || mv $@.tmp $@; \
-       rm -f $@.tmp;
-
-.initext6.dd: FORCE
-       @echo "${initext6_func}" >$@.tmp; \
-       cmp -s $@ $@.tmp || mv $@.tmp $@; \
-       rm -f $@.tmp;
-
-initext4.c: .initext4.dd
-       ${AM_VERBOSE_GEN}
-       @( \
-       echo "" >$@; \
-       for i in ${initext_func}; do \
-               echo "extern void lib$${i}_init(void);" >>$@; \
-       done; \
-       echo "void init_extensions(void);" >>$@; \
-       echo "void init_extensions(void)" >>$@; \
-       echo "{" >>$@; \
-       for i in ${initext_func}; do \
-               echo  " ""lib$${i}_init();" >>$@; \
-       done; \
-       echo "}" >>$@; \
-       );
-
-initext6.c: .initext6.dd
-       ${AM_VERBOSE_GEN}
-       @( \
-       echo "" >$@; \
-       for i in ${initext6_func}; do \
-               echo "extern void lib$${i}_init(void);" >>$@; \
-       done; \
-       echo "void init_extensions(void);" >>$@; \
-       echo "void init_extensions(void)" >>$@; \
-       echo "{" >>$@; \
-       for i in ${initext6_func}; do \
-               echo " ""lib$${i}_init();" >>$@; \
-       done; \
-       echo "}" >>$@; \
-       );
-
-#
-#      Manual pages
-#
-ex_matches = $(sort $(shell echo $(1) | grep -Eo '\b[a-z0-9]+\b'))
-ex_targets = $(sort $(shell echo $(1) | grep -Eo '\b[A-Z0-9]+\b'))
-man_run    = \
-       ${AM_VERBOSE_GEN} \
-       for ext in $(1); do \
-               f="${srcdir}/libxt_$$ext.man"; \
-               if [ -f "$$f" ]; then \
-                       echo ".SS $$ext"; \
-                       cat "$$f"; \
-                       continue; \
-               fi; \
-               f="${srcdir}/libipt_$$ext.man"; \
-               if [ -f "$$f" ]; then \
-                       echo ".SS $$ext"; \
-                       cat "$$f"; \
-                       continue; \
-               fi; \
-               f="${srcdir}/libip6t_$$ext.man"; \
-               if [ -f "$$f" ]; then \
-                       echo ".SS $$ext"; \
-                       cat "$$f"; \
-                       continue; \
-               fi; \
-       done >$@;
-
-matches4.man: .initext4.dd $(wildcard ${srcdir}/lib*.man)
-       $(call man_run,$(call ex_matches,${pfx_build_mod} ${pf4_build_mod}))
-
-matches6.man: .initext6.dd $(wildcard ${srcdir}/lib*.man)
-       $(call man_run,$(call ex_matches,${pfx_build_mod} ${pf6_build_mod}))
-
-targets4.man: .initext4.dd $(wildcard ${srcdir}/lib*.man)
-       $(call man_run,$(call ex_targets,${pfx_build_mod} ${pf4_build_mod}))
-
-targets6.man: .initext6.dd $(wildcard ${srcdir}/lib*.man)
-       $(call man_run,$(call ex_targets,${pfx_build_mod} ${pf6_build_mod}))
diff --git a/extensions/dscp_helper.c b/extensions/dscp_helper.c
deleted file mode 100644 (file)
index 217df09..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * DiffServ classname <-> DiffServ codepoint mapping functions.
- *
- * The latest list of the mappings can be found at:
- * <http://www.iana.org/assignments/dscp-registry>
- *
- * This code is released under the GNU GPL v2, 1991
- *
- * Author: Iain Barnes
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <xtables.h>
-
-
-static const struct ds_class
-{
-       const char *name;
-       unsigned int dscp;
-} ds_classes[] =
-{
-       { "CS0", 0x00 },
-       { "CS1", 0x08 },
-       { "CS2", 0x10 },
-       { "CS3", 0x18 },
-       { "CS4", 0x20 },
-       { "CS5", 0x28 },
-       { "CS6", 0x30 },
-       { "CS7", 0x38 },
-       { "BE", 0x00 },
-       { "AF11", 0x0a },
-       { "AF12", 0x0c },
-       { "AF13", 0x0e },
-       { "AF21", 0x12 },
-       { "AF22", 0x14 },
-       { "AF23", 0x16 },
-       { "AF31", 0x1a },
-       { "AF32", 0x1c },
-       { "AF33", 0x1e },
-       { "AF41", 0x22 },
-       { "AF42", 0x24 },
-       { "AF43", 0x26 },
-       { "EF", 0x2e }
-};
-
-
-
-static unsigned int
-class_to_dscp(const char *name)
-{
-       unsigned int i;
-
-       for (i = 0; i < sizeof(ds_classes) / sizeof(struct ds_class); i++) {
-               if (!strncasecmp(name, ds_classes[i].name,
-                                       strlen(ds_classes[i].name)))
-                       return ds_classes[i].dscp;
-       }
-
-       exit_error(PARAMETER_PROBLEM,
-                       "Invalid DSCP value `%s'\n", name);
-}
-
-
-#if 0
-static const char *
-dscp_to_name(unsigned int dscp)
-{
-       int i;
-
-       for (i = 0; i < sizeof(ds_classes) / sizeof(struct ds_class); i++) {
-               if (dscp == ds_classes[i].dscp)
-                       return ds_classes[i].name;
-       }
-
-
-       exit_error(PARAMETER_PROBLEM,
-                       "Invalid DSCP value `%d'\n", dscp);
-}
-#endif
-
diff --git a/extensions/libip6t_HL.c b/extensions/libip6t_HL.c
deleted file mode 100644 (file)
index e726a94..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * IPv6 Hop Limit Target module
- * Maciej Soltysiak <solt@dns.toxicfilms.tv>
- * Based on HW's ttl target
- * This program is distributed under the terms of GNU GPL
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <ip6tables.h>
-
-#include <linux/netfilter_ipv6/ip6_tables.h>
-#include <linux/netfilter_ipv6/ip6t_HL.h>
-
-#define IP6T_HL_USED   1
-
-static void HL_help(void)
-{
-       printf(
-"HL target options\n"
-"  --hl-set value              Set HL to <value 0-255>\n"
-"  --hl-dec value              Decrement HL by <value 1-255>\n"
-"  --hl-inc value              Increment HL by <value 1-255>\n");
-}
-
-static int HL_parse(int c, char **argv, int invert, unsigned int *flags,
-                    const void *entry, struct xt_entry_target **target)
-{
-       struct ip6t_HL_info *info = (struct ip6t_HL_info *) (*target)->data;
-       unsigned int value;
-
-       if (*flags & IP6T_HL_USED) {
-               exit_error(PARAMETER_PROBLEM, 
-                               "Can't specify HL option twice");
-       }
-
-       if (!optarg) 
-               exit_error(PARAMETER_PROBLEM, 
-                               "HL: You must specify a value");
-
-       if (check_inverse(optarg, &invert, NULL, 0))
-               exit_error(PARAMETER_PROBLEM,
-                               "HL: unexpected `!'");
-       
-       if (string_to_number(optarg, 0, 255, &value) == -1)     
-               exit_error(PARAMETER_PROBLEM,   
-                          "HL: Expected value between 0 and 255");
-
-       switch (c) {
-
-               case '1':
-                       info->mode = IP6T_HL_SET;
-                       break;
-
-               case '2':
-                       if (value == 0) {
-                               exit_error(PARAMETER_PROBLEM,
-                                       "HL: decreasing by 0?");
-                       }
-
-                       info->mode = IP6T_HL_DEC;
-                       break;
-
-               case '3':
-                       if (value == 0) {
-                               exit_error(PARAMETER_PROBLEM,
-                                       "HL: increasing by 0?");
-                       }
-
-                       info->mode = IP6T_HL_INC;
-                       break;
-
-               default:
-                       return 0;
-
-       }
-       
-       info->hop_limit = value;
-       *flags |= IP6T_HL_USED;
-
-       return 1;
-}
-
-static void HL_check(unsigned int flags)
-{
-       if (!(flags & IP6T_HL_USED))
-               exit_error(PARAMETER_PROBLEM,
-                               "HL: You must specify an action");
-}
-
-static void HL_save(const void *ip, const struct xt_entry_target *target)
-{
-       const struct ip6t_HL_info *info = 
-               (struct ip6t_HL_info *) target->data;
-
-       switch (info->mode) {
-               case IP6T_HL_SET:
-                       printf("--hl-set ");
-                       break;
-               case IP6T_HL_DEC:
-                       printf("--hl-dec ");
-                       break;
-
-               case IP6T_HL_INC:
-                       printf("--hl-inc ");
-                       break;
-       }
-       printf("%u ", info->hop_limit);
-}
-
-static void HL_print(const void *ip, const struct xt_entry_target *target,
-                     int numeric)
-{
-       const struct ip6t_HL_info *info =
-               (struct ip6t_HL_info *) target->data;
-
-       printf("HL ");
-       switch (info->mode) {
-               case IP6T_HL_SET:
-                       printf("set to ");
-                       break;
-               case IP6T_HL_DEC:
-                       printf("decrement by ");
-                       break;
-               case IP6T_HL_INC:
-                       printf("increment by ");
-                       break;
-       }
-       printf("%u ", info->hop_limit);
-}
-
-static const struct option HL_opts[] = {
-       { "hl-set", 1, NULL, '1' },
-       { "hl-dec", 1, NULL, '2' },
-       { "hl-inc", 1, NULL, '3' },
-       { .name = NULL }
-};
-
-static struct xtables_target hl_tg6_reg = {
-       .name           = "HL",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET6,
-       .size           = XT_ALIGN(sizeof(struct ip6t_HL_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct ip6t_HL_info)),
-       .help           = HL_help,
-       .parse          = HL_parse,
-       .final_check    = HL_check,
-       .print          = HL_print,
-       .save           = HL_save,
-       .extra_opts     = HL_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&hl_tg6_reg);
-}
diff --git a/extensions/libip6t_HL.man b/extensions/libip6t_HL.man
deleted file mode 100644 (file)
index bf46881..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-This is used to modify the Hop Limit field in IPv6 header. The Hop Limit field
-is similar to what is known as TTL value in IPv4.  Setting or incrementing the
-Hop Limit field can potentially be very dangerous, so it should be avoided at
-any cost. This target is only valid in
-.B mangle
-table.
-.TP
-.B Don't ever set or increment the value on packets that leave your local network!
-.TP
-.BI "--hl-set " "value"
-Set the Hop Limit to `value'.
-.TP
-.BI "--hl-dec " "value"
-Decrement the Hop Limit `value' times.
-.TP
-.BI "--hl-inc " "value"
-Increment the Hop Limit `value' times.
diff --git a/extensions/libip6t_LOG.c b/extensions/libip6t_LOG.c
deleted file mode 100644 (file)
index 53efae3..0000000
+++ /dev/null
@@ -1,275 +0,0 @@
-/* Shared library add-on to iptables to add LOG support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <syslog.h>
-#include <getopt.h>
-#include <ip6tables.h>
-#include <linux/netfilter_ipv6/ip6_tables.h>
-#include <linux/netfilter_ipv6/ip6t_LOG.h>
-
-#ifndef IP6T_LOG_UID   /* Old kernel */
-#define IP6T_LOG_UID   0x08
-#undef  IP6T_LOG_MASK
-#define IP6T_LOG_MASK  0x0f
-#endif
-
-#define LOG_DEFAULT_LEVEL LOG_WARNING
-
-/* Function which prints out usage message. */
-static void LOG_help(void)
-{
-       printf(
-"LOG target options:\n"
-" --log-level level            Level of logging (numeric or see syslog.conf)\n"
-" --log-prefix prefix          Prefix log messages with this prefix.\n"
-" --log-tcp-sequence           Log TCP sequence numbers.\n"
-" --log-tcp-options            Log TCP options.\n"
-" --log-ip-options             Log IP options.\n"
-" --log-uid                    Log UID owning the local socket.\n");
-}
-
-static const struct option LOG_opts[] = {
-       { .name = "log-level",        .has_arg = 1, .val = '!' },
-       { .name = "log-prefix",       .has_arg = 1, .val = '#' },
-       { .name = "log-tcp-sequence", .has_arg = 0, .val = '1' },
-       { .name = "log-tcp-options",  .has_arg = 0, .val = '2' },
-       { .name = "log-ip-options",   .has_arg = 0, .val = '3' },
-       { .name = "log-uid",          .has_arg = 0, .val = '4' },
-       { .name = NULL }
-};
-
-/* Initialize the target. */
-static void LOG_init(struct xt_entry_target *t)
-{
-       struct ip6t_log_info *loginfo = (struct ip6t_log_info *)t->data;
-
-       loginfo->level = LOG_DEFAULT_LEVEL;
-
-}
-
-struct ip6t_log_names {
-       const char *name;
-       unsigned int level;
-};
-
-static const struct ip6t_log_names ip6t_log_names[]
-= { { .name = "alert",   .level = LOG_ALERT },
-    { .name = "crit",    .level = LOG_CRIT },
-    { .name = "debug",   .level = LOG_DEBUG },
-    { .name = "emerg",   .level = LOG_EMERG },
-    { .name = "error",   .level = LOG_ERR },           /* DEPRECATED */
-    { .name = "info",    .level = LOG_INFO },
-    { .name = "notice",  .level = LOG_NOTICE },
-    { .name = "panic",   .level = LOG_EMERG },         /* DEPRECATED */
-    { .name = "warning", .level = LOG_WARNING }
-};
-
-static u_int8_t
-parse_level(const char *level)
-{
-       unsigned int lev = -1;
-       unsigned int set = 0;
-
-       if (string_to_number(level, 0, 7, &lev) == -1) {
-               unsigned int i = 0;
-
-               for (i = 0;
-                    i < sizeof(ip6t_log_names) / sizeof(struct ip6t_log_names);
-                    i++) {
-                       if (strncasecmp(level, ip6t_log_names[i].name,
-                                       strlen(level)) == 0) {
-                               if (set++)
-                                       exit_error(PARAMETER_PROBLEM,
-                                                  "log-level `%s' ambiguous",
-                                                  level);
-                               lev = ip6t_log_names[i].level;
-                       }
-               }
-
-               if (!set)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "log-level `%s' unknown", level);
-       }
-
-       return (u_int8_t)lev;
-}
-
-#define IP6T_LOG_OPT_LEVEL 0x01
-#define IP6T_LOG_OPT_PREFIX 0x02
-#define IP6T_LOG_OPT_TCPSEQ 0x04
-#define IP6T_LOG_OPT_TCPOPT 0x08
-#define IP6T_LOG_OPT_IPOPT 0x10
-#define IP6T_LOG_OPT_UID 0x20
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int LOG_parse(int c, char **argv, int invert, unsigned int *flags,
-                     const void *entry, struct xt_entry_target **target)
-{
-       struct ip6t_log_info *loginfo = (struct ip6t_log_info *)(*target)->data;
-
-       switch (c) {
-       case '!':
-               if (*flags & IP6T_LOG_OPT_LEVEL)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can't specify --log-level twice");
-
-               if (check_inverse(optarg, &invert, NULL, 0))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Unexpected `!' after --log-level");
-
-               loginfo->level = parse_level(optarg);
-               *flags |= IP6T_LOG_OPT_LEVEL;
-               break;
-
-       case '#':
-               if (*flags & IP6T_LOG_OPT_PREFIX)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can't specify --log-prefix twice");
-
-               if (check_inverse(optarg, &invert, NULL, 0))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Unexpected `!' after --log-prefix");
-
-               if (strlen(optarg) > sizeof(loginfo->prefix) - 1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Maximum prefix length %u for --log-prefix",
-                                  (unsigned int)sizeof(loginfo->prefix) - 1);
-
-               if (strlen(optarg) == 0)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "No prefix specified for --log-prefix");
-
-               if (strlen(optarg) != strlen(strtok(optarg, "\n")))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Newlines not allowed in --log-prefix");
-
-               strcpy(loginfo->prefix, optarg);
-               *flags |= IP6T_LOG_OPT_PREFIX;
-               break;
-
-       case '1':
-               if (*flags & IP6T_LOG_OPT_TCPSEQ)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can't specify --log-tcp-sequence "
-                                  "twice");
-
-               loginfo->logflags |= IP6T_LOG_TCPSEQ;
-               *flags |= IP6T_LOG_OPT_TCPSEQ;
-               break;
-
-       case '2':
-               if (*flags & IP6T_LOG_OPT_TCPOPT)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can't specify --log-tcp-options twice");
-
-               loginfo->logflags |= IP6T_LOG_TCPOPT;
-               *flags |= IP6T_LOG_OPT_TCPOPT;
-               break;
-
-       case '3':
-               if (*flags & IP6T_LOG_OPT_IPOPT)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can't specify --log-ip-options twice");
-
-               loginfo->logflags |= IP6T_LOG_IPOPT;
-               *flags |= IP6T_LOG_OPT_IPOPT;
-               break;
-
-       case '4':
-               if (*flags & IP6T_LOG_OPT_UID)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can't specify --log-uid twice");
-
-               loginfo->logflags |= IP6T_LOG_UID;
-               *flags |= IP6T_LOG_OPT_UID;
-               break;
-
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-/* Prints out the targinfo. */
-static void LOG_print(const void *ip, const struct xt_entry_target *target,
-                      int numeric)
-{
-       const struct ip6t_log_info *loginfo
-               = (const struct ip6t_log_info *)target->data;
-       unsigned int i = 0;
-
-       printf("LOG ");
-       if (numeric)
-               printf("flags %u level %u ",
-                      loginfo->logflags, loginfo->level);
-       else {
-               for (i = 0;
-                    i < sizeof(ip6t_log_names) / sizeof(struct ip6t_log_names);
-                    i++) {
-                       if (loginfo->level == ip6t_log_names[i].level) {
-                               printf("level %s ", ip6t_log_names[i].name);
-                               break;
-                       }
-               }
-               if (i == sizeof(ip6t_log_names) / sizeof(struct ip6t_log_names))
-                       printf("UNKNOWN level %u ", loginfo->level);
-               if (loginfo->logflags & IP6T_LOG_TCPSEQ)
-                       printf("tcp-sequence ");
-               if (loginfo->logflags & IP6T_LOG_TCPOPT)
-                       printf("tcp-options ");
-               if (loginfo->logflags & IP6T_LOG_IPOPT)
-                       printf("ip-options ");
-               if (loginfo->logflags & IP6T_LOG_UID)
-                       printf("uid ");
-               if (loginfo->logflags & ~(IP6T_LOG_MASK))
-                       printf("unknown-flags ");
-       }
-
-       if (strcmp(loginfo->prefix, "") != 0)
-               printf("prefix `%s' ", loginfo->prefix);
-}
-
-/* Saves the union ip6t_targinfo in parsable form to stdout. */
-static void LOG_save(const void *ip, const struct xt_entry_target *target)
-{
-       const struct ip6t_log_info *loginfo
-               = (const struct ip6t_log_info *)target->data;
-
-       if (strcmp(loginfo->prefix, "") != 0)
-               printf("--log-prefix \"%s\" ", loginfo->prefix);
-
-       if (loginfo->level != LOG_DEFAULT_LEVEL)
-               printf("--log-level %d ", loginfo->level);
-
-       if (loginfo->logflags & IP6T_LOG_TCPSEQ)
-               printf("--log-tcp-sequence ");
-       if (loginfo->logflags & IP6T_LOG_TCPOPT)
-               printf("--log-tcp-options ");
-       if (loginfo->logflags & IP6T_LOG_IPOPT)
-               printf("--log-ip-options ");
-       if (loginfo->logflags & IP6T_LOG_UID)
-               printf("--log-uid ");
-}
-
-static struct xtables_target log_tg6_reg = {
-    .name          = "LOG",
-    .version       = XTABLES_VERSION,
-    .family        = PF_INET6,
-    .size          = XT_ALIGN(sizeof(struct ip6t_log_info)),
-    .userspacesize = XT_ALIGN(sizeof(struct ip6t_log_info)),
-    .help          = LOG_help,
-    .init          = LOG_init,
-    .parse         = LOG_parse,
-    .print         = LOG_print,
-    .save          = LOG_save,
-    .extra_opts    = LOG_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&log_tg6_reg);
-}
diff --git a/extensions/libip6t_LOG.man b/extensions/libip6t_LOG.man
deleted file mode 100644 (file)
index 9d51fd4..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-Turn on kernel logging of matching packets.  When this option is set
-for a rule, the Linux kernel will print some information on all
-matching packets (like most IPv6 IPv6-header fields) via the kernel log
-(where it can be read with
-.I dmesg
-or 
-.IR syslogd (8)).
-This is a "non-terminating target", i.e. rule traversal continues at
-the next rule.  So if you want to LOG the packets you refuse, use two
-separate rules with the same matching criteria, first using target LOG
-then DROP (or REJECT).
-.TP
-.BI "--log-level " "level"
-Level of logging (numeric or see \fIsyslog.conf\fP(5)).
-.TP
-.BI "--log-prefix " "prefix"
-Prefix log messages with the specified prefix; up to 29 letters long,
-and useful for distinguishing messages in the logs.
-.TP
-.B --log-tcp-sequence
-Log TCP sequence numbers. This is a security risk if the log is
-readable by users.
-.TP
-.B --log-tcp-options
-Log options from the TCP packet header.
-.TP
-.B --log-ip-options
-Log options from the IPv6 packet header.
-.TP
-.B --log-uid
-Log the userid of the process which generated the packet.
diff --git a/extensions/libip6t_REJECT.c b/extensions/libip6t_REJECT.c
deleted file mode 100644 (file)
index d4245e5..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-/* Shared library add-on to iptables to add customized REJECT support.
- *
- * (C) 2000 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
- * 
- * ported to IPv6 by Harald Welte <laforge@gnumonks.org>
- *
- */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <ip6tables.h>
-#include <linux/netfilter_ipv6/ip6_tables.h>
-#include <linux/netfilter_ipv6/ip6t_REJECT.h>
-
-struct reject_names {
-       const char *name;
-       const char *alias;
-       enum ip6t_reject_with with;
-       const char *desc;
-};
-
-static const struct reject_names reject_table[] = {
-       {"icmp6-no-route", "no-route",
-               IP6T_ICMP6_NO_ROUTE, "ICMPv6 no route"},
-       {"icmp6-adm-prohibited", "adm-prohibited",
-               IP6T_ICMP6_ADM_PROHIBITED, "ICMPv6 administratively prohibited"},
-#if 0
-       {"icmp6-not-neighbor", "not-neighbor"},
-               IP6T_ICMP6_NOT_NEIGHBOR, "ICMPv6 not a neighbor"},
-#endif
-       {"icmp6-addr-unreachable", "addr-unreach",
-               IP6T_ICMP6_ADDR_UNREACH, "ICMPv6 address unreachable"},
-       {"icmp6-port-unreachable", "port-unreach",
-               IP6T_ICMP6_PORT_UNREACH, "ICMPv6 port unreachable"},
-       {"tcp-reset", "tcp-reset",
-               IP6T_TCP_RESET, "TCP RST packet"}
-};
-
-static void
-print_reject_types(void)
-{
-       unsigned int i;
-
-       printf("Valid reject types:\n");
-
-       for (i = 0; i < sizeof(reject_table)/sizeof(struct reject_names); i++) {
-               printf("    %-25s\t%s\n", reject_table[i].name, reject_table[i].desc);
-               printf("    %-25s\talias\n", reject_table[i].alias);
-       }
-       printf("\n");
-}
-
-/* Saves the union ipt_targinfo in parsable form to stdout. */
-
-/* Function which prints out usage message. */
-static void REJECT_help(void)
-{
-       printf(
-"REJECT target options:\n"
-"--reject-with type              drop input packet and send back\n"
-"                                a reply packet according to type:\n");
-
-       print_reject_types();
-}
-
-static const struct option REJECT_opts[] = {
-       { "reject-with", 1, NULL, '1' },
-       { .name = NULL }
-};
-
-/* Allocate and initialize the target. */
-static void REJECT_init(struct xt_entry_target *t)
-{
-       struct ip6t_reject_info *reject = (struct ip6t_reject_info *)t->data;
-
-       /* default */
-       reject->with = IP6T_ICMP6_PORT_UNREACH;
-
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int REJECT_parse(int c, char **argv, int invert, unsigned int *flags,
-                        const void *entry, struct xt_entry_target **target)
-{
-       struct ip6t_reject_info *reject = 
-               (struct ip6t_reject_info *)(*target)->data;
-       unsigned int limit = sizeof(reject_table)/sizeof(struct reject_names);
-       unsigned int i;
-
-       switch(c) {
-       case '1':
-               if (check_inverse(optarg, &invert, NULL, 0))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Unexpected `!' after --reject-with");
-               for (i = 0; i < limit; i++) {
-                       if ((strncasecmp(reject_table[i].name, optarg, strlen(optarg)) == 0)
-                           || (strncasecmp(reject_table[i].alias, optarg, strlen(optarg)) == 0)) {
-                               reject->with = reject_table[i].with;
-                               return 1;
-                       }
-               }
-               exit_error(PARAMETER_PROBLEM, "unknown reject type `%s'",optarg);
-       default:
-               /* Fall through */
-               break;
-       }
-       return 0;
-}
-
-/* Prints out ipt_reject_info. */
-static void REJECT_print(const void *ip, const struct xt_entry_target *target,
-                         int numeric)
-{
-       const struct ip6t_reject_info *reject
-               = (const struct ip6t_reject_info *)target->data;
-       unsigned int i;
-
-       for (i = 0; i < sizeof(reject_table)/sizeof(struct reject_names); i++) {
-               if (reject_table[i].with == reject->with)
-                       break;
-       }
-       printf("reject-with %s ", reject_table[i].name);
-}
-
-/* Saves ipt_reject in parsable form to stdout. */
-static void REJECT_save(const void *ip, const struct xt_entry_target *target)
-{
-       const struct ip6t_reject_info *reject
-               = (const struct ip6t_reject_info *)target->data;
-       unsigned int i;
-
-       for (i = 0; i < sizeof(reject_table)/sizeof(struct reject_names); i++)
-               if (reject_table[i].with == reject->with)
-                       break;
-
-       printf("--reject-with %s ", reject_table[i].name);
-}
-
-static struct xtables_target reject_tg6_reg = {
-       .name = "REJECT",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET6,
-       .size           = XT_ALIGN(sizeof(struct ip6t_reject_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct ip6t_reject_info)),
-       .help           = REJECT_help,
-       .init           = REJECT_init,
-       .parse          = REJECT_parse,
-       .print          = REJECT_print,
-       .save           = REJECT_save,
-       .extra_opts     = REJECT_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&reject_tg6_reg);
-}
diff --git a/extensions/libip6t_REJECT.man b/extensions/libip6t_REJECT.man
deleted file mode 100644 (file)
index 909d826..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-This is used to send back an error packet in response to the matched
-packet: otherwise it is equivalent to 
-.B DROP
-so it is a terminating TARGET, ending rule traversal.
-This target is only valid in the
-.BR INPUT ,
-.B FORWARD
-and
-.B OUTPUT
-chains, and user-defined chains which are only called from those
-chains.  The following option controls the nature of the error packet
-returned:
-.TP
-.BI "--reject-with " "type"
-The type given can be
-.nf
-.B " icmp6-no-route"
-.B " no-route"
-.B " icmp6-adm-prohibited"
-.B " adm-prohibited"
-.B " icmp6-addr-unreachable"
-.B " addr-unreach"
-.B " icmp6-port-unreachable"
-.B " port-unreach"
-.fi
-which return the appropriate ICMPv6 error message (\fBport-unreach\fP is
-the default). Finally, the option
-.B tcp-reset
-can be used on rules which only match the TCP protocol: this causes a
-TCP RST packet to be sent back.  This is mainly useful for blocking 
-.I ident
-(113/tcp) probes which frequently occur when sending mail to broken mail
-hosts (which won't accept your mail otherwise).
-.B tcp-reset
-can only be used with kernel versions 2.6.14 or latter.
-
diff --git a/extensions/libip6t_ah.c b/extensions/libip6t_ah.c
deleted file mode 100644 (file)
index ce2d7fc..0000000
+++ /dev/null
@@ -1,213 +0,0 @@
-/* Shared library add-on to ip6tables to add AH support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <errno.h>
-#include <ip6tables.h>
-#include <linux/netfilter_ipv6/ip6t_ah.h>
-                                        
-/* Function which prints out usage message. */
-static void ah_help(void)
-{
-       printf(
-"ah match options:\n"
-" --ahspi [!] spi[:spi]         match spi (range)\n"
-" --ahlen [!] length            total length of this header\n"
-" --ahres                       check the reserved filed, too\n");
-}
-
-static const struct option ah_opts[] = {
-       { .name = "ahspi", .has_arg = 1, .val = '1' },
-       { .name = "ahlen", .has_arg = 1, .val = '2' },
-       { .name = "ahres", .has_arg = 0, .val = '3' },
-       { .name = NULL }
-};
-
-static u_int32_t
-parse_ah_spi(const char *spistr, const char *typestr)
-{
-       unsigned long int spi;
-       char* ep;
-
-       spi = strtoul(spistr, &ep, 0);
-
-       if ( spistr == ep )
-               exit_error(PARAMETER_PROBLEM,
-                          "AH no valid digits in %s `%s'", typestr, spistr);
-
-       if ( spi == ULONG_MAX  && errno == ERANGE )
-               exit_error(PARAMETER_PROBLEM,
-                          "%s `%s' specified too big: would overflow",
-                          typestr, spistr);
-
-       if ( *spistr != '\0'  && *ep != '\0' )
-               exit_error(PARAMETER_PROBLEM,
-                          "AH error parsing %s `%s'", typestr, spistr);
-
-       return (u_int32_t) spi;
-}
-
-static void
-parse_ah_spis(const char *spistring, u_int32_t *spis)
-{
-       char *buffer;
-       char *cp;
-
-       buffer = strdup(spistring);
-       if ((cp = strchr(buffer, ':')) == NULL)
-               spis[0] = spis[1] = parse_ah_spi(buffer, "spi");
-       else {
-               *cp = '\0';
-               cp++;
-
-               spis[0] = buffer[0] ? parse_ah_spi(buffer, "spi") : 0;
-               spis[1] = cp[0] ? parse_ah_spi(cp, "spi") : 0xFFFFFFFF;
-       }
-       free(buffer);
-}
-
-/* Initialize the match. */
-static void ah_init(struct xt_entry_match *m)
-{
-       struct ip6t_ah *ahinfo = (struct ip6t_ah *)m->data;
-
-       ahinfo->spis[1] = 0xFFFFFFFF;
-       ahinfo->hdrlen = 0;
-       ahinfo->hdrres = 0;
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int ah_parse(int c, char **argv, int invert, unsigned int *flags,
-                    const void *entry, struct xt_entry_match **match)
-{
-       struct ip6t_ah *ahinfo = (struct ip6t_ah *)(*match)->data;
-
-       switch (c) {
-       case '1':
-               if (*flags & IP6T_AH_SPI)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--ahspi' allowed");
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_ah_spis(argv[optind-1], ahinfo->spis);
-               if (invert)
-                       ahinfo->invflags |= IP6T_AH_INV_SPI;
-               *flags |= IP6T_AH_SPI;
-               break;
-       case '2':
-               if (*flags & IP6T_AH_LEN)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--ahlen' allowed");
-               check_inverse(optarg, &invert, &optind, 0);
-               ahinfo->hdrlen = parse_ah_spi(argv[optind-1], "length");
-               if (invert)
-                       ahinfo->invflags |= IP6T_AH_INV_LEN;
-               *flags |= IP6T_AH_LEN;
-               break;
-       case '3':
-               if (*flags & IP6T_AH_RES)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--ahres' allowed");
-               ahinfo->hdrres = 1;
-               *flags |= IP6T_AH_RES;
-               break;
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static void
-print_spis(const char *name, u_int32_t min, u_int32_t max,
-           int invert)
-{
-       const char *inv = invert ? "!" : "";
-
-       if (min != 0 || max != 0xFFFFFFFF || invert) {
-               if (min == max)
-                       printf("%s:%s%u ", name, inv, min);
-               else
-                       printf("%ss:%s%u:%u ", name, inv, min, max);
-       }
-}
-
-static void
-print_len(const char *name, u_int32_t len, int invert)
-{
-       const char *inv = invert ? "!" : "";
-
-       if (len != 0 || invert)
-               printf("%s:%s%u ", name, inv, len);
-}
-
-/* Prints out the union ip6t_matchinfo. */
-static void ah_print(const void *ip, const struct xt_entry_match *match,
-                     int numeric)
-{
-       const struct ip6t_ah *ah = (struct ip6t_ah *)match->data;
-
-       printf("ah ");
-       print_spis("spi", ah->spis[0], ah->spis[1],
-                   ah->invflags & IP6T_AH_INV_SPI);
-       print_len("length", ah->hdrlen, 
-                   ah->invflags & IP6T_AH_INV_LEN);
-
-       if (ah->hdrres)
-               printf("reserved ");
-
-       if (ah->invflags & ~IP6T_AH_INV_MASK)
-               printf("Unknown invflags: 0x%X ",
-                      ah->invflags & ~IP6T_AH_INV_MASK);
-}
-
-/* Saves the union ip6t_matchinfo in parsable form to stdout. */
-static void ah_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct ip6t_ah *ahinfo = (struct ip6t_ah *)match->data;
-
-       if (!(ahinfo->spis[0] == 0
-           && ahinfo->spis[1] == 0xFFFFFFFF)) {
-               printf("--ahspi %s", 
-                       (ahinfo->invflags & IP6T_AH_INV_SPI) ? "! " : "");
-               if (ahinfo->spis[0]
-                   != ahinfo->spis[1])
-                       printf("%u:%u ",
-                              ahinfo->spis[0],
-                              ahinfo->spis[1]);
-               else
-                       printf("%u ",
-                              ahinfo->spis[0]);
-       }
-
-       if (ahinfo->hdrlen != 0 || (ahinfo->invflags & IP6T_AH_INV_LEN) ) {
-               printf("--ahlen %s%u ", 
-                       (ahinfo->invflags & IP6T_AH_INV_LEN) ? "! " : "", 
-                       ahinfo->hdrlen);
-       }
-
-       if (ahinfo->hdrres != 0 )
-               printf("--ahres ");
-}
-
-static struct xtables_match ah_mt6_reg = {
-       .name          = "ah",
-       .version       = XTABLES_VERSION,
-       .family        = PF_INET6,
-       .size          = XT_ALIGN(sizeof(struct ip6t_ah)),
-       .userspacesize = XT_ALIGN(sizeof(struct ip6t_ah)),
-       .help          = ah_help,
-       .init          = ah_init,
-       .parse         = ah_parse,
-       .print         = ah_print,
-       .save          = ah_save,
-       .extra_opts    = ah_opts,
-};
-
-void
-_init(void)
-{
-       xtables_register_match(&ah_mt6_reg);
-}
diff --git a/extensions/libip6t_ah.man b/extensions/libip6t_ah.man
deleted file mode 100644 (file)
index b4e74dc..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-This module matches the parameters in Authentication header of IPsec packets.
-.TP
-[\fB!\fP] \fB--ahspi\fP \fIspi\fP[\fB:\fP\fIspi\fP]
-Matches SPI.
-.TP
-[\fB!\fP] \fB--ahlen\fP \fIlength\fP
-Total length of this header in octets.
-.TP
-.BI "--ahres"
-Matches if the reserved field is filled with zero.
diff --git a/extensions/libip6t_dst.c b/extensions/libip6t_dst.c
deleted file mode 100644 (file)
index d3c54dd..0000000
+++ /dev/null
@@ -1,248 +0,0 @@
-/* Shared library add-on to ip6tables to add Hop-by-Hop and Dst headers support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <errno.h>
-#include <ip6tables.h>
-#include <linux/netfilter_ipv6/ip6t_opts.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <arpa/inet.h>
-
-/* Function which prints out usage message. */
-static void dst_help(void)
-{
-       printf(
-"dst match options:\n"
-"  --dst-len [!] length          total length of this header\n"
-"  --dst-opts TYPE[:LEN][,TYPE[:LEN]...]\n"
-"                                Options and its length (list, max: %d)\n",
-IP6T_OPTS_OPTSNR);
-}
-
-static const struct option dst_opts[] = {
-       { .name = "dst-len",        .has_arg = 1, .val = '1' },
-       { .name = "dst-opts",       .has_arg = 1, .val = '2' },
-       { .name = "dst-not-strict", .has_arg = 1, .val = '3' },
-       { .name = NULL }
-};
-
-static u_int32_t
-parse_opts_num(const char *idstr, const char *typestr)
-{
-       unsigned long int id;
-       char* ep;
-
-       id = strtoul(idstr, &ep, 0);
-
-       if ( idstr == ep ) {
-               exit_error(PARAMETER_PROBLEM,
-                          "dst: no valid digits in %s `%s'", typestr, idstr);
-       }
-       if ( id == ULONG_MAX  && errno == ERANGE ) {
-               exit_error(PARAMETER_PROBLEM,
-                          "%s `%s' specified too big: would overflow",
-                          typestr, idstr);
-       }
-       if ( *idstr != '\0'  && *ep != '\0' ) {
-               exit_error(PARAMETER_PROBLEM,
-                          "dst: error parsing %s `%s'", typestr, idstr);
-       }
-       return (u_int32_t) id;
-}
-
-static int
-parse_options(const char *optsstr, u_int16_t *opts)
-{
-        char *buffer, *cp, *next, *range;
-        unsigned int i;
-       
-       buffer = strdup(optsstr);
-        if (!buffer)
-               exit_error(OTHER_PROBLEM, "strdup failed");
-                       
-        for (cp = buffer, i = 0; cp && i < IP6T_OPTS_OPTSNR; cp = next, i++)
-        {
-                next = strchr(cp, ',');
-
-                if (next)
-                       *next++='\0';
-
-                range = strchr(cp, ':');
-
-                if (range) {
-                        if (i == IP6T_OPTS_OPTSNR-1)
-                                exit_error(PARAMETER_PROBLEM,
-                                           "too many ports specified");
-                        *range++ = '\0';
-                }
-
-                opts[i] = (u_int16_t)((parse_opts_num(cp,"opt") & 0x000000FF)<<8); 
-                if (range) {
-                       if (opts[i] == 0)
-                               exit_error(PARAMETER_PROBLEM,
-                                       "PAD0 hasn't got length");
-                        opts[i] |= (u_int16_t)(parse_opts_num(range,"length") &
-                                       0x000000FF);
-                } else
-                        opts[i] |= (0x00FF);
-
-#ifdef DEBUG
-               printf("opts str: %s %s\n", cp, range);
-               printf("opts opt: %04X\n", opts[i]);
-#endif
-       }
-
-        if (cp)
-               exit_error(PARAMETER_PROBLEM, "too many addresses specified");
-
-       free(buffer);
-
-#ifdef DEBUG
-       printf("addr nr: %d\n", i);
-#endif
-
-       return i;
-}
-
-/* Initialize the match. */
-static void dst_init(struct xt_entry_match *m)
-{
-       struct ip6t_opts *optinfo = (struct ip6t_opts *)m->data;
-
-       optinfo->hdrlen = 0;
-       optinfo->flags = 0;
-       optinfo->invflags = 0;
-       optinfo->optsnr = 0;
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int dst_parse(int c, char **argv, int invert, unsigned int *flags,
-                     const void *entry, struct xt_entry_match **match)
-{
-       struct ip6t_opts *optinfo = (struct ip6t_opts *)(*match)->data;
-
-       switch (c) {
-       case '1':
-               if (*flags & IP6T_OPTS_LEN)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--dst-len' allowed");
-               check_inverse(optarg, &invert, &optind, 0);
-               optinfo->hdrlen = parse_opts_num(argv[optind-1], "length");
-               if (invert)
-                       optinfo->invflags |= IP6T_OPTS_INV_LEN;
-               optinfo->flags |= IP6T_OPTS_LEN;
-               *flags |= IP6T_OPTS_LEN;
-               break;
-       case '2':
-               if (*flags & IP6T_OPTS_OPTS)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--dst-opts' allowed");
-                check_inverse(optarg, &invert, &optind, 0);
-                if (invert)
-                        exit_error(PARAMETER_PROBLEM,
-                               " '!' not allowed with `--dst-opts'");
-               optinfo->optsnr = parse_options(argv[optind-1], optinfo->opts);
-               optinfo->flags |= IP6T_OPTS_OPTS;
-               *flags |= IP6T_OPTS_OPTS;
-               break;
-       case '3':
-               if (*flags & IP6T_OPTS_NSTRICT)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--dst-not-strict' allowed");
-               if ( !(*flags & IP6T_OPTS_OPTS) )
-                       exit_error(PARAMETER_PROBLEM,
-                                  "`--dst-opts ...' required before "
-                                  "`--dst-not-strict'");
-               optinfo->flags |= IP6T_OPTS_NSTRICT;
-               *flags |= IP6T_OPTS_NSTRICT;
-               break;
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static void
-print_options(unsigned int optsnr, u_int16_t *optsp)
-{
-       unsigned int i;
-
-       for(i = 0; i < optsnr; i++) {
-               printf("%d", (optsp[i] & 0xFF00) >> 8);
-
-               if ((optsp[i] & 0x00FF) != 0x00FF)
-                       printf(":%d", (optsp[i] & 0x00FF));
-
-               printf("%c", (i != optsnr - 1) ? ',' : ' ');
-       }
-}
-
-/* Prints out the union ip6t_matchinfo. */
-static void dst_print(const void *ip, const struct xt_entry_match *match,
-                      int numeric)
-{
-       const struct ip6t_opts *optinfo = (struct ip6t_opts *)match->data;
-
-       printf("dst ");
-       if (optinfo->flags & IP6T_OPTS_LEN)
-               printf("length:%s%u ",
-                       optinfo->invflags & IP6T_OPTS_INV_LEN ? "!" : "",
-                       optinfo->hdrlen);
-
-       if (optinfo->flags & IP6T_OPTS_OPTS)
-               printf("opts ");
-
-       print_options(optinfo->optsnr, (u_int16_t *)optinfo->opts);
-
-       if (optinfo->flags & IP6T_OPTS_NSTRICT)
-               printf("not-strict ");
-
-       if (optinfo->invflags & ~IP6T_OPTS_INV_MASK)
-               printf("Unknown invflags: 0x%X ",
-                      optinfo->invflags & ~IP6T_OPTS_INV_MASK);
-}
-
-/* Saves the union ip6t_matchinfo in parsable form to stdout. */
-static void dst_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct ip6t_opts *optinfo = (struct ip6t_opts *)match->data;
-
-       if (optinfo->flags & IP6T_OPTS_LEN) {
-               printf("--dst-len %s%u ",
-                       (optinfo->invflags & IP6T_OPTS_INV_LEN) ? "! " : "", 
-                       optinfo->hdrlen);
-       }
-
-       if (optinfo->flags & IP6T_OPTS_OPTS)
-               printf("--dst-opts ");
-
-       print_options(optinfo->optsnr, (u_int16_t *)optinfo->opts);
-
-       if (optinfo->flags & IP6T_OPTS_NSTRICT)
-               printf("--dst-not-strict ");
-}
-
-static struct xtables_match dst_mt6_reg = {
-       .name          = "dst",
-       .version       = XTABLES_VERSION,
-       .family        = PF_INET6,
-       .size          = XT_ALIGN(sizeof(struct ip6t_opts)),
-       .userspacesize = XT_ALIGN(sizeof(struct ip6t_opts)),
-       .help          = dst_help,
-       .init          = dst_init,
-       .parse         = dst_parse,
-       .print         = dst_print,
-       .save          = dst_save,
-       .extra_opts    = dst_opts,
-};
-
-void
-_init(void)
-{
-       xtables_register_match(&dst_mt6_reg);
-}
diff --git a/extensions/libip6t_dst.man b/extensions/libip6t_dst.man
deleted file mode 100644 (file)
index f4ca1c4..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-This module matches the parameters in Destination Options header
-.TP
-[\fB!\fP] \fB--dst-len\fP \fIlength\fP
-Total length of this header in octets.
-.TP
-\fB--dst-opts\fP \fItype\fP[\fB:\fP\fIlength\fP][\fB,\fP\fItype\fP[\fB:\fP\fIlength\fP]...]
-numeric type of option and the length of the option data in octets.
diff --git a/extensions/libip6t_eui64.c b/extensions/libip6t_eui64.c
deleted file mode 100644 (file)
index b93d121..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Shared library add-on to ip6tables to add EUI64 address checking support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#if defined(__GLIBC__) && __GLIBC__ == 2
-#include <net/ethernet.h>
-#else
-#include <linux/if_ether.h>
-#endif
-#include <ip6tables.h>
-
-/* Function which prints out usage message. */
-static void eui64_help(void)
-{
-       printf(
-"eui64 match options:\n"
-" This module hasn't got any option\n"
-" This module checks for EUI64 IPv6 addresses\n");
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int eui64_parse(int c, char **argv, int invert, unsigned int *flags,
-                       const void *entry, struct xt_entry_match **match)
-{
-       return 0;
-}
-
-static struct xtables_match eui64_mt6_reg = {
-       .name           = "eui64",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET6,
-       .size           = XT_ALIGN(sizeof(int)),
-       .userspacesize  = XT_ALIGN(sizeof(int)),
-       .help           = eui64_help,
-       .parse          = eui64_parse,
-};
-
-void _init(void)
-{
-       xtables_register_match(&eui64_mt6_reg);
-}
diff --git a/extensions/libip6t_eui64.man b/extensions/libip6t_eui64.man
deleted file mode 100644 (file)
index cd80b98..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-This module matches the EUI-64 part of a stateless autoconfigured IPv6 address.
-It compares the EUI-64 derived from the source MAC address in Ethernet frame
-with the lower 64 bits of the IPv6 source address. But "Universal/Local"
-bit is not compared. This module doesn't match other link layer frame, and
-is only valid in the
-.BR PREROUTING ,
-.BR INPUT
-and
-.BR FORWARD
-chains.
diff --git a/extensions/libip6t_frag.c b/extensions/libip6t_frag.c
deleted file mode 100644 (file)
index 64e110d..0000000
+++ /dev/null
@@ -1,258 +0,0 @@
-/* Shared library add-on to ip6tables to add Fragmentation header support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <errno.h>
-#include <ip6tables.h>
-#include <linux/netfilter_ipv6/ip6t_frag.h>
-                                        
-/* Function which prints out usage message. */
-static void frag_help(void)
-{
-       printf(
-"frag match options:\n"
-" --fragid [!] id[:id]          match the id (range)\n"
-" --fraglen [!] length          total length of this header\n"
-" --fragres                     check the reserved filed, too\n"
-" --fragfirst                   matches on the first fragment\n"
-" [--fragmore|--fraglast]       there are more fragments or this\n"
-"                               is the last one\n");
-}
-
-static const struct option frag_opts[] = {
-       { .name = "fragid",    .has_arg = 1, .val = '1' },
-       { .name = "fraglen",   .has_arg = 1, .val = '2' },
-       { .name = "fragres",   .has_arg = 0, .val = '3' },
-       { .name = "fragfirst", .has_arg = 0, .val = '4' },
-       { .name = "fragmore",  .has_arg = 0, .val = '5' },
-       { .name = "fraglast",  .has_arg = 0, .val = '6' },
-       { .name = NULL }
-};
-
-static u_int32_t
-parse_frag_id(const char *idstr, const char *typestr)
-{
-       unsigned long int id;
-       char* ep;
-
-       id = strtoul(idstr, &ep, 0);
-
-       if ( idstr == ep ) {
-               exit_error(PARAMETER_PROBLEM,
-                          "FRAG no valid digits in %s `%s'", typestr, idstr);
-       }
-       if ( id == ULONG_MAX  && errno == ERANGE ) {
-               exit_error(PARAMETER_PROBLEM,
-                          "%s `%s' specified too big: would overflow",
-                          typestr, idstr);
-       }       
-       if ( *idstr != '\0'  && *ep != '\0' ) {
-               exit_error(PARAMETER_PROBLEM,
-                          "FRAG error parsing %s `%s'", typestr, idstr);
-       }
-       return (u_int32_t) id;
-}
-
-static void
-parse_frag_ids(const char *idstring, u_int32_t *ids)
-{
-       char *buffer;
-       char *cp;
-
-       buffer = strdup(idstring);
-       if ((cp = strchr(buffer, ':')) == NULL)
-               ids[0] = ids[1] = parse_frag_id(buffer,"id");
-       else {
-               *cp = '\0';
-               cp++;
-
-               ids[0] = buffer[0] ? parse_frag_id(buffer,"id") : 0;
-               ids[1] = cp[0] ? parse_frag_id(cp,"id") : 0xFFFFFFFF;
-       }
-       free(buffer);
-}
-
-/* Initialize the match. */
-static void frag_init(struct xt_entry_match *m)
-{
-       struct ip6t_frag *fraginfo = (struct ip6t_frag *)m->data;
-
-       fraginfo->ids[0] = 0x0L;
-       fraginfo->ids[1] = 0xFFFFFFFF;
-       fraginfo->hdrlen = 0;
-       fraginfo->flags = 0;
-       fraginfo->invflags = 0;
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int frag_parse(int c, char **argv, int invert, unsigned int *flags,
-                      const void *entry, struct xt_entry_match **match)
-{
-       struct ip6t_frag *fraginfo = (struct ip6t_frag *)(*match)->data;
-
-       switch (c) {
-       case '1':
-               if (*flags & IP6T_FRAG_IDS)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--fragid' allowed");
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_frag_ids(argv[optind-1], fraginfo->ids);
-               if (invert)
-                       fraginfo->invflags |= IP6T_FRAG_INV_IDS;
-               fraginfo->flags |= IP6T_FRAG_IDS;
-               *flags |= IP6T_FRAG_IDS;
-               break;
-       case '2':
-               if (*flags & IP6T_FRAG_LEN)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--fraglen' allowed");
-               check_inverse(optarg, &invert, &optind, 0);
-               fraginfo->hdrlen = parse_frag_id(argv[optind-1], "length");
-               if (invert)
-                       fraginfo->invflags |= IP6T_FRAG_INV_LEN;
-               fraginfo->flags |= IP6T_FRAG_LEN;
-               *flags |= IP6T_FRAG_LEN;
-               break;
-       case '3':
-               if (*flags & IP6T_FRAG_RES)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--fragres' allowed");
-               fraginfo->flags |= IP6T_FRAG_RES;
-               *flags |= IP6T_FRAG_RES;
-               break;
-       case '4':
-               if (*flags & IP6T_FRAG_FST)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--fragfirst' allowed");
-               fraginfo->flags |= IP6T_FRAG_FST;
-               *flags |= IP6T_FRAG_FST;
-               break;
-       case '5':
-               if (*flags & (IP6T_FRAG_MF|IP6T_FRAG_NMF)) 
-                       exit_error(PARAMETER_PROBLEM,
-                          "Only one `--fragmore' or `--fraglast' allowed");
-               fraginfo->flags |= IP6T_FRAG_MF;
-               *flags |= IP6T_FRAG_MF;
-               break;
-       case '6':
-               if (*flags & (IP6T_FRAG_MF|IP6T_FRAG_NMF)) 
-                       exit_error(PARAMETER_PROBLEM,
-                          "Only one `--fragmore' or `--fraglast' allowed");
-               fraginfo->flags |= IP6T_FRAG_NMF;
-               *flags |= IP6T_FRAG_NMF;
-               break;
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static void
-print_ids(const char *name, u_int32_t min, u_int32_t max,
-           int invert)
-{
-       const char *inv = invert ? "!" : "";
-
-       if (min != 0 || max != 0xFFFFFFFF || invert) {
-               printf("%s", name);
-               if (min == max)
-                       printf(":%s%u ", inv, min);
-               else
-                       printf("s:%s%u:%u ", inv, min, max);
-       }
-}
-
-/* Prints out the union ip6t_matchinfo. */
-static void frag_print(const void *ip, const struct xt_entry_match *match,
-                       int numeric)
-{
-       const struct ip6t_frag *frag = (struct ip6t_frag *)match->data;
-
-       printf("frag ");
-       print_ids("id", frag->ids[0], frag->ids[1],
-                   frag->invflags & IP6T_FRAG_INV_IDS);
-
-       if (frag->flags & IP6T_FRAG_LEN) {
-               printf("length:%s%u ",
-                       frag->invflags & IP6T_FRAG_INV_LEN ? "!" : "",
-                       frag->hdrlen);
-       }
-
-       if (frag->flags & IP6T_FRAG_RES)
-               printf("reserved ");
-
-       if (frag->flags & IP6T_FRAG_FST)
-               printf("first ");
-
-       if (frag->flags & IP6T_FRAG_MF)
-               printf("more ");
-
-       if (frag->flags & IP6T_FRAG_NMF)
-               printf("last ");
-
-       if (frag->invflags & ~IP6T_FRAG_INV_MASK)
-               printf("Unknown invflags: 0x%X ",
-                      frag->invflags & ~IP6T_FRAG_INV_MASK);
-}
-
-/* Saves the union ip6t_matchinfo in parsable form to stdout. */
-static void frag_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct ip6t_frag *fraginfo = (struct ip6t_frag *)match->data;
-
-       if (!(fraginfo->ids[0] == 0
-           && fraginfo->ids[1] == 0xFFFFFFFF)) {
-               printf("--fragid %s", 
-                       (fraginfo->invflags & IP6T_FRAG_INV_IDS) ? "! " : "");
-               if (fraginfo->ids[0]
-                   != fraginfo->ids[1])
-                       printf("%u:%u ",
-                              fraginfo->ids[0],
-                              fraginfo->ids[1]);
-               else
-                       printf("%u ",
-                              fraginfo->ids[0]);
-       }
-
-       if (fraginfo->flags & IP6T_FRAG_LEN) {
-               printf("--fraglen %s%u ", 
-                       (fraginfo->invflags & IP6T_FRAG_INV_LEN) ? "! " : "", 
-                       fraginfo->hdrlen);
-       }
-
-       if (fraginfo->flags & IP6T_FRAG_RES)
-               printf("--fragres ");
-
-       if (fraginfo->flags & IP6T_FRAG_FST)
-               printf("--fragfirst ");
-
-       if (fraginfo->flags & IP6T_FRAG_MF)
-               printf("--fragmore ");
-
-       if (fraginfo->flags & IP6T_FRAG_NMF)
-               printf("--fraglast ");
-}
-
-static struct xtables_match frag_mt6_reg = {
-       .name          = "frag",
-       .version       = XTABLES_VERSION,
-       .family        = PF_INET6,
-       .size          = XT_ALIGN(sizeof(struct ip6t_frag)),
-       .userspacesize = XT_ALIGN(sizeof(struct ip6t_frag)),
-       .help          = frag_help,
-       .init          = frag_init,
-       .parse         = frag_parse,
-       .print         = frag_print,
-       .save          = frag_save,
-       .extra_opts    = frag_opts,
-};
-
-void
-_init(void)
-{
-       xtables_register_match(&frag_mt6_reg);
-}
diff --git a/extensions/libip6t_frag.man b/extensions/libip6t_frag.man
deleted file mode 100644 (file)
index 7832cbf..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-This module matches the parameters in Fragment header.
-.TP
-[\fB!\fP] \fB--fragid\fP \fIid\fP[\fB:\fP\fIid\fP]
-Matches the given Identification or range of it.
-.TP
-[\fB!\fP] \fB--fraglen\fP \fIlength\fP
-This option cannot be used with kernel version 2.6.10 or later. The length of
-Fragment header is static and this option doesn't make sense.
-.TP
-.BR "--fragres "
-Matches if the reserved fields are filled with zero.
-.TP
-.BR "--fragfirst "
-Matches on the first fragment.
-.TP
-\fB--fragmore\fP
-Matches if there are more fragments.
-.TP
-\fB--fraglast\fP
-Matches if this is the last fragment.
diff --git a/extensions/libip6t_hbh.c b/extensions/libip6t_hbh.c
deleted file mode 100644 (file)
index e12fe4e..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-/* Shared library add-on to ip6tables to add Hop-by-Hop and Dst headers support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <errno.h>
-#include <ip6tables.h>
-/*#include <linux/in6.h>*/
-#include <linux/netfilter_ipv6/ip6t_opts.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <arpa/inet.h>
-                                        
-#define DEBUG          0
-
-/* Function which prints out usage message. */
-static void hbh_help(void)
-{
-       printf(
-"hbh match options:\n"
-"  --hbh-len [!] length          total length of this header\n"
-"  --hbh-opts TYPE[:LEN][,TYPE[:LEN]...] \n"
-"                                Options and its length (list, max: %d)\n",
-IP6T_OPTS_OPTSNR);
-}
-
-static const struct option hbh_opts[] = {
-       { "hbh-len", 1, NULL, '1' },
-       { "hbh-opts", 1, NULL, '2' },
-       { "hbh-not-strict", 1, NULL, '3' },
-       { .name = NULL }
-};
-
-static u_int32_t
-parse_opts_num(const char *idstr, const char *typestr)
-{
-       unsigned long int id;
-       char* ep;
-
-       id =  strtoul(idstr,&ep,0) ;
-
-       if ( idstr == ep ) {
-               exit_error(PARAMETER_PROBLEM,
-                          "hbh: no valid digits in %s `%s'", typestr, idstr);
-       }
-       if ( id == ULONG_MAX  && errno == ERANGE ) {
-               exit_error(PARAMETER_PROBLEM,
-                          "%s `%s' specified too big: would overflow",
-                          typestr, idstr);
-       }       
-       if ( *idstr != '\0'  && *ep != '\0' ) {
-               exit_error(PARAMETER_PROBLEM,
-                          "hbh: error parsing %s `%s'", typestr, idstr);
-       }
-       return (u_int32_t) id;
-}
-
-static int
-parse_options(const char *optsstr, u_int16_t *opts)
-{
-        char *buffer, *cp, *next, *range;
-        unsigned int i;
-       
-       buffer = strdup(optsstr);
-        if (!buffer) exit_error(OTHER_PROBLEM, "strdup failed");
-                       
-        for (cp=buffer, i=0; cp && i<IP6T_OPTS_OPTSNR; cp=next,i++)
-        {
-                next=strchr(cp, ',');
-                if (next) *next++='\0';
-                range = strchr(cp, ':');
-                if (range) {
-                        if (i == IP6T_OPTS_OPTSNR-1)
-                                exit_error(PARAMETER_PROBLEM,
-                                           "too many ports specified");
-                        *range++ = '\0';
-                }
-                opts[i] = (u_int16_t)((parse_opts_num(cp,"opt") & 0x000000FF)<<8); 
-                if (range) {
-                       if (opts[i] == 0)
-                               exit_error(PARAMETER_PROBLEM, "PAD0 hasn't got length");
-                        opts[i] |= (u_int16_t)(parse_opts_num(range,"length") &
-                                       0x000000FF);
-                } else {
-                        opts[i] |= (0x00FF);
-               }
-
-#if DEBUG
-               printf("opts str: %s %s\n", cp, range);
-               printf("opts opt: %04X\n", opts[i]);
-#endif
-       }
-        if (cp) exit_error(PARAMETER_PROBLEM, "too many addresses specified");
-
-       free(buffer);
-
-#if DEBUG
-       printf("addr nr: %d\n", i);
-#endif
-
-       return i;
-}
-
-/* Initialize the match. */
-static void hbh_init(struct xt_entry_match *m)
-{
-       struct ip6t_opts *optinfo = (struct ip6t_opts *)m->data;
-
-       optinfo->hdrlen = 0;
-       optinfo->flags = 0;
-       optinfo->invflags = 0;
-       optinfo->optsnr = 0;
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int hbh_parse(int c, char **argv, int invert, unsigned int *flags,
-                     const void *entry, struct xt_entry_match **match)
-{
-       struct ip6t_opts *optinfo = (struct ip6t_opts *)(*match)->data;
-
-       switch (c) {
-       case '1':
-               if (*flags & IP6T_OPTS_LEN)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--hbh-len' allowed");
-               check_inverse(optarg, &invert, &optind, 0);
-               optinfo->hdrlen = parse_opts_num(argv[optind-1], "length");
-               if (invert)
-                       optinfo->invflags |= IP6T_OPTS_INV_LEN;
-               optinfo->flags |= IP6T_OPTS_LEN;
-               *flags |= IP6T_OPTS_LEN;
-               break;
-       case '2':
-               if (*flags & IP6T_OPTS_OPTS)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--hbh-opts' allowed");
-                check_inverse(optarg, &invert, &optind, 0);
-                if (invert)
-                        exit_error(PARAMETER_PROBLEM,
-                               " '!' not allowed with `--hbh-opts'");
-               optinfo->optsnr = parse_options(argv[optind-1], optinfo->opts);
-               optinfo->flags |= IP6T_OPTS_OPTS;
-               *flags |= IP6T_OPTS_OPTS;
-               break;
-       case '3':
-               if (*flags & IP6T_OPTS_NSTRICT)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--hbh-not-strict' allowed");
-               if ( !(*flags & IP6T_OPTS_OPTS) )
-                       exit_error(PARAMETER_PROBLEM,
-                                  "`--hbh-opts ...' required before `--hbh-not-strict'");
-               optinfo->flags |= IP6T_OPTS_NSTRICT;
-               *flags |= IP6T_OPTS_NSTRICT;
-               break;
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static void
-print_options(unsigned int optsnr, u_int16_t *optsp)
-{
-       unsigned int i;
-
-       for(i=0; i<optsnr; i++){
-               printf("%d", (optsp[i] & 0xFF00)>>8);
-               if ((optsp[i] & 0x00FF) != 0x00FF){
-                       printf(":%d", (optsp[i] & 0x00FF));
-               } 
-               printf("%c", (i!=optsnr-1)?',':' ');
-       }
-}
-
-/* Prints out the union ip6t_matchinfo. */
-static void hbh_print(const void *ip, const struct xt_entry_match *match,
-                      int numeric)
-{
-       const struct ip6t_opts *optinfo = (struct ip6t_opts *)match->data;
-
-       printf("hbh ");
-       if (optinfo->flags & IP6T_OPTS_LEN) {
-               printf("length");
-               printf(":%s", optinfo->invflags & IP6T_OPTS_INV_LEN ? "!" : "");
-               printf("%u", optinfo->hdrlen);
-               printf(" ");
-       }
-       if (optinfo->flags & IP6T_OPTS_OPTS) printf("opts ");
-       print_options(optinfo->optsnr, (u_int16_t *)optinfo->opts);
-       if (optinfo->flags & IP6T_OPTS_NSTRICT) printf("not-strict ");
-       if (optinfo->invflags & ~IP6T_OPTS_INV_MASK)
-               printf("Unknown invflags: 0x%X ",
-                      optinfo->invflags & ~IP6T_OPTS_INV_MASK);
-}
-
-/* Saves the union ip6t_matchinfo in parsable form to stdout. */
-static void hbh_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct ip6t_opts *optinfo = (struct ip6t_opts *)match->data;
-
-       if (optinfo->flags & IP6T_OPTS_LEN) {
-               printf("--hbh-len %s%u ",
-                       (optinfo->invflags & IP6T_OPTS_INV_LEN) ? "! " : "", 
-                       optinfo->hdrlen);
-       }
-
-       if (optinfo->flags & IP6T_OPTS_OPTS)
-               printf("--hbh-opts ");
-       print_options(optinfo->optsnr, (u_int16_t *)optinfo->opts);
-       if (optinfo->flags & IP6T_OPTS_NSTRICT)
-               printf("--hbh-not-strict ");
-}
-
-static struct xtables_match hbh_mt6_reg = {
-       .name           = "hbh",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET6,
-       .size           = XT_ALIGN(sizeof(struct ip6t_opts)),
-       .userspacesize  = XT_ALIGN(sizeof(struct ip6t_opts)),
-       .help           = hbh_help,
-       .init           = hbh_init,
-       .parse          = hbh_parse,
-       .print          = hbh_print,
-       .save           = hbh_save,
-       .extra_opts     = hbh_opts,
-};
-
-void
-_init(void)
-{
-       xtables_register_match(&hbh_mt6_reg);
-}
diff --git a/extensions/libip6t_hbh.man b/extensions/libip6t_hbh.man
deleted file mode 100644 (file)
index 38bae11..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-This module matches the parameters in Hop-by-Hop Options header
-.TP
-[\fB!\fP] \fB--hbh-len\fP \fIlength\fP
-Total length of this header in octets.
-.TP
-\fB--hbh-opts\fP \fItype\fP[\fB:\fP\fIlength\fP][\fB,\fP\fItype\fP[\fB:\fP\fIlength\fP]...]
-numeric type of option and the length of the option data in octets.
diff --git a/extensions/libip6t_hl.c b/extensions/libip6t_hl.c
deleted file mode 100644 (file)
index 2af9a20..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * IPv6 Hop Limit matching module
- * Maciej Soltysiak <solt@dns.toxicfilms.tv>
- * Based on HW's ttl match
- * This program is released under the terms of GNU GPL
- * Cleanups by Stephane Ouellette <ouellettes@videotron.ca>
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <getopt.h>
-#include <ip6tables.h>
-
-#include <linux/netfilter_ipv6/ip6_tables.h>
-#include <linux/netfilter_ipv6/ip6t_hl.h>
-
-static void hl_help(void)
-{
-       printf(
-"hl match options:\n"
-"  --hl-eq [!] value   Match hop limit value\n"
-"  --hl-lt value       Match HL < value\n"
-"  --hl-gt value       Match HL > value\n");
-}
-
-static int hl_parse(int c, char **argv, int invert, unsigned int *flags,
-                    const void *entry, struct xt_entry_match **match)
-{
-       struct ip6t_hl_info *info = (struct ip6t_hl_info *) (*match)->data;
-       u_int8_t value;
-
-       check_inverse(optarg, &invert, &optind, 0);
-       value = atoi(argv[optind-1]);
-
-       if (*flags) 
-               exit_error(PARAMETER_PROBLEM, 
-                               "Can't specify HL option twice");
-
-       if (!optarg)
-               exit_error(PARAMETER_PROBLEM,
-                               "hl: You must specify a value");
-       switch (c) {
-               case '2':
-                       if (invert)
-                               info->mode = IP6T_HL_NE;
-                       else
-                               info->mode = IP6T_HL_EQ;
-
-                       /* is 0 allowed? */
-                       info->hop_limit = value;
-                       *flags = 1;
-
-                       break;
-               case '3':
-                       if (invert) 
-                               exit_error(PARAMETER_PROBLEM,
-                                               "hl: unexpected `!'");
-
-                       info->mode = IP6T_HL_LT;
-                       info->hop_limit = value;
-                       *flags = 1;
-
-                       break;
-               case '4':
-                       if (invert)
-                               exit_error(PARAMETER_PROBLEM,
-                                               "hl: unexpected `!'");
-
-                       info->mode = IP6T_HL_GT;
-                       info->hop_limit = value;
-                       *flags = 1;
-
-                       break;
-               default:
-                       return 0;
-       }
-
-       return 1;
-}
-
-static void hl_check(unsigned int flags)
-{
-       if (!flags) 
-               exit_error(PARAMETER_PROBLEM,
-                       "HL match: You must specify one of "
-                       "`--hl-eq', `--hl-lt', `--hl-gt'");
-}
-
-static void hl_print(const void *ip, const struct xt_entry_match *match,
-                     int numeric)
-{
-       static const char *op[] = {
-               [IP6T_HL_EQ] = "==",
-               [IP6T_HL_NE] = "!=",
-               [IP6T_HL_LT] = "<",
-               [IP6T_HL_GT] = ">" };
-
-       const struct ip6t_hl_info *info = 
-               (struct ip6t_hl_info *) match->data;
-
-       printf("HL match HL %s %u ", op[info->mode], info->hop_limit);
-}
-
-static void hl_save(const void *ip, const struct xt_entry_match *match)
-{
-       static const char *op[] = {
-               [IP6T_HL_EQ] = "eq",
-               [IP6T_HL_NE] = "eq !",
-               [IP6T_HL_LT] = "lt",
-               [IP6T_HL_GT] = "gt" };
-
-       const struct ip6t_hl_info *info =
-               (struct ip6t_hl_info *) match->data;
-
-       printf("--hl-%s %u ", op[info->mode], info->hop_limit);
-}
-
-static const struct option hl_opts[] = {
-       { .name = "hl",    .has_arg = 1, .val = '2' },
-       { .name = "hl-eq", .has_arg = 1, .val = '2' },
-       { .name = "hl-lt", .has_arg = 1, .val = '3' },
-       { .name = "hl-gt", .has_arg = 1, .val = '4' },
-       { .name = NULL }
-};
-
-static struct xtables_match hl_mt6_reg = {
-       .name          = "hl",
-       .version       = XTABLES_VERSION,
-       .family        = PF_INET6,
-       .size          = XT_ALIGN(sizeof(struct ip6t_hl_info)),
-       .userspacesize = XT_ALIGN(sizeof(struct ip6t_hl_info)),
-       .help          = hl_help,
-       .parse         = hl_parse,
-       .final_check   = hl_check,
-       .print         = hl_print,
-       .save          = hl_save,
-       .extra_opts    = hl_opts,
-};
-
-
-void _init(void) 
-{
-       xtables_register_match(&hl_mt6_reg);
-}
diff --git a/extensions/libip6t_hl.man b/extensions/libip6t_hl.man
deleted file mode 100644 (file)
index c8c7cd7..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-This module matches the Hop Limit field in the IPv6 header.
-.TP
-[\fB!\fP] \fB--hl-eq\fP \fIvalue\fP
-Matches if Hop Limit equals \fIvalue\fP.
-.TP
-.BI "--hl-lt " "value"
-Matches if Hop Limit is less than \fIvalue\fP.
-.TP
-.BI "--hl-gt " "value"
-Matches if Hop Limit is greater than \fIvalue\fP.
diff --git a/extensions/libip6t_icmp6.c b/extensions/libip6t_icmp6.c
deleted file mode 100644 (file)
index caecc4f..0000000
+++ /dev/null
@@ -1,271 +0,0 @@
-/* Shared library add-on to iptables to add ICMP support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <ip6tables.h>
-#include <linux/netfilter_ipv6/ip6_tables.h>
-
-struct icmpv6_names {
-       const char *name;
-       u_int8_t type;
-       u_int8_t code_min, code_max;
-};
-
-static const struct icmpv6_names icmpv6_codes[] = {
-       { "destination-unreachable", 1, 0, 0xFF },
-       {   "no-route", 1, 0, 0 },
-       {   "communication-prohibited", 1, 1, 1 },
-       {   "address-unreachable", 1, 3, 3 },
-       {   "port-unreachable", 1, 4, 4 },
-
-       { "packet-too-big", 2, 0, 0xFF },
-
-       { "time-exceeded", 3, 0, 0xFF },
-       /* Alias */ { "ttl-exceeded", 3, 0, 0xFF },
-       {   "ttl-zero-during-transit", 3, 0, 0 },
-       {   "ttl-zero-during-reassembly", 3, 1, 1 },
-
-       { "parameter-problem", 4, 0, 0xFF },
-       {   "bad-header", 4, 0, 0 },
-       {   "unknown-header-type", 4, 1, 1 },
-       {   "unknown-option", 4, 2, 2 },
-
-       { "echo-request", 128, 0, 0xFF },
-       /* Alias */ { "ping", 128, 0, 0xFF },
-
-       { "echo-reply", 129, 0, 0xFF },
-       /* Alias */ { "pong", 129, 0, 0xFF },
-
-       { "router-solicitation", 133, 0, 0xFF },
-
-       { "router-advertisement", 134, 0, 0xFF },
-
-       { "neighbour-solicitation", 135, 0, 0xFF },
-       /* Alias */ { "neighbor-solicitation", 135, 0, 0xFF },
-
-       { "neighbour-advertisement", 136, 0, 0xFF },
-       /* Alias */ { "neighbor-advertisement", 136, 0, 0xFF },
-
-       { "redirect", 137, 0, 0xFF },
-
-};
-
-static void
-print_icmpv6types(void)
-{
-       unsigned int i;
-       printf("Valid ICMPv6 Types:");
-
-       for (i = 0; i < sizeof(icmpv6_codes)/sizeof(struct icmpv6_names); i++) {
-               if (i && icmpv6_codes[i].type == icmpv6_codes[i-1].type) {
-                       if (icmpv6_codes[i].code_min == icmpv6_codes[i-1].code_min
-                           && (icmpv6_codes[i].code_max
-                               == icmpv6_codes[i-1].code_max))
-                               printf(" (%s)", icmpv6_codes[i].name);
-                       else
-                               printf("\n   %s", icmpv6_codes[i].name);
-               }
-               else
-                       printf("\n%s", icmpv6_codes[i].name);
-       }
-       printf("\n");
-}
-
-/* Function which prints out usage message. */
-static void icmp6_help(void)
-{
-       printf(
-"icmpv6 match options:\n"
-" --icmpv6-type [!] typename   match icmpv6 type\n"
-"                              (or numeric type or type/code)\n");
-       print_icmpv6types();
-}
-
-static const struct option icmp6_opts[] = {
-       { "icmpv6-type", 1, NULL, '1' },
-       { .name = NULL }
-};
-
-static void
-parse_icmpv6(const char *icmpv6type, u_int8_t *type, u_int8_t code[])
-{
-       unsigned int limit = sizeof(icmpv6_codes)/sizeof(struct icmpv6_names);
-       unsigned int match = limit;
-       unsigned int i;
-
-       for (i = 0; i < limit; i++) {
-               if (strncasecmp(icmpv6_codes[i].name, icmpv6type, strlen(icmpv6type))
-                   == 0) {
-                       if (match != limit)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "Ambiguous ICMPv6 type `%s':"
-                                          " `%s' or `%s'?",
-                                          icmpv6type,
-                                          icmpv6_codes[match].name,
-                                          icmpv6_codes[i].name);
-                       match = i;
-               }
-       }
-
-       if (match != limit) {
-               *type = icmpv6_codes[match].type;
-               code[0] = icmpv6_codes[match].code_min;
-               code[1] = icmpv6_codes[match].code_max;
-       } else {
-               char *slash;
-               char buffer[strlen(icmpv6type) + 1];
-               unsigned int number;
-
-               strcpy(buffer, icmpv6type);
-               slash = strchr(buffer, '/');
-
-               if (slash)
-                       *slash = '\0';
-
-               if (string_to_number(buffer, 0, 255, &number) == -1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Invalid ICMPv6 type `%s'\n", buffer);
-               *type = number;
-               if (slash) {
-                       if (string_to_number(slash+1, 0, 255, &number) == -1)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "Invalid ICMPv6 code `%s'\n",
-                                          slash+1);
-                       code[0] = code[1] = number;
-               } else {
-                       code[0] = 0;
-                       code[1] = 0xFF;
-               }
-       }
-}
-
-/* Initialize the match. */
-static void icmp6_init(struct xt_entry_match *m)
-{
-       struct ip6t_icmp *icmpv6info = (struct ip6t_icmp *)m->data;
-
-       icmpv6info->code[1] = 0xFF;
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int icmp6_parse(int c, char **argv, int invert, unsigned int *flags,
-                       const void *entry, struct xt_entry_match **match)
-{
-       struct ip6t_icmp *icmpv6info = (struct ip6t_icmp *)(*match)->data;
-
-       switch (c) {
-       case '1':
-               if (*flags == 1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "icmpv6 match: only use --icmpv6-type once!");
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_icmpv6(argv[optind-1], &icmpv6info->type, 
-                            icmpv6info->code);
-               if (invert)
-                       icmpv6info->invflags |= IP6T_ICMP_INV;
-               *flags = 1;
-               break;
-
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static void print_icmpv6type(u_int8_t type,
-                          u_int8_t code_min, u_int8_t code_max,
-                          int invert,
-                          int numeric)
-{
-       if (!numeric) {
-               unsigned int i;
-
-               for (i = 0;
-                    i < sizeof(icmpv6_codes)/sizeof(struct icmpv6_names);
-                    i++) {
-                       if (icmpv6_codes[i].type == type
-                           && icmpv6_codes[i].code_min == code_min
-                           && icmpv6_codes[i].code_max == code_max)
-                               break;
-               }
-
-               if (i != sizeof(icmpv6_codes)/sizeof(struct icmpv6_names)) {
-                       printf("%s%s ",
-                              invert ? "!" : "",
-                              icmpv6_codes[i].name);
-                       return;
-               }
-       }
-
-       if (invert)
-               printf("!");
-
-       printf("type %u", type);
-       if (code_min == 0 && code_max == 0xFF)
-               printf(" ");
-       else if (code_min == code_max)
-               printf(" code %u ", code_min);
-       else
-               printf(" codes %u-%u ", code_min, code_max);
-}
-
-/* Prints out the union ipt_matchinfo. */
-static void icmp6_print(const void *ip, const struct xt_entry_match *match,
-                        int numeric)
-{
-       const struct ip6t_icmp *icmpv6 = (struct ip6t_icmp *)match->data;
-
-       printf("ipv6-icmp ");
-       print_icmpv6type(icmpv6->type, icmpv6->code[0], icmpv6->code[1],
-                      icmpv6->invflags & IP6T_ICMP_INV,
-                      numeric);
-
-       if (icmpv6->invflags & ~IP6T_ICMP_INV)
-               printf("Unknown invflags: 0x%X ",
-                      icmpv6->invflags & ~IP6T_ICMP_INV);
-}
-
-/* Saves the match in parsable form to stdout. */
-static void icmp6_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct ip6t_icmp *icmpv6 = (struct ip6t_icmp *)match->data;
-
-       if (icmpv6->invflags & IP6T_ICMP_INV)
-               printf("! ");
-
-       printf("--icmpv6-type %u", icmpv6->type);
-       if (icmpv6->code[0] != 0 || icmpv6->code[1] != 0xFF)
-               printf("/%u", icmpv6->code[0]);
-       printf(" ");
-}
-
-static void icmp6_check(unsigned int flags)
-{
-       if (!flags)
-               exit_error(PARAMETER_PROBLEM,
-                          "icmpv6 match: You must specify `--icmpv6-type'");
-}
-
-static struct xtables_match icmp6_mt6_reg = {
-       .name           = "icmp6",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET6,
-       .size           = XT_ALIGN(sizeof(struct ip6t_icmp)),
-       .userspacesize  = XT_ALIGN(sizeof(struct ip6t_icmp)),
-       .help           = icmp6_help,
-       .init           = icmp6_init,
-       .parse          = icmp6_parse,
-       .final_check    = icmp6_check,
-       .print          = icmp6_print,
-       .save           = icmp6_save,
-       .extra_opts     = icmp6_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&icmp6_mt6_reg);
-}
diff --git a/extensions/libip6t_icmp6.man b/extensions/libip6t_icmp6.man
deleted file mode 100644 (file)
index 60dddf7..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-This extension can be used if `--protocol ipv6-icmp' or `--protocol icmpv6' is
-specified. It provides the following option:
-.TP
-[\fB!\fP] \fB--icmpv6-type\fP \fItype\fP[\fB/\fP\fIcode\fP]|\fItypename\fP
-This allows specification of the ICMPv6 type, which can be a numeric
-ICMPv6
-.IR type ,
-.IR type
-and
-.IR code ,
-or one of the ICMPv6 type names shown by the command
-.nf
- ip6tables -p ipv6-icmp -h
-.fi
diff --git a/extensions/libip6t_ipv6header.c b/extensions/libip6t_ipv6header.c
deleted file mode 100644 (file)
index 5597872..0000000
+++ /dev/null
@@ -1,306 +0,0 @@
-/* ipv6header match - matches IPv6 packets based
-on whether they contain certain headers */
-
-/* Original idea: Brad Chapman 
- * Rewritten by: Andras Kis-Szabo <kisza@sch.bme.hu> */
-
-#include <getopt.h>
-#include <ip6tables.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <netdb.h>
-#include <sys/types.h>
-
-#include <linux/netfilter_ipv6/ip6_tables.h>
-#include <linux/netfilter_ipv6/ip6t_ipv6header.h>
-
-/* This maybe required 
-#include <linux/in.h>
-#include <linux/in6.h>
-*/
-
-
-/* A few hardcoded protocols for 'all' and in case the user has no
- *    /etc/protocols */
-struct pprot {
-       char *name;
-       u_int8_t num;
-};
-
-struct numflag {
-       u_int8_t proto;
-       u_int8_t flag;
-};
-
-static const struct pprot chain_protos[] = {
-       { "hop-by-hop", IPPROTO_HOPOPTS },
-       { "protocol", IPPROTO_RAW },
-       { "hop", IPPROTO_HOPOPTS },
-       { "dst", IPPROTO_DSTOPTS },
-       { "route", IPPROTO_ROUTING },
-       { "frag", IPPROTO_FRAGMENT },
-       { "auth", IPPROTO_AH },
-       { "esp", IPPROTO_ESP },
-       { "none", IPPROTO_NONE },
-       { "prot", IPPROTO_RAW },
-       { "0", IPPROTO_HOPOPTS },
-       { "60", IPPROTO_DSTOPTS },
-       { "43", IPPROTO_ROUTING },
-       { "44", IPPROTO_FRAGMENT },
-       { "51", IPPROTO_AH },
-       { "50", IPPROTO_ESP },
-       { "59", IPPROTO_NONE },
-       { "255", IPPROTO_RAW },
-       /* { "all", 0 }, */
-};
-
-static const struct numflag chain_flags[] = {
-       { IPPROTO_HOPOPTS, MASK_HOPOPTS },
-       { IPPROTO_DSTOPTS, MASK_DSTOPTS },
-       { IPPROTO_ROUTING, MASK_ROUTING },
-       { IPPROTO_FRAGMENT, MASK_FRAGMENT },
-       { IPPROTO_AH, MASK_AH },
-       { IPPROTO_ESP, MASK_ESP },
-       { IPPROTO_NONE, MASK_NONE },
-       { IPPROTO_RAW, MASK_PROTO },
-};
-
-static char *
-proto_to_name(u_int8_t proto, int nolookup)
-{
-        unsigned int i;
-
-        if (proto && !nolookup) {
-                struct protoent *pent = getprotobynumber(proto);
-                if (pent)
-                        return pent->p_name;
-        }
-
-        for (i = 0; i < sizeof(chain_protos)/sizeof(struct pprot); i++)
-                if (chain_protos[i].num == proto)
-                        return chain_protos[i].name;
-
-        return NULL;
-}
-
-static u_int16_t
-name_to_proto(const char *s)
-{
-        unsigned int proto=0;
-        struct protoent *pent;
-
-        if ((pent = getprotobyname(s)))
-               proto = pent->p_proto;
-        else {
-               unsigned int i;
-               for (i = 0;
-                       i < sizeof(chain_protos)/sizeof(struct pprot);
-                       i++) {
-                       if (strcmp(s, chain_protos[i].name) == 0) {
-                               proto = chain_protos[i].num;
-                               break;
-                       }
-               }
-
-               if (i == sizeof(chain_protos)/sizeof(struct pprot))
-                       exit_error(PARAMETER_PROBLEM,
-                               "unknown header `%s' specified",
-                               s);
-        }
-
-        return (u_int16_t)proto;
-}
-
-static unsigned int 
-add_proto_to_mask(int proto){
-       unsigned int i=0, flag=0;
-
-       for (i = 0;
-               i < sizeof(chain_flags)/sizeof(struct numflag);
-               i++) {
-                       if (proto == chain_flags[i].proto){
-                               flag = chain_flags[i].flag;
-                               break;
-                       }
-       }
-
-       if (i == sizeof(chain_flags)/sizeof(struct numflag))
-               exit_error(PARAMETER_PROBLEM,
-               "unknown header `%d' specified",
-               proto);
-       
-       return flag;
-}      
-
-static void ipv6header_help(void)
-{
-       printf(
-"ipv6header match options:\n"
-"--header [!] headers     Type of header to match, by name\n"
-"                         names: hop,dst,route,frag,auth,esp,none,proto\n"
-"                    long names: hop-by-hop,ipv6-opts,ipv6-route,\n"
-"                                ipv6-frag,ah,esp,ipv6-nonxt,protocol\n"
-"                       numbers: 0,60,43,44,51,50,59\n"
-"--soft                    The header CONTAINS the specified extensions\n");
-}
-
-static const struct option ipv6header_opts[] = {
-       { "header", 1, NULL, '1' },
-       { "soft", 0, NULL, '2' },
-       { .name = NULL }
-};
-
-static void ipv6header_init(struct xt_entry_match *m)
-{
-       struct ip6t_ipv6header_info *info = (struct ip6t_ipv6header_info *)m->data;
-
-       info->matchflags = 0x00;
-       info->invflags = 0x00;
-       info->modeflag = 0x00;
-}
-
-static unsigned int
-parse_header(const char *flags) {
-        unsigned int ret = 0;
-        char *ptr;
-        char *buffer;
-
-        buffer = strdup(flags);
-
-        for (ptr = strtok(buffer, ","); ptr; ptr = strtok(NULL, ",")) 
-               ret |= add_proto_to_mask(name_to_proto(ptr));
-                
-        free(buffer);
-        return ret;
-}
-
-#define IPV6_HDR_HEADER        0x01
-#define IPV6_HDR_SOFT  0x02
-
-/* Parses command options; returns 0 if it ate an option */
-static int
-ipv6header_parse(int c, char **argv, int invert, unsigned int *flags,
-                 const void *entry, struct xt_entry_match **match)
-{
-       struct ip6t_ipv6header_info *info = (struct ip6t_ipv6header_info *)(*match)->data;
-
-       switch (c) {
-               case '1' : 
-                       /* Parse the provided header names */
-                       if (*flags & IPV6_HDR_HEADER)
-                               exit_error(PARAMETER_PROBLEM,
-                                       "Only one `--header' allowed");
-
-                       check_inverse(optarg, &invert, &optind, 0);
-
-                       if (! (info->matchflags = parse_header(argv[optind-1])) )
-                               exit_error(PARAMETER_PROBLEM, "ip6t_ipv6header: cannot parse header names");
-
-                       if (invert) 
-                               info->invflags |= 0xFF;
-                       *flags |= IPV6_HDR_HEADER;
-                       break;
-               case '2' : 
-                       /* Soft-mode requested? */
-                       if (*flags & IPV6_HDR_SOFT)
-                               exit_error(PARAMETER_PROBLEM,
-                                       "Only one `--soft' allowed");
-
-                       info->modeflag |= 0xFF;
-                       *flags |= IPV6_HDR_SOFT;
-                       break;
-               default:
-                       return 0;
-       }
-
-       return 1;
-}
-
-/* Checks the flags variable */
-static void ipv6header_check(unsigned int flags)
-{
-       if (!flags) exit_error(PARAMETER_PROBLEM, "ip6t_ipv6header: no options specified");
-}
-
-static void
-print_header(u_int8_t flags){
-        int have_flag = 0;
-
-        while (flags) {
-                unsigned int i;
-
-                for (i = 0; (flags & chain_flags[i].flag) == 0; i++);
-
-                if (have_flag)
-                        printf(",");
-
-                printf("%s", proto_to_name(chain_flags[i].proto,0));
-                have_flag = 1;
-
-                flags &= ~chain_flags[i].flag;
-        }
-
-        if (!have_flag)
-                printf("NONE");
-}
-
-/* Prints out the match */
-static void ipv6header_print(const void *ip,
-                             const struct xt_entry_match *match, int numeric)
-{
-       const struct ip6t_ipv6header_info *info = (const struct ip6t_ipv6header_info *)match->data;
-       printf("ipv6header ");
-
-        if (info->matchflags || info->invflags) {
-                printf("flags:%s", info->invflags ? "!" : "");
-                if (numeric)
-                        printf("0x%02X ", info->matchflags);
-                else {
-                        print_header(info->matchflags);
-                        printf(" ");
-                }
-        }
-
-       if (info->modeflag)
-               printf("soft ");
-
-       return;
-}
-
-/* Saves the match */
-static void ipv6header_save(const void *ip, const struct xt_entry_match *match)
-{
-
-       const struct ip6t_ipv6header_info *info = (const struct ip6t_ipv6header_info *)match->data;
-
-       printf("--header ");
-       printf("%s", info->invflags ? "!" : "");
-       print_header(info->matchflags);
-       printf(" ");
-       if (info->modeflag)
-               printf("--soft ");
-
-       return;
-}
-
-static struct xtables_match ipv6header_mt6_reg = {
-       .name           = "ipv6header",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET6,
-       .size           = XT_ALIGN(sizeof(struct ip6t_ipv6header_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct ip6t_ipv6header_info)),
-       .help           = ipv6header_help,
-       .init           = ipv6header_init,
-       .parse          = ipv6header_parse,
-       .final_check    = ipv6header_check,
-       .print          = ipv6header_print,
-       .save           = ipv6header_save,
-       .extra_opts     = ipv6header_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&ipv6header_mt6_reg);
-}
diff --git a/extensions/libip6t_ipv6header.man b/extensions/libip6t_ipv6header.man
deleted file mode 100644 (file)
index 23478b4..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-This module matches IPv6 extension headers and/or upper layer header.
-.TP
-\fB--soft\fP
-Matches if the packet includes \fBany\fP of the headers specified with
-\fB--header\fP.
-.TP
-[\fB!\fP] \fB--header\fP \fIheader\fP[\fB,\fP\fIheader\fP...]
-Matches the packet which EXACTLY includes all specified headers. The headers
-encapsulated with ESP header are out of scope.
-Possible \fIheader\fP types can be:
-.TP
-\fBhop\fP|\fBhop-by-hop\fP
-Hop-by-Hop Options header
-.TP
-\fBdst\fP
-Destination Options header
-.TP
-\fBroute\fP
-Routing header
-.TP
-\fBfrag\fP
-Fragment header
-.TP
-\fBauth\fP
-Authentication header
-.TP
-\fBesp\fP
-Encapsulating Security Payload header
-.TP
-\fBnone\fP
-No Next header which matches 59 in the 'Next Header field' of IPv6 header or
-any IPv6 extension headers
-.TP
-\fBproto\fP
-which matches any upper layer protocol header. A protocol name from
-/etc/protocols and numeric value also allowed. The number 255 is equivalent to
-\fBproto\fP.
diff --git a/extensions/libip6t_mh.c b/extensions/libip6t_mh.c
deleted file mode 100644 (file)
index a6cd562..0000000
+++ /dev/null
@@ -1,242 +0,0 @@
-/* Shared library add-on to ip6tables to add mobility header support. */
-/*
- * Copyright (C)2006 USAGI/WIDE Project
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * Author:
- *     Masahide NAKAMURA @USAGI <masahide.nakamura.cz@hitachi.com>
- *
- * Based on libip6t_{icmpv6,udp}.c
- */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <ip6tables.h>
-#include <linux/netfilter_ipv6/ip6_tables.h>
-#include <linux/netfilter_ipv6/ip6t_mh.h>
-
-struct mh_name {
-       const char *name;
-       u_int8_t type;
-};
-
-static const struct mh_name mh_names[] = {
-       { "binding-refresh-request", 0, },
-       /* Alias */ { "brr", 0, },
-       { "home-test-init", 1, },
-       /* Alias */ { "hoti", 1, },
-       { "careof-test-init", 2, },
-       /* Alias */ { "coti", 2, },
-       { "home-test", 3, },
-       /* Alias */ { "hot", 3, },
-       { "careof-test", 4, },
-       /* Alias */ { "cot", 4, },
-       { "binding-update", 5, },
-       /* Alias */ { "bu", 5, },
-       { "binding-acknowledgement", 6, },
-       /* Alias */ { "ba", 6, },
-       { "binding-error", 7, },
-       /* Alias */ { "be", 7, },
-};
-
-static void print_types_all(void)
-{
-       unsigned int i;
-       printf("Valid MH types:");
-
-       for (i = 0; i < sizeof(mh_names)/sizeof(struct mh_name); i++) {
-               if (i && mh_names[i].type == mh_names[i-1].type)
-                       printf(" (%s)", mh_names[i].name);
-               else
-                       printf("\n%s", mh_names[i].name);
-       }
-       printf("\n");
-}
-
-static void mh_help(void)
-{
-       printf(
-"mh match options:\n"
-" --mh-type [!] type[:type]    match mh type\n");
-       print_types_all();
-}
-
-static void mh_init(struct xt_entry_match *m)
-{
-       struct ip6t_mh *mhinfo = (struct ip6t_mh *)m->data;
-
-       mhinfo->types[1] = 0xFF;
-}
-
-static unsigned int name_to_type(const char *name)
-{
-       int namelen = strlen(name);
-       unsigned int limit = sizeof(mh_names)/sizeof(struct mh_name);
-       unsigned int match = limit;
-       unsigned int i;
-
-       for (i = 0; i < limit; i++) {
-               if (strncasecmp(mh_names[i].name, name, namelen) == 0) {
-                       int len = strlen(mh_names[i].name);
-                       if (match == limit || len == namelen)
-                               match = i;
-               }
-       }
-
-       if (match != limit) {
-               return mh_names[match].type;
-       } else {
-               unsigned int number;
-
-               if (string_to_number(name, 0, 255, &number) == -1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Invalid MH type `%s'\n", name);
-               return number;
-       }
-}
-
-static void parse_mh_types(const char *mhtype, u_int8_t *types)
-{
-       char *buffer;
-       char *cp;
-
-       buffer = strdup(mhtype);
-       if ((cp = strchr(buffer, ':')) == NULL)
-               types[0] = types[1] = name_to_type(buffer);
-       else {
-               *cp = '\0';
-               cp++;
-
-               types[0] = buffer[0] ? name_to_type(buffer) : 0;
-               types[1] = cp[0] ? name_to_type(cp) : 0xFF;
-
-               if (types[0] > types[1])
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Invalid MH type range (min > max)");
-       }
-       free(buffer);
-}
-
-#define MH_TYPES 0x01
-
-static int mh_parse(int c, char **argv, int invert, unsigned int *flags,
-                    const void *entry, struct xt_entry_match **match)
-{
-       struct ip6t_mh *mhinfo = (struct ip6t_mh *)(*match)->data;
-
-       switch (c) {
-       case '1':
-               if (*flags & MH_TYPES)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--mh-type' allowed");
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_mh_types(argv[optind-1], mhinfo->types);
-               if (invert)
-                       mhinfo->invflags |= IP6T_MH_INV_TYPE;
-               *flags |= MH_TYPES;
-               break;
-
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static const char *type_to_name(u_int8_t type)
-{
-       unsigned int i;
-
-       for (i = 0; i < sizeof(mh_names)/sizeof(struct mh_name); i++) {
-               if (mh_names[i].type == type)
-                       return mh_names[i].name;
-       }
-
-       return NULL;
-}
-
-static void print_type(u_int8_t type, int numeric)
-{
-       const char *name;
-       if (numeric || !(name = type_to_name(type)))
-               printf("%u", type);
-       else
-               printf("%s", name);
-}
-
-static void print_types(u_int8_t min, u_int8_t max, int invert, int numeric)
-{
-       const char *inv = invert ? "!" : "";
-
-       if (min != 0 || max != 0xFF || invert) {
-               if (min == max) {
-                       printf("%s", inv);
-                       print_type(min, numeric);
-               } else {
-                       printf("%s", inv);
-                       print_type(min, numeric);
-                       printf(":");
-                       print_type(max, numeric);
-               }
-               printf(" ");
-       }
-}
-
-static void mh_print(const void *ip, const struct xt_entry_match *match,
-                     int numeric)
-{
-       const struct ip6t_mh *mhinfo = (struct ip6t_mh *)match->data;
-
-       printf("mh ");
-       print_types(mhinfo->types[0], mhinfo->types[1],
-                   mhinfo->invflags & IP6T_MH_INV_TYPE,
-                   numeric);
-       if (mhinfo->invflags & ~IP6T_MH_INV_MASK)
-               printf("Unknown invflags: 0x%X ",
-                      mhinfo->invflags & ~IP6T_MH_INV_MASK);
-}
-
-static void mh_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct ip6t_mh *mhinfo = (struct ip6t_mh *)match->data;
-
-       if (mhinfo->types[0] == 0 && mhinfo->types[1] == 0xFF)
-               return;
-
-       if (mhinfo->invflags & IP6T_MH_INV_TYPE)
-               printf("! ");
-
-       if (mhinfo->types[0] != mhinfo->types[1])
-               printf("--mh-type %u:%u ", mhinfo->types[0], mhinfo->types[1]);
-       else
-               printf("--mh-type %u ", mhinfo->types[0]);
-}
-
-static const struct option mh_opts[] = {
-       { "mh-type", 1, NULL, '1' },
-       { .name = NULL }
-};
-
-static struct xtables_match mh_mt6_reg = {
-       .name           = "mh",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET6,
-       .size           = XT_ALIGN(sizeof(struct ip6t_mh)),
-       .userspacesize  = XT_ALIGN(sizeof(struct ip6t_mh)),
-       .help           = mh_help,
-       .init           = mh_init,
-       .parse          = mh_parse,
-       .print          = mh_print,
-       .save           = mh_save,
-       .extra_opts     = mh_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&mh_mt6_reg);
-}
diff --git a/extensions/libip6t_mh.man b/extensions/libip6t_mh.man
deleted file mode 100644 (file)
index f5a1f96..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-This extension is loaded if `--protocol ipv6-mh' or `--protocol mh' is
-specified. It provides the following option:
-.TP
-[\fB!\fP] \fB--mh-type\fP \fItype\fP[\fB:\fP\fItype\fP]
-This allows specification of the Mobility Header(MH) type, which can be
-a numeric MH
-.IR type ,
-.IR type
-or one of the MH type names shown by the command
-.nf
- ip6tables -p ipv6-mh -h
-.fi
diff --git a/extensions/libip6t_policy.c b/extensions/libip6t_policy.c
deleted file mode 100644 (file)
index eaf861e..0000000
+++ /dev/null
@@ -1,462 +0,0 @@
-/* Shared library add-on to iptables to add policy support. */
-
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <syslog.h>
-#include <getopt.h>
-#include <netdb.h>
-#include <errno.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <ip6tables.h>
-
-#include <linux/netfilter_ipv6/ip6_tables.h>
-#include "../include/linux/netfilter_ipv6/ip6t_policy.h"
-
-/*
- * HACK: global pointer to current matchinfo for making
- * final checks and adjustments in final_check.
- */
-static struct ip6t_policy_info *policy_info;
-
-static void policy_help(void)
-{
-       printf(
-"policy match options:\n"
-"  --dir in|out                        match policy applied during decapsulation/\n"
-"                              policy to be applied during encapsulation\n"
-"  --pol none|ipsec            match policy\n"
-"  --strict                    match entire policy instead of single element\n"
-"                              at any position\n"
-"[!] --reqid reqid             match reqid\n"
-"[!] --spi spi                 match SPI\n"
-"[!] --proto proto             match protocol (ah/esp/ipcomp)\n"
-"[!] --mode mode               match mode (transport/tunnel)\n"
-"[!] --tunnel-src addr/masklen match tunnel source\n"
-"[!] --tunnel-dst addr/masklen match tunnel destination\n"
-"  --next                      begin next element in policy\n");
-}
-
-static const struct option policy_opts[] =
-{
-       {
-               .name           = "dir",
-               .has_arg        = 1,
-               .val            = '1',
-       },
-       {
-               .name           = "pol",
-               .has_arg        = 1,
-               .val            = '2',
-       },
-       {
-               .name           = "strict",
-               .val            = '3'
-       },
-       {
-               .name           = "reqid",
-               .has_arg        = 1,
-               .val            = '4',
-       },
-       {
-               .name           = "spi",
-               .has_arg        = 1,
-               .val            = '5'
-       },
-       {
-               .name           = "tunnel-src",
-               .has_arg        = 1,
-               .val            = '6'
-       },
-       {
-               .name           = "tunnel-dst",
-               .has_arg        = 1,
-               .val            = '7'
-       },
-       {
-               .name           = "proto",
-               .has_arg        = 1,
-               .val            = '8'
-       },
-       {
-               .name           = "mode",
-               .has_arg        = 1,
-               .val            = '9'
-       },
-       {
-               .name           = "next",
-               .val            = 'a'
-       },
-       { .name = NULL }
-};
-
-/* FIXME - Duplicated code from ip6tables.c */
-/* Duplicated to stop too many changes in other files .... */
-static void
-in6addrcpy(struct in6_addr *dst, struct in6_addr *src)
-{
-        memcpy(dst, src, sizeof(struct in6_addr));
-        /* dst->s6_addr = src->s6_addr; */
-}
-
-static char *
-addr_to_numeric(const struct in6_addr *addrp)
-{
-        /* 0000:0000:0000:0000:0000:000.000.000.000
-        * 0000:0000:0000:0000:0000:0000:0000:0000 */
-        static char buf[50+1];
-        return (char *)inet_ntop(AF_INET6, addrp, buf, sizeof(buf));
-}
-
-static char *
-mask_to_numeric(const struct in6_addr *addrp)
-{
-        static char buf[50+2];
-        int l = ipv6_prefix_length(addrp);
-        if (l == -1) {
-               strcpy(buf, "/");
-               strcat(buf, addr_to_numeric(addrp));
-               return buf;
-       }
-       sprintf(buf, "/%d", l);
-       return buf;
-}
-
-static int parse_direction(char *s)
-{
-       if (strcmp(s, "in") == 0)
-               return IP6T_POLICY_MATCH_IN;
-       if (strcmp(s, "out") == 0)
-               return IP6T_POLICY_MATCH_OUT;
-       exit_error(PARAMETER_PROBLEM, "policy_match: invalid dir `%s'", s);
-}
-
-static int parse_policy(char *s)
-{
-       if (strcmp(s, "none") == 0)
-               return IP6T_POLICY_MATCH_NONE;
-       if (strcmp(s, "ipsec") == 0)
-               return 0;
-       exit_error(PARAMETER_PROBLEM, "policy match: invalid policy `%s'", s);
-}
-
-static int parse_mode(char *s)
-{
-       if (strcmp(s, "transport") == 0)
-               return IP6T_POLICY_MODE_TRANSPORT;
-       if (strcmp(s, "tunnel") == 0)
-               return IP6T_POLICY_MODE_TUNNEL;
-       exit_error(PARAMETER_PROBLEM, "policy match: invalid mode `%s'", s);
-}
-
-static int policy_parse(int c, char **argv, int invert, unsigned int *flags,
-                        const void *entry, struct xt_entry_match **match)
-{
-       struct ip6t_policy_info *info = (void *)(*match)->data;
-       struct ip6t_policy_elem *e = &info->pol[info->len];
-       struct in6_addr *addr = NULL, mask;
-       unsigned int naddr = 0;
-       int mode;
-
-       check_inverse(optarg, &invert, &optind, 0);
-
-       switch (c) {
-       case '1':
-               if (info->flags & (IP6T_POLICY_MATCH_IN|IP6T_POLICY_MATCH_OUT))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: double --dir option");
-               if (invert)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: can't invert --dir option");
-
-               info->flags |= parse_direction(argv[optind-1]);
-               break;
-       case '2':
-               if (invert)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: can't invert --policy option");
-
-               info->flags |= parse_policy(argv[optind-1]);
-               break;
-       case '3':
-               if (info->flags & IP6T_POLICY_MATCH_STRICT)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: double --strict option");
-
-               if (invert)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: can't invert --strict option");
-
-               info->flags |= IP6T_POLICY_MATCH_STRICT;
-               break;
-       case '4':
-               if (e->match.reqid)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: double --reqid option");
-
-               e->match.reqid = 1;
-               e->invert.reqid = invert;
-               e->reqid = strtol(argv[optind-1], NULL, 10);
-               break;
-       case '5':
-               if (e->match.spi)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: double --spi option");
-
-               e->match.spi = 1;
-               e->invert.spi = invert;
-               e->spi = strtol(argv[optind-1], NULL, 0x10);
-               break;
-       case '6':
-               if (e->match.saddr)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: double --tunnel-src option");
-
-               ip6parse_hostnetworkmask(argv[optind-1], &addr, &mask, &naddr);
-               if (naddr > 1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: name resolves to multiple IPs");
-
-               e->match.saddr = 1;
-               e->invert.saddr = invert;
-               in6addrcpy(&e->saddr.a6, addr);
-               in6addrcpy(&e->smask.a6, &mask);
-                break;
-       case '7':
-               if (e->match.daddr)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: double --tunnel-dst option");
-
-               ip6parse_hostnetworkmask(argv[optind-1], &addr, &mask, &naddr);
-               if (naddr > 1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: name resolves to multiple IPs");
-
-               e->match.daddr = 1;
-               e->invert.daddr = invert;
-               in6addrcpy(&e->daddr.a6, addr);
-               in6addrcpy(&e->dmask.a6, &mask);
-               break;
-       case '8':
-               if (e->match.proto)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: double --proto option");
-
-               e->proto = parse_protocol(argv[optind-1]);
-               if (e->proto != IPPROTO_AH && e->proto != IPPROTO_ESP &&
-                   e->proto != IPPROTO_COMP)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: protocol must ah/esp/ipcomp");
-               e->match.proto = 1;
-               e->invert.proto = invert;
-               break;
-       case '9':
-               if (e->match.mode)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: double --mode option");
-
-               mode = parse_mode(argv[optind-1]);
-               e->match.mode = 1;
-               e->invert.mode = invert;
-               e->mode = mode;
-               break;
-       case 'a':
-               if (invert)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: can't invert --next option");
-
-               if (++info->len == IP6T_POLICY_MAX_ELEM)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: maximum policy depth reached");
-               break;
-       default:
-               return 0;
-       }
-
-       policy_info = info;
-       return 1;
-}
-
-static void policy_check(unsigned int flags)
-{
-       struct ip6t_policy_info *info = policy_info;
-       struct ip6t_policy_elem *e;
-       int i;
-
-       if (info == NULL)
-               exit_error(PARAMETER_PROBLEM,
-                          "policy match: no parameters given");
-
-       if (!(info->flags & (IP6T_POLICY_MATCH_IN|IP6T_POLICY_MATCH_OUT)))
-               exit_error(PARAMETER_PROBLEM,
-                          "policy match: neither --in nor --out specified");
-
-       if (info->flags & IP6T_POLICY_MATCH_NONE) {
-               if (info->flags & IP6T_POLICY_MATCH_STRICT)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: policy none but --strict given");
-
-               if (info->len != 0)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: policy none but policy given");
-       } else
-               info->len++;    /* increase len by 1, no --next after last element */
-
-       if (!(info->flags & IP6T_POLICY_MATCH_STRICT) && info->len > 1)
-               exit_error(PARAMETER_PROBLEM,
-                          "policy match: multiple elements but no --strict");
-
-       for (i = 0; i < info->len; i++) {
-               e = &info->pol[i];
-
-                if (info->flags & IP6T_POLICY_MATCH_STRICT &&
-                   !(e->match.reqid || e->match.spi || e->match.saddr ||
-                      e->match.daddr || e->match.proto || e->match.mode))
-                        exit_error(PARAMETER_PROBLEM,
-                                   "policy match: empty policy element");
-
-               if ((e->match.saddr || e->match.daddr)
-                   && ((e->mode == IP6T_POLICY_MODE_TUNNEL && e->invert.mode) ||
-                       (e->mode == IP6T_POLICY_MODE_TRANSPORT && !e->invert.mode)))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: --tunnel-src/--tunnel-dst "
-                                  "is only valid in tunnel mode");
-       }
-}
-
-static void print_mode(char *prefix, u_int8_t mode, int numeric)
-{
-       printf("%smode ", prefix);
-
-       switch (mode) {
-       case IP6T_POLICY_MODE_TRANSPORT:
-               printf("transport ");
-               break;
-       case IP6T_POLICY_MODE_TUNNEL:
-               printf("tunnel ");
-               break;
-       default:
-               printf("??? ");
-               break;
-       }
-}
-
-static void print_proto(char *prefix, u_int8_t proto, int numeric)
-{
-       struct protoent *p = NULL;
-
-       printf("%sproto ", prefix);
-       if (!numeric)
-               p = getprotobynumber(proto);
-       if (p != NULL)
-               printf("%s ", p->p_name);
-       else
-               printf("%u ", proto);
-}
-
-#define PRINT_INVERT(x)                \
-do {                           \
-       if (x)                  \
-               printf("! ");   \
-} while(0)
-
-static void print_entry(char *prefix, const struct ip6t_policy_elem *e,
-                        int numeric)
-{
-       if (e->match.reqid) {
-               PRINT_INVERT(e->invert.reqid);
-               printf("%sreqid %u ", prefix, e->reqid);
-       }
-       if (e->match.spi) {
-               PRINT_INVERT(e->invert.spi);
-               printf("%sspi 0x%x ", prefix, e->spi);
-       }
-       if (e->match.proto) {
-               PRINT_INVERT(e->invert.proto);
-               print_proto(prefix, e->proto, numeric);
-       }
-       if (e->match.mode) {
-               PRINT_INVERT(e->invert.mode);
-               print_mode(prefix, e->mode, numeric);
-       }
-       if (e->match.daddr) {
-               PRINT_INVERT(e->invert.daddr);
-               printf("%stunnel-dst %s%s ", prefix,
-                      addr_to_numeric((struct in6_addr *)&e->daddr),
-                      mask_to_numeric((struct in6_addr *)&e->dmask));
-       }
-       if (e->match.saddr) {
-               PRINT_INVERT(e->invert.saddr);
-               printf("%stunnel-src %s%s ", prefix,
-                      addr_to_numeric((struct in6_addr *)&e->saddr),
-                      mask_to_numeric((struct in6_addr *)&e->smask));
-       }
-}
-
-static void print_flags(char *prefix, const struct ip6t_policy_info *info)
-{
-       if (info->flags & IP6T_POLICY_MATCH_IN)
-               printf("%sdir in ", prefix);
-       else
-               printf("%sdir out ", prefix);
-
-       if (info->flags & IP6T_POLICY_MATCH_NONE)
-               printf("%spol none ", prefix);
-       else
-               printf("%spol ipsec ", prefix);
-
-       if (info->flags & IP6T_POLICY_MATCH_STRICT)
-               printf("%sstrict ", prefix);
-}
-
-static void policy_print(const void *ip, const struct xt_entry_match *match,
-                         int numeric)
-{
-       const struct ip6t_policy_info *info = (void *)match->data;
-       unsigned int i;
-
-       printf("policy match ");
-       print_flags("", info);
-       for (i = 0; i < info->len; i++) {
-               if (info->len > 1)
-                       printf("[%u] ", i);
-               print_entry("", &info->pol[i], numeric);
-       }
-
-       printf("\n");
-}
-
-static void policy_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct ip6t_policy_info *info = (void *)match->data;
-       unsigned int i;
-
-       print_flags("--", info);
-       for (i = 0; i < info->len; i++) {
-               print_entry("--", &info->pol[i], 0);
-               if (i + 1 < info->len)
-                       printf("--next ");
-       }
-}
-
-static struct xtables_match policy_mt6_reg = {
-       .name           = "policy",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET6,
-       .size           = XT_ALIGN(sizeof(struct ip6t_policy_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct ip6t_policy_info)),
-       .help           = policy_help,
-       .parse          = policy_parse,
-       .final_check    = policy_check,
-       .print          = policy_print,
-       .save           = policy_save,
-       .extra_opts     = policy_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&policy_mt6_reg);
-}
diff --git a/extensions/libip6t_rt.c b/extensions/libip6t_rt.c
deleted file mode 100644 (file)
index b5f54ee..0000000
+++ /dev/null
@@ -1,350 +0,0 @@
-/* Shared library add-on to ip6tables to add Routing header support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <errno.h>
-#include <ip6tables.h>
-/*#include <linux/in6.h>*/
-#include <linux/netfilter_ipv6/ip6t_rt.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <arpa/inet.h>
-                                        
-/*#define DEBUG        1*/
-
-/* Function which prints out usage message. */
-static void rt_help(void)
-{
-       printf(
-"rt match options:\n"
-" --rt-type [!] type            match the type\n"
-" --rt-segsleft [!] num[:num]   match the Segments Left field (range)\n"
-" --rt-len [!] length           total length of this header\n"
-" --rt-0-res                    check the reserved filed, too (type 0)\n"
-" --rt-0-addrs ADDR[,ADDR...]   Type=0 addresses (list, max: %d)\n"
-" --rt-0-not-strict             List of Type=0 addresses not a strict list\n",
-IP6T_RT_HOPS);
-}
-
-static const struct option rt_opts[] = {
-       { "rt-type", 1, NULL, '1' },
-       { "rt-segsleft", 1, NULL, '2' },
-       { "rt-len", 1, NULL, '3' },
-       { "rt-0-res", 0, NULL, '4' },
-       { "rt-0-addrs", 1, NULL, '5' },
-       { "rt-0-not-strict", 0, NULL, '6' },
-       { .name = NULL }
-};
-
-static u_int32_t
-parse_rt_num(const char *idstr, const char *typestr)
-{
-       unsigned long int id;
-       char* ep;
-
-       id =  strtoul(idstr,&ep,0) ;
-
-       if ( idstr == ep ) {
-               exit_error(PARAMETER_PROBLEM,
-                          "RT no valid digits in %s `%s'", typestr, idstr);
-       }
-       if ( id == ULONG_MAX  && errno == ERANGE ) {
-               exit_error(PARAMETER_PROBLEM,
-                          "%s `%s' specified too big: would overflow",
-                          typestr, idstr);
-       }       
-       if ( *idstr != '\0'  && *ep != '\0' ) {
-               exit_error(PARAMETER_PROBLEM,
-                          "RT error parsing %s `%s'", typestr, idstr);
-       }
-       return (u_int32_t) id;
-}
-
-static void
-parse_rt_segsleft(const char *idstring, u_int32_t *ids)
-{
-       char *buffer;
-       char *cp;
-
-       buffer = strdup(idstring);
-       if ((cp = strchr(buffer, ':')) == NULL)
-               ids[0] = ids[1] = parse_rt_num(buffer,"segsleft");
-       else {
-               *cp = '\0';
-               cp++;
-
-               ids[0] = buffer[0] ? parse_rt_num(buffer,"segsleft") : 0;
-               ids[1] = cp[0] ? parse_rt_num(cp,"segsleft") : 0xFFFFFFFF;
-       }
-       free(buffer);
-}
-
-static char *
-addr_to_numeric(const struct in6_addr *addrp)
-{
-       static char buf[50+1];
-       return (char *)inet_ntop(AF_INET6, addrp, buf, sizeof(buf));
-}
-
-static struct in6_addr *
-numeric_to_addr(const char *num)
-{
-       static struct in6_addr ap;
-       int err;
-
-       if ((err=inet_pton(AF_INET6, num, &ap)) == 1)
-               return &ap;
-#ifdef DEBUG
-       fprintf(stderr, "\nnumeric2addr: %d\n", err);
-#endif
-        exit_error(PARAMETER_PROBLEM, "bad address: %s", num);
-
-       return (struct in6_addr *)NULL;
-}
-
-
-static int
-parse_addresses(const char *addrstr, struct in6_addr *addrp)
-{
-        char *buffer, *cp, *next;
-        unsigned int i;
-       
-       buffer = strdup(addrstr);
-        if (!buffer) exit_error(OTHER_PROBLEM, "strdup failed");
-                       
-        for (cp=buffer, i=0; cp && i<IP6T_RT_HOPS; cp=next,i++)
-        {
-                next=strchr(cp, ',');
-                if (next) *next++='\0';
-               memcpy(&(addrp[i]), numeric_to_addr(cp), sizeof(struct in6_addr));
-#if DEBUG
-               printf("addr str: %s\n", cp);
-               printf("addr ip6: %s\n", addr_to_numeric((numeric_to_addr(cp))));
-               printf("addr [%d]: %s\n", i, addr_to_numeric(&(addrp[i])));
-#endif
-       }
-        if (cp) exit_error(PARAMETER_PROBLEM, "too many addresses specified");
-
-       free(buffer);
-
-#if DEBUG
-       printf("addr nr: %d\n", i);
-#endif
-
-       return i;
-}
-
-/* Initialize the match. */
-static void rt_init(struct xt_entry_match *m)
-{
-       struct ip6t_rt *rtinfo = (struct ip6t_rt *)m->data;
-
-       rtinfo->rt_type = 0x0L;
-       rtinfo->segsleft[0] = 0x0L;
-       rtinfo->segsleft[1] = 0xFFFFFFFF;
-       rtinfo->hdrlen = 0;
-       rtinfo->flags = 0;
-       rtinfo->invflags = 0;
-       rtinfo->addrnr = 0;
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int rt_parse(int c, char **argv, int invert, unsigned int *flags,
-                    const void *entry, struct xt_entry_match **match)
-{
-       struct ip6t_rt *rtinfo = (struct ip6t_rt *)(*match)->data;
-
-       switch (c) {
-       case '1':
-               if (*flags & IP6T_RT_TYP)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--rt-type' allowed");
-               check_inverse(optarg, &invert, &optind, 0);
-               rtinfo->rt_type = parse_rt_num(argv[optind-1], "type");
-               if (invert)
-                       rtinfo->invflags |= IP6T_RT_INV_TYP;
-               rtinfo->flags |= IP6T_RT_TYP;
-               *flags |= IP6T_RT_TYP;
-               break;
-       case '2':
-               if (*flags & IP6T_RT_SGS)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--rt-segsleft' allowed");
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_rt_segsleft(argv[optind-1], rtinfo->segsleft);
-               if (invert)
-                       rtinfo->invflags |= IP6T_RT_INV_SGS;
-               rtinfo->flags |= IP6T_RT_SGS;
-               *flags |= IP6T_RT_SGS;
-               break;
-       case '3':
-               if (*flags & IP6T_RT_LEN)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--rt-len' allowed");
-               check_inverse(optarg, &invert, &optind, 0);
-               rtinfo->hdrlen = parse_rt_num(argv[optind-1], "length");
-               if (invert)
-                       rtinfo->invflags |= IP6T_RT_INV_LEN;
-               rtinfo->flags |= IP6T_RT_LEN;
-               *flags |= IP6T_RT_LEN;
-               break;
-       case '4':
-               if (*flags & IP6T_RT_RES)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--rt-0-res' allowed");
-               if ( !(*flags & IP6T_RT_TYP) || (rtinfo->rt_type != 0) || (rtinfo->invflags & IP6T_RT_INV_TYP) )
-                       exit_error(PARAMETER_PROBLEM,
-                                  "`--rt-type 0' required before `--rt-0-res'");
-               rtinfo->flags |= IP6T_RT_RES;
-               *flags |= IP6T_RT_RES;
-               break;
-       case '5':
-               if (*flags & IP6T_RT_FST)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--rt-0-addrs' allowed");
-               if ( !(*flags & IP6T_RT_TYP) || (rtinfo->rt_type != 0) || (rtinfo->invflags & IP6T_RT_INV_TYP) )
-                       exit_error(PARAMETER_PROBLEM,
-                                  "`--rt-type 0' required before `--rt-0-addrs'");
-               check_inverse(optarg, &invert, &optind, 0);
-               if (invert)
-                       exit_error(PARAMETER_PROBLEM,
-                                  " '!' not allowed with `--rt-0-addrs'");
-               rtinfo->addrnr = parse_addresses(argv[optind-1], rtinfo->addrs);
-               rtinfo->flags |= IP6T_RT_FST;
-               *flags |= IP6T_RT_FST;
-               break;
-       case '6':
-               if (*flags & IP6T_RT_FST_NSTRICT)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--rt-0-not-strict' allowed");
-               if ( !(*flags & IP6T_RT_FST) )
-                       exit_error(PARAMETER_PROBLEM,
-                                  "`--rt-0-addr ...' required before `--rt-0-not-strict'");
-               rtinfo->flags |= IP6T_RT_FST_NSTRICT;
-               *flags |= IP6T_RT_FST_NSTRICT;
-               break;
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static void
-print_nums(const char *name, u_int32_t min, u_int32_t max,
-           int invert)
-{
-       const char *inv = invert ? "!" : "";
-
-       if (min != 0 || max != 0xFFFFFFFF || invert) {
-               printf("%s", name);
-               if (min == max) {
-                       printf(":%s", inv);
-                       printf("%u", min);
-               } else {
-                       printf("s:%s", inv);
-                       printf("%u",min);
-                       printf(":");
-                       printf("%u",max);
-               }
-               printf(" ");
-       }
-}
-
-static void
-print_addresses(unsigned int addrnr, struct in6_addr *addrp)
-{
-       unsigned int i;
-
-       for(i=0; i<addrnr; i++){
-               printf("%s%c", addr_to_numeric(&(addrp[i])), (i!=addrnr-1)?',':' ');
-       }
-}
-
-/* Prints out the union ip6t_matchinfo. */
-static void rt_print(const void *ip, const struct xt_entry_match *match,
-                     int numeric)
-{
-       const struct ip6t_rt *rtinfo = (struct ip6t_rt *)match->data;
-
-       printf("rt ");
-       if (rtinfo->flags & IP6T_RT_TYP)
-           printf("type:%s%d ", rtinfo->invflags & IP6T_RT_INV_TYP ? "!" : "",
-                   rtinfo->rt_type);
-       print_nums("segsleft", rtinfo->segsleft[0], rtinfo->segsleft[1],
-                   rtinfo->invflags & IP6T_RT_INV_SGS);
-       if (rtinfo->flags & IP6T_RT_LEN) {
-               printf("length");
-               printf(":%s", rtinfo->invflags & IP6T_RT_INV_LEN ? "!" : "");
-               printf("%u", rtinfo->hdrlen);
-               printf(" ");
-       }
-       if (rtinfo->flags & IP6T_RT_RES) printf("reserved ");
-       if (rtinfo->flags & IP6T_RT_FST) printf("0-addrs ");
-       print_addresses(rtinfo->addrnr, (struct in6_addr *)rtinfo->addrs);
-       if (rtinfo->flags & IP6T_RT_FST_NSTRICT) printf("0-not-strict ");
-       if (rtinfo->invflags & ~IP6T_RT_INV_MASK)
-               printf("Unknown invflags: 0x%X ",
-                      rtinfo->invflags & ~IP6T_RT_INV_MASK);
-}
-
-/* Saves the union ip6t_matchinfo in parsable form to stdout. */
-static void rt_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct ip6t_rt *rtinfo = (struct ip6t_rt *)match->data;
-
-       if (rtinfo->flags & IP6T_RT_TYP) {
-               printf("--rt-type %s%u ", 
-                       (rtinfo->invflags & IP6T_RT_INV_TYP) ? "! " : "", 
-                       rtinfo->rt_type);
-       }
-
-       if (!(rtinfo->segsleft[0] == 0
-           && rtinfo->segsleft[1] == 0xFFFFFFFF)) {
-               printf("--rt-segsleft %s", 
-                       (rtinfo->invflags & IP6T_RT_INV_SGS) ? "! " : "");
-               if (rtinfo->segsleft[0]
-                   != rtinfo->segsleft[1])
-                       printf("%u:%u ",
-                              rtinfo->segsleft[0],
-                              rtinfo->segsleft[1]);
-               else
-                       printf("%u ",
-                              rtinfo->segsleft[0]);
-       }
-
-       if (rtinfo->flags & IP6T_RT_LEN) {
-               printf("--rt-len %s%u ", 
-                       (rtinfo->invflags & IP6T_RT_INV_LEN) ? "! " : "", 
-                       rtinfo->hdrlen);
-       }
-
-       if (rtinfo->flags & IP6T_RT_RES) printf("--rt-0-res ");
-       if (rtinfo->flags & IP6T_RT_FST) printf("--rt-0-addrs ");
-       print_addresses(rtinfo->addrnr, (struct in6_addr *)rtinfo->addrs);
-       if (rtinfo->flags & IP6T_RT_FST_NSTRICT) printf("--rt-0-not-strict ");
-
-}
-
-static struct xtables_match rt_mt6_reg = {
-       .name           = "rt",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET6,
-       .size           = XT_ALIGN(sizeof(struct ip6t_rt)),
-       .userspacesize  = XT_ALIGN(sizeof(struct ip6t_rt)),
-       .help           = rt_help,
-       .init           = rt_init,
-       .parse          = rt_parse,
-       .print          = rt_print,
-       .save           = rt_save,
-       .extra_opts     = rt_opts,
-};
-
-void
-_init(void)
-{
-       xtables_register_match(&rt_mt6_reg);
-}
diff --git a/extensions/libip6t_rt.man b/extensions/libip6t_rt.man
deleted file mode 100644 (file)
index 0ccaa5f..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-Match on IPv6 routing header
-.TP
-[\fB!\fP] \fB--rt-type\fP \fItype\fP
-Match the type (numeric).
-.TP
-[\fB!\fP] \fB--rt-segsleft\fP \fInum\fP[\fB:\fP\fInum\fP]
-Match the `segments left' field (range).
-.TP
-[\fB!\fP] \fB--rt-len\fP \fIlength\fP
-Match the length of this header.
-.TP
-.BR "--rt-0-res"
-Match the reserved field, too (type=0)
-.TP
-\fB--rt-0-addrs\fP \fIaddr\fP[\fB,\fP\fIaddr\fP...]
-Match type=0 addresses (list).
-.TP
-.BR "--rt-0-not-strict"
-List of type=0 addresses is not a strict list.
diff --git a/extensions/libipt_CLUSTERIP.c b/extensions/libipt_CLUSTERIP.c
deleted file mode 100644 (file)
index a0f3406..0000000
+++ /dev/null
@@ -1,253 +0,0 @@
-/* Shared library add-on to iptables to add CLUSTERIP target support. 
- * (C) 2003 by Harald Welte <laforge@gnumonks.org>
- *
- * Development of this code was funded by SuSE AG, http://www.suse.com/
- */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <stddef.h>
-
-#if defined(__GLIBC__) && __GLIBC__ == 2
-#include <net/ethernet.h>
-#else
-#include <linux/if_ether.h>
-#endif
-
-#include <iptables.h>
-#include <linux/netfilter_ipv4/ip_tables.h>
-#include "../include/linux/netfilter_ipv4/ipt_CLUSTERIP.h"
-
-static void CLUSTERIP_help(void)
-{
-       printf(
-"CLUSTERIP target options:\n"
-"  --new                        Create a new ClusterIP\n"
-"  --hashmode <mode>            Specify hashing mode\n"
-"                                      sourceip\n"
-"                                      sourceip-sourceport\n"
-"                                      sourceip-sourceport-destport\n"
-"  --clustermac <mac>           Set clusterIP MAC address\n"
-"  --total-nodes <num>          Set number of total nodes in cluster\n"
-"  --local-node <num>           Set the local node number\n"
-"  --hash-init <num>            Set init value of the Jenkins hash\n");
-}
-
-#define        PARAM_NEW       0x0001
-#define PARAM_HMODE    0x0002
-#define PARAM_MAC      0x0004
-#define PARAM_TOTALNODE        0x0008
-#define PARAM_LOCALNODE        0x0010
-#define PARAM_HASHINIT 0x0020
-
-static const struct option CLUSTERIP_opts[] = {
-       { "new", 0, NULL, '1' },
-       { "hashmode", 1, NULL, '2' },
-       { "clustermac", 1, NULL, '3' },
-       { "total-nodes", 1, NULL, '4' },
-       { "local-node", 1, NULL, '5' },
-       { "hash-init", 1, NULL, '6' },
-       { .name = NULL }
-};
-
-static void
-parse_mac(const char *mac, char *macbuf)
-{
-       unsigned int i = 0;
-
-       if (strlen(mac) != ETH_ALEN*3-1)
-               exit_error(PARAMETER_PROBLEM, "Bad mac address `%s'", mac);
-
-       for (i = 0; i < ETH_ALEN; i++) {
-               long number;
-               char *end;
-
-               number = strtol(mac + i*3, &end, 16);
-
-               if (end == mac + i*3 + 2
-                   && number >= 0
-                   && number <= 255)
-                       macbuf[i] = number;
-               else
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Bad mac address `%s'", mac);
-       }
-}
-
-static int CLUSTERIP_parse(int c, char **argv, int invert, unsigned int *flags,
-                           const void *entry, struct xt_entry_target **target)
-{
-       struct ipt_clusterip_tgt_info *cipinfo
-               = (struct ipt_clusterip_tgt_info *)(*target)->data;
-
-       switch (c) {
-               unsigned int num;
-       case '1':
-               cipinfo->flags |= CLUSTERIP_FLAG_NEW;
-               if (*flags & PARAM_NEW)
-                       exit_error(PARAMETER_PROBLEM, "Can only specify `--new' once\n");
-               *flags |= PARAM_NEW;
-               break;
-       case '2':
-               if (!(*flags & PARAM_NEW))
-                       exit_error(PARAMETER_PROBLEM, "Can only specify hashmode combined with `--new'\n");
-               if (*flags & PARAM_HMODE)
-                       exit_error(PARAMETER_PROBLEM, "Can only specify hashmode once\n");
-               if (!strcmp(optarg, "sourceip"))
-                       cipinfo->hash_mode = CLUSTERIP_HASHMODE_SIP;
-               else if (!strcmp(optarg, "sourceip-sourceport"))
-                       cipinfo->hash_mode = CLUSTERIP_HASHMODE_SIP_SPT;
-               else if (!strcmp(optarg, "sourceip-sourceport-destport"))
-                       cipinfo->hash_mode = CLUSTERIP_HASHMODE_SIP_SPT_DPT;
-               else
-                       exit_error(PARAMETER_PROBLEM, "Unknown hashmode `%s'\n",
-                                  optarg);
-               *flags |= PARAM_HMODE;
-               break;
-       case '3':
-               if (!(*flags & PARAM_NEW))
-                       exit_error(PARAMETER_PROBLEM, "Can only specify MAC combined with `--new'\n");
-               if (*flags & PARAM_MAC)
-                       exit_error(PARAMETER_PROBLEM, "Can only specify MAC once\n");
-               parse_mac(optarg, (char *)cipinfo->clustermac);
-               if (!(cipinfo->clustermac[0] & 0x01))
-                       exit_error(PARAMETER_PROBLEM, "MAC has to be a multicast ethernet address\n");
-               *flags |= PARAM_MAC;
-               break;
-       case '4':
-               if (!(*flags & PARAM_NEW))
-                       exit_error(PARAMETER_PROBLEM, "Can only specify node number combined with `--new'\n");
-               if (*flags & PARAM_TOTALNODE)
-                       exit_error(PARAMETER_PROBLEM, "Can only specify total node number once\n");
-               if (string_to_number(optarg, 1, CLUSTERIP_MAX_NODES, &num) < 0)
-                       exit_error(PARAMETER_PROBLEM, "Unable to parse `%s'\n", optarg);
-               cipinfo->num_total_nodes = (u_int16_t)num;
-               *flags |= PARAM_TOTALNODE;
-               break;
-       case '5':
-               if (!(*flags & PARAM_NEW))
-                       exit_error(PARAMETER_PROBLEM, "Can only specify node number combined with `--new'\n");
-               if (*flags & PARAM_LOCALNODE)
-                       exit_error(PARAMETER_PROBLEM, "Can only specify local node number once\n");
-               if (string_to_number(optarg, 1, CLUSTERIP_MAX_NODES, &num) < 0)
-                       exit_error(PARAMETER_PROBLEM, "Unable to parse `%s'\n", optarg);
-               cipinfo->num_local_nodes = 1;
-               cipinfo->local_nodes[0] = (u_int16_t)num;
-               *flags |= PARAM_LOCALNODE;
-               break;
-       case '6':
-               if (!(*flags & PARAM_NEW))
-                       exit_error(PARAMETER_PROBLEM, "Can only specify hash init value combined with `--new'\n");
-               if (*flags & PARAM_HASHINIT)
-                       exit_error(PARAMETER_PROBLEM, "Can specify hash init value only once\n");
-               if (string_to_number(optarg, 0, UINT_MAX, &num) < 0)
-                       exit_error(PARAMETER_PROBLEM, "Unable to parse `%s'\n", optarg);
-               cipinfo->hash_initval = num;
-               *flags |= PARAM_HASHINIT;
-               break;
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static void CLUSTERIP_check(unsigned int flags)
-{
-       if (flags == 0)
-               return;
-
-       if ((flags & (PARAM_NEW|PARAM_HMODE|PARAM_MAC|PARAM_TOTALNODE|PARAM_LOCALNODE))
-               == (PARAM_NEW|PARAM_HMODE|PARAM_MAC|PARAM_TOTALNODE|PARAM_LOCALNODE))
-               return;
-
-       exit_error(PARAMETER_PROBLEM, "CLUSTERIP target: Invalid parameter combination\n");
-}
-
-static char *hashmode2str(enum clusterip_hashmode mode)
-{
-       char *retstr;
-       switch (mode) {
-               case CLUSTERIP_HASHMODE_SIP:
-                       retstr = "sourceip";
-                       break;
-               case CLUSTERIP_HASHMODE_SIP_SPT:
-                       retstr = "sourceip-sourceport";
-                       break;
-               case CLUSTERIP_HASHMODE_SIP_SPT_DPT:
-                       retstr = "sourceip-sourceport-destport";
-                       break;
-               default:
-                       retstr = "unknown-error";
-                       break;
-       }
-       return retstr;
-}
-
-static char *mac2str(const u_int8_t mac[ETH_ALEN])
-{
-       static char buf[ETH_ALEN*3];
-       sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X",
-               mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
-       return buf;
-}
-                       
-
-/* Prints out the targinfo. */
-static void CLUSTERIP_print(const void *ip,
-                            const struct xt_entry_target *target, int numeric)
-{
-       const struct ipt_clusterip_tgt_info *cipinfo =
-               (const struct ipt_clusterip_tgt_info *)target->data;
-       
-       if (!cipinfo->flags & CLUSTERIP_FLAG_NEW) {
-               printf("CLUSTERIP");
-               return;
-       }
-
-       printf("CLUSTERIP hashmode=%s clustermac=%s total_nodes=%u local_node=%u hash_init=%u", 
-               hashmode2str(cipinfo->hash_mode),
-               mac2str(cipinfo->clustermac),
-               cipinfo->num_total_nodes,
-               cipinfo->local_nodes[0],
-               cipinfo->hash_initval);
-}
-
-/* Saves the union ipt_targinfo in parsable form to stdout. */
-static void CLUSTERIP_save(const void *ip, const struct xt_entry_target *target)
-{
-       const struct ipt_clusterip_tgt_info *cipinfo =
-               (const struct ipt_clusterip_tgt_info *)target->data;
-
-       /* if this is not a new entry, we don't need to save target
-        * parameters */
-       if (!cipinfo->flags & CLUSTERIP_FLAG_NEW)
-               return;
-
-       printf("--new --hashmode %s --clustermac %s --total-nodes %d --local-node %d --hash-init %u",
-              hashmode2str(cipinfo->hash_mode),
-              mac2str(cipinfo->clustermac),
-              cipinfo->num_total_nodes,
-              cipinfo->local_nodes[0],
-              cipinfo->hash_initval);
-}
-
-static struct xtables_target clusterip_tg_reg = {
-       .name           = "CLUSTERIP",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET,
-       .size           = XT_ALIGN(sizeof(struct ipt_clusterip_tgt_info)),
-       .userspacesize  = offsetof(struct ipt_clusterip_tgt_info, config),
-       .help           = CLUSTERIP_help,
-       .parse          = CLUSTERIP_parse,
-       .final_check    = CLUSTERIP_check,
-       .print          = CLUSTERIP_print,
-       .save           = CLUSTERIP_save,
-       .extra_opts     = CLUSTERIP_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&clusterip_tg_reg);
-}
diff --git a/extensions/libipt_CLUSTERIP.man b/extensions/libipt_CLUSTERIP.man
deleted file mode 100644 (file)
index 8e766f3..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-This module allows you to configure a simple cluster of nodes that share
-a certain IP and MAC address without an explicit load balancer in front of
-them.  Connections are statically distributed between the nodes in this
-cluster.
-.TP
-.BI "--new "
-Create a new ClusterIP.  You always have to set this on the first rule
-for a given ClusterIP.
-.TP
-.BI "--hashmode " "mode"
-Specify the hashing mode.  Has to be one of
-.B sourceip, sourceip-sourceport, sourceip-sourceport-destport
-.TP
-.BI "--clustermac " "mac"
-Specify the ClusterIP MAC address.  Has to be a link-layer multicast address
-.TP
-.BI "--total-nodes " "num"
-Number of total nodes within this cluster.
-.TP
-.BI "--local-node " "num"
-Local node number within this cluster.
-.TP
-.BI "--hash-init " "rnd"
-Specify the random seed used for hash initialization.
diff --git a/extensions/libipt_DNAT.c b/extensions/libipt_DNAT.c
deleted file mode 100644 (file)
index fed7611..0000000
+++ /dev/null
@@ -1,261 +0,0 @@
-/* Shared library add-on to iptables to add destination-NAT support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <iptables.h>
-#include <linux/netfilter_ipv4/ip_tables.h>
-#include <linux/netfilter/nf_nat.h>
-
-#define IPT_DNAT_OPT_DEST 0x1
-#define IPT_DNAT_OPT_RANDOM 0x2
-
-/* Dest NAT data consists of a multi-range, indicating where to map
-   to. */
-struct ipt_natinfo
-{
-       struct xt_entry_target t;
-       struct ip_nat_multi_range mr;
-};
-
-/* Function which prints out usage message. */
-static void DNAT_help(void)
-{
-       printf(
-"DNAT target options:\n"
-" --to-destination <ipaddr>[-<ipaddr>][:port-port]\n"
-"                              Address to map destination to.\n"
-"[--random]\n");
-}
-
-static const struct option DNAT_opts[] = {
-       { "to-destination", 1, NULL, '1' },
-       { "random", 0, NULL, '2' },
-       { .name = NULL }
-};
-
-static struct ipt_natinfo *
-append_range(struct ipt_natinfo *info, const struct ip_nat_range *range)
-{
-       unsigned int size;
-
-       /* One rangesize already in struct ipt_natinfo */
-       size = XT_ALIGN(sizeof(*info) + info->mr.rangesize * sizeof(*range));
-
-       info = realloc(info, size);
-       if (!info)
-               exit_error(OTHER_PROBLEM, "Out of memory\n");
-
-       info->t.u.target_size = size;
-       info->mr.range[info->mr.rangesize] = *range;
-       info->mr.rangesize++;
-
-       return info;
-}
-
-/* Ranges expected in network order. */
-static struct xt_entry_target *
-parse_to(char *arg, int portok, struct ipt_natinfo *info)
-{
-       struct ip_nat_range range;
-       char *colon, *dash, *error;
-       const struct in_addr *ip;
-
-       memset(&range, 0, sizeof(range));
-       colon = strchr(arg, ':');
-
-       if (colon) {
-               int port;
-
-               if (!portok)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Need TCP or UDP with port specification");
-
-               range.flags |= IP_NAT_RANGE_PROTO_SPECIFIED;
-
-               port = atoi(colon+1);
-               if (port <= 0 || port > 65535)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Port `%s' not valid\n", colon+1);
-
-               error = strchr(colon+1, ':');
-               if (error)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Invalid port:port syntax - use dash\n");
-
-               dash = strchr(colon, '-');
-               if (!dash) {
-                       range.min.tcp.port
-                               = range.max.tcp.port
-                               = htons(port);
-               } else {
-                       int maxport;
-
-                       maxport = atoi(dash + 1);
-                       if (maxport <= 0 || maxport > 65535)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "Port `%s' not valid\n", dash+1);
-                       if (maxport < port)
-                               /* People are stupid. */
-                               exit_error(PARAMETER_PROBLEM,
-                                          "Port range `%s' funky\n", colon+1);
-                       range.min.tcp.port = htons(port);
-                       range.max.tcp.port = htons(maxport);
-               }
-               /* Starts with a colon? No IP info...*/
-               if (colon == arg)
-                       return &(append_range(info, &range)->t);
-               *colon = '\0';
-       }
-
-       range.flags |= IP_NAT_RANGE_MAP_IPS;
-       dash = strchr(arg, '-');
-       if (colon && dash && dash > colon)
-               dash = NULL;
-
-       if (dash)
-               *dash = '\0';
-
-       ip = numeric_to_ipaddr(arg);
-       if (!ip)
-               exit_error(PARAMETER_PROBLEM, "Bad IP address `%s'\n",
-                          arg);
-       range.min_ip = ip->s_addr;
-       if (dash) {
-               ip = numeric_to_ipaddr(dash+1);
-               if (!ip)
-                       exit_error(PARAMETER_PROBLEM, "Bad IP address `%s'\n",
-                                  dash+1);
-               range.max_ip = ip->s_addr;
-       } else
-               range.max_ip = range.min_ip;
-
-       return &(append_range(info, &range)->t);
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int DNAT_parse(int c, char **argv, int invert, unsigned int *flags,
-                      const void *e, struct xt_entry_target **target)
-{
-       const struct ipt_entry *entry = e;
-       struct ipt_natinfo *info = (void *)*target;
-       int portok;
-
-       if (entry->ip.proto == IPPROTO_TCP
-           || entry->ip.proto == IPPROTO_UDP
-           || entry->ip.proto == IPPROTO_ICMP)
-               portok = 1;
-       else
-               portok = 0;
-
-       switch (c) {
-       case '1':
-               if (check_inverse(optarg, &invert, NULL, 0))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Unexpected `!' after --to-destination");
-
-               if (*flags) {
-                       if (!kernel_version)
-                               get_kernel_version();
-                       if (kernel_version > LINUX_VERSION(2, 6, 10))
-                               exit_error(PARAMETER_PROBLEM,
-                                          "Multiple --to-destination not supported");
-               }
-               *target = parse_to(optarg, portok, info);
-               /* WTF do we need this for?? */
-               if (*flags & IPT_DNAT_OPT_RANDOM)
-                       info->mr.range[0].flags |= IP_NAT_RANGE_PROTO_RANDOM;
-               *flags |= IPT_DNAT_OPT_DEST;
-               return 1;
-
-       case '2':
-               if (*flags & IPT_DNAT_OPT_DEST) {
-                       info->mr.range[0].flags |= IP_NAT_RANGE_PROTO_RANDOM;
-                       *flags |= IPT_DNAT_OPT_RANDOM;
-               } else
-                       *flags |= IPT_DNAT_OPT_RANDOM;
-               return 1;
-       default:
-               return 0;
-       }
-}
-
-/* Final check; must have specfied --to-source. */
-static void DNAT_check(unsigned int flags)
-{
-       if (!flags)
-               exit_error(PARAMETER_PROBLEM,
-                          "You must specify --to-destination");
-}
-
-static void print_range(const struct ip_nat_range *r)
-{
-       if (r->flags & IP_NAT_RANGE_MAP_IPS) {
-               struct in_addr a;
-
-               a.s_addr = r->min_ip;
-               printf("%s", ipaddr_to_numeric(&a));
-               if (r->max_ip != r->min_ip) {
-                       a.s_addr = r->max_ip;
-                       printf("-%s", ipaddr_to_numeric(&a));
-               }
-       }
-       if (r->flags & IP_NAT_RANGE_PROTO_SPECIFIED) {
-               printf(":");
-               printf("%hu", ntohs(r->min.tcp.port));
-               if (r->max.tcp.port != r->min.tcp.port)
-                       printf("-%hu", ntohs(r->max.tcp.port));
-       }
-}
-
-/* Prints out the targinfo. */
-static void DNAT_print(const void *ip, const struct xt_entry_target *target,
-                       int numeric)
-{
-       struct ipt_natinfo *info = (void *)target;
-       unsigned int i = 0;
-
-       printf("to:");
-       for (i = 0; i < info->mr.rangesize; i++) {
-               print_range(&info->mr.range[i]);
-               printf(" ");
-               if (info->mr.range[i].flags & IP_NAT_RANGE_PROTO_RANDOM)
-                       printf("random ");
-       }
-}
-
-/* Saves the union ipt_targinfo in parsable form to stdout. */
-static void DNAT_save(const void *ip, const struct xt_entry_target *target)
-{
-       struct ipt_natinfo *info = (void *)target;
-       unsigned int i = 0;
-
-       for (i = 0; i < info->mr.rangesize; i++) {
-               printf("--to-destination ");
-               print_range(&info->mr.range[i]);
-               printf(" ");
-               if (info->mr.range[i].flags & IP_NAT_RANGE_PROTO_RANDOM)
-                       printf("--random ");
-       }
-}
-
-static struct xtables_target dnat_tg_reg = {
-       .name           = "DNAT",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET,
-       .size           = XT_ALIGN(sizeof(struct ip_nat_multi_range)),
-       .userspacesize  = XT_ALIGN(sizeof(struct ip_nat_multi_range)),
-       .help           = DNAT_help,
-       .parse          = DNAT_parse,
-       .final_check    = DNAT_check,
-       .print          = DNAT_print,
-       .save           = DNAT_save,
-       .extra_opts     = DNAT_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&dnat_tg_reg);
-}
diff --git a/extensions/libipt_DNAT.man b/extensions/libipt_DNAT.man
deleted file mode 100644 (file)
index 65c152c..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-This target is only valid in the
-.B nat
-table, in the
-.B PREROUTING
-and
-.B OUTPUT
-chains, and user-defined chains which are only called from those
-chains.  It specifies that the destination address of the packet
-should be modified (and all future packets in this connection will
-also be mangled), and rules should cease being examined.  It takes one
-type of option:
-.TP
-\fB--to-destination\fP [\fIipaddr\fP][\fB-\fP\fIipaddr\fP][\fB:\fP\fIport\fP[\fB-\fP\fIport\fP]]
-which can specify a single new destination IP address, an inclusive
-range of IP addresses, and optionally, a port range (which is only
-valid if the rule also specifies
-.B "-p tcp"
-or
-.BR "-p udp" ).
-If no port range is specified, then the destination port will never be
-modified. If no IP address is specified then only the destination port
-will be modified.
-
-In Kernels up to 2.6.10 you can add several --to-destination options.  For
-those kernels, if you specify more than one destination address, either via an
-address range or multiple --to-destination options, a simple round-robin (one
-after another in cycle) load balancing takes place between these addresses.
-Later Kernels (>= 2.6.11-rc1) don't have the ability to NAT to multiple ranges
-anymore.
-.TP
-.BR "--random"
-If option
-.B "--random"
-is used then port mapping will be randomized (kernel >= 2.6.22).
-.RS
-.PP
diff --git a/extensions/libipt_ECN.c b/extensions/libipt_ECN.c
deleted file mode 100644 (file)
index 9526c37..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-/* Shared library add-on to iptables for ECN, $Version$
- *
- * (C) 2002 by Harald Welte <laforge@gnumonks.org>
- *
- * This program is distributed under the terms of GNU GPL v2, 1991
- *
- * libipt_ECN.c borrowed heavily from libipt_DSCP.c
- *
- * $Id$
- */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-
-#include <iptables.h>
-#include <linux/netfilter_ipv4/ip_tables.h>
-#include <linux/netfilter_ipv4/ipt_ECN.h>
-
-static void ECN_help(void)
-{
-       printf(
-"ECN target options\n"
-"  --ecn-tcp-remove            Remove all ECN bits from TCP header\n");
-}
-
-#if 0
-"ECN target v%s EXPERIMENTAL options (use with extreme care!)\n"
-"  --ecn-ip-ect                        Set the IPv4 ECT codepoint (0 to 3)\n"
-"  --ecn-tcp-cwr               Set the IPv4 CWR bit (0 or 1)\n"
-"  --ecn-tcp-ece               Set the IPv4 ECE bit (0 or 1)\n",
-#endif
-
-
-static const struct option ECN_opts[] = {
-       { "ecn-tcp-remove", 0, NULL, 'F' },
-       { "ecn-tcp-cwr", 1, NULL, 'G' },
-       { "ecn-tcp-ece", 1, NULL, 'H' },
-       { "ecn-ip-ect", 1, NULL, '9' },
-       { .name = NULL }
-};
-
-static int ECN_parse(int c, char **argv, int invert, unsigned int *flags,
-                     const void *entry, struct xt_entry_target **target)
-{
-       unsigned int result;
-       struct ipt_ECN_info *einfo
-               = (struct ipt_ECN_info *)(*target)->data;
-
-       switch (c) {
-       case 'F':
-               if (*flags)
-                       exit_error(PARAMETER_PROBLEM,
-                               "ECN target: Only use --ecn-tcp-remove ONCE!");
-               einfo->operation = IPT_ECN_OP_SET_ECE | IPT_ECN_OP_SET_CWR;
-               einfo->proto.tcp.ece = 0;
-               einfo->proto.tcp.cwr = 0;
-               *flags = 1;
-               break;
-       case 'G':
-               if (*flags & IPT_ECN_OP_SET_CWR)
-                       exit_error(PARAMETER_PROBLEM,
-                               "ECN target: Only use --ecn-tcp-cwr ONCE!");
-               if (string_to_number(optarg, 0, 1, &result))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "ECN target: Value out of range");
-               einfo->operation |= IPT_ECN_OP_SET_CWR;
-               einfo->proto.tcp.cwr = result;
-               *flags |= IPT_ECN_OP_SET_CWR;
-               break;
-       case 'H':
-               if (*flags & IPT_ECN_OP_SET_ECE)
-                       exit_error(PARAMETER_PROBLEM,
-                               "ECN target: Only use --ecn-tcp-ece ONCE!");
-               if (string_to_number(optarg, 0, 1, &result))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "ECN target: Value out of range");
-               einfo->operation |= IPT_ECN_OP_SET_ECE;
-               einfo->proto.tcp.ece = result;
-               *flags |= IPT_ECN_OP_SET_ECE;
-               break;
-       case '9':
-               if (*flags & IPT_ECN_OP_SET_IP)
-                       exit_error(PARAMETER_PROBLEM,
-                               "ECN target: Only use --ecn-ip-ect ONCE!");
-               if (string_to_number(optarg, 0, 3, &result))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "ECN target: Value out of range");
-               einfo->operation |= IPT_ECN_OP_SET_IP;
-               einfo->ip_ect = result;
-               *flags |= IPT_ECN_OP_SET_IP;
-               break;
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static void ECN_check(unsigned int flags)
-{
-       if (!flags)
-               exit_error(PARAMETER_PROBLEM,
-                          "ECN target: Parameter --ecn-tcp-remove is required");
-}
-
-/* Prints out the targinfo. */
-static void ECN_print(const void *ip, const struct xt_entry_target *target,
-                      int numeric)
-{
-       const struct ipt_ECN_info *einfo =
-               (const struct ipt_ECN_info *)target->data;
-
-       printf("ECN ");
-
-       if (einfo->operation == (IPT_ECN_OP_SET_ECE|IPT_ECN_OP_SET_CWR)
-           && einfo->proto.tcp.ece == 0
-           && einfo->proto.tcp.cwr == 0)
-               printf("TCP remove ");
-       else {
-               if (einfo->operation & IPT_ECN_OP_SET_ECE)
-                       printf("ECE=%u ", einfo->proto.tcp.ece);
-
-               if (einfo->operation & IPT_ECN_OP_SET_CWR)
-                       printf("CWR=%u ", einfo->proto.tcp.cwr);
-
-               if (einfo->operation & IPT_ECN_OP_SET_IP)
-                       printf("ECT codepoint=%u ", einfo->ip_ect);
-       }
-}
-
-/* Saves the union ipt_targinfo in parsable form to stdout. */
-static void ECN_save(const void *ip, const struct xt_entry_target *target)
-{
-       const struct ipt_ECN_info *einfo =
-               (const struct ipt_ECN_info *)target->data;
-
-       if (einfo->operation == (IPT_ECN_OP_SET_ECE|IPT_ECN_OP_SET_CWR)
-           && einfo->proto.tcp.ece == 0
-           && einfo->proto.tcp.cwr == 0)
-               printf("--ecn-tcp-remove ");
-       else {
-
-               if (einfo->operation & IPT_ECN_OP_SET_ECE)
-                       printf("--ecn-tcp-ece %d ", einfo->proto.tcp.ece);
-
-               if (einfo->operation & IPT_ECN_OP_SET_CWR)
-                       printf("--ecn-tcp-cwr %d ", einfo->proto.tcp.cwr);
-
-               if (einfo->operation & IPT_ECN_OP_SET_IP)
-                       printf("--ecn-ip-ect %d ", einfo->ip_ect);
-       }
-}
-
-static struct xtables_target ecn_tg_reg = {
-       .name           = "ECN",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET,
-       .size           = XT_ALIGN(sizeof(struct ipt_ECN_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct ipt_ECN_info)),
-       .help           = ECN_help,
-       .parse          = ECN_parse,
-       .final_check    = ECN_check,
-       .print          = ECN_print,
-       .save           = ECN_save,
-       .extra_opts     = ECN_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&ecn_tg_reg);
-}
diff --git a/extensions/libipt_ECN.man b/extensions/libipt_ECN.man
deleted file mode 100644 (file)
index 3668490..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-This target allows to selectively work around known ECN blackholes.
-It can only be used in the mangle table.
-.TP
-.BI "--ecn-tcp-remove"
-Remove all ECN bits from the TCP header.  Of course, it can only be used
-in conjunction with
-.BR "-p tcp" .
diff --git a/extensions/libipt_LOG.c b/extensions/libipt_LOG.c
deleted file mode 100644 (file)
index 50b1130..0000000
+++ /dev/null
@@ -1,277 +0,0 @@
-/* Shared library add-on to iptables to add LOG support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <syslog.h>
-#include <getopt.h>
-#include <iptables.h>
-#include <linux/netfilter_ipv4/ip_tables.h>
-#include <linux/netfilter_ipv4/ipt_LOG.h>
-
-#define LOG_DEFAULT_LEVEL LOG_WARNING
-
-#ifndef IPT_LOG_UID /* Old kernel */
-#define IPT_LOG_UID    0x08    /* Log UID owning local socket */
-#undef  IPT_LOG_MASK
-#define IPT_LOG_MASK   0x0f
-#endif
-
-/* Function which prints out usage message. */
-static void LOG_help(void)
-{
-       printf(
-"LOG target options:\n"
-" --log-level level            Level of logging (numeric or see syslog.conf)\n"
-" --log-prefix prefix          Prefix log messages with this prefix.\n\n"
-" --log-tcp-sequence           Log TCP sequence numbers.\n\n"
-" --log-tcp-options            Log TCP options.\n\n"
-" --log-ip-options             Log IP options.\n\n"
-" --log-uid                    Log UID owning the local socket.\n\n");
-}
-
-static const struct option LOG_opts[] = {
-       { .name = "log-level",        .has_arg = 1, .val = '!' },
-       { .name = "log-prefix",       .has_arg = 1, .val = '#' },
-       { .name = "log-tcp-sequence", .has_arg = 0, .val = '1' },
-       { .name = "log-tcp-options",  .has_arg = 0, .val = '2' },
-       { .name = "log-ip-options",   .has_arg = 0, .val = '3' },
-       { .name = "log-uid",          .has_arg = 0, .val = '4' },
-       { .name = NULL }
-};
-
-/* Initialize the target. */
-static void LOG_init(struct xt_entry_target *t)
-{
-       struct ipt_log_info *loginfo = (struct ipt_log_info *)t->data;
-
-       loginfo->level = LOG_DEFAULT_LEVEL;
-
-}
-
-struct ipt_log_names {
-       const char *name;
-       unsigned int level;
-};
-
-static const struct ipt_log_names ipt_log_names[]
-= { { .name = "alert",   .level = LOG_ALERT },
-    { .name = "crit",    .level = LOG_CRIT },
-    { .name = "debug",   .level = LOG_DEBUG },
-    { .name = "emerg",   .level = LOG_EMERG },
-    { .name = "error",   .level = LOG_ERR },           /* DEPRECATED */
-    { .name = "info",    .level = LOG_INFO },
-    { .name = "notice",  .level = LOG_NOTICE },
-    { .name = "panic",   .level = LOG_EMERG },         /* DEPRECATED */
-    { .name = "warning", .level = LOG_WARNING }
-};
-
-static u_int8_t
-parse_level(const char *level)
-{
-       unsigned int lev = -1;
-       unsigned int set = 0;
-
-       if (string_to_number(level, 0, 7, &lev) == -1) {
-               unsigned int i = 0;
-
-               for (i = 0;
-                    i < sizeof(ipt_log_names) / sizeof(struct ipt_log_names);
-                    i++) {
-                       if (strncasecmp(level, ipt_log_names[i].name,
-                                       strlen(level)) == 0) {
-                               if (set++)
-                                       exit_error(PARAMETER_PROBLEM,
-                                                  "log-level `%s' ambiguous",
-                                                  level);
-                               lev = ipt_log_names[i].level;
-                       }
-               }
-
-               if (!set)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "log-level `%s' unknown", level);
-       }
-
-       return (u_int8_t)lev;
-}
-
-#define IPT_LOG_OPT_LEVEL 0x01
-#define IPT_LOG_OPT_PREFIX 0x02
-#define IPT_LOG_OPT_TCPSEQ 0x04
-#define IPT_LOG_OPT_TCPOPT 0x08
-#define IPT_LOG_OPT_IPOPT 0x10
-#define IPT_LOG_OPT_UID 0x20
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int LOG_parse(int c, char **argv, int invert, unsigned int *flags,
-                     const void *entry, struct xt_entry_target **target)
-{
-       struct ipt_log_info *loginfo = (struct ipt_log_info *)(*target)->data;
-
-       switch (c) {
-       case '!':
-               if (*flags & IPT_LOG_OPT_LEVEL)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can't specify --log-level twice");
-
-               if (check_inverse(optarg, &invert, NULL, 0))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Unexpected `!' after --log-level");
-
-               loginfo->level = parse_level(optarg);
-               *flags |= IPT_LOG_OPT_LEVEL;
-               break;
-
-       case '#':
-               if (*flags & IPT_LOG_OPT_PREFIX)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can't specify --log-prefix twice");
-
-               if (check_inverse(optarg, &invert, NULL, 0))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Unexpected `!' after --log-prefix");
-
-               if (strlen(optarg) > sizeof(loginfo->prefix) - 1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Maximum prefix length %u for --log-prefix",
-                                  (unsigned int)sizeof(loginfo->prefix) - 1);
-
-               if (strlen(optarg) == 0)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "No prefix specified for --log-prefix");
-
-               if (strlen(optarg) != strlen(strtok(optarg, "\n")))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Newlines not allowed in --log-prefix");
-
-               strcpy(loginfo->prefix, optarg);
-               *flags |= IPT_LOG_OPT_PREFIX;
-               break;
-
-       case '1':
-               if (*flags & IPT_LOG_OPT_TCPSEQ)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can't specify --log-tcp-sequence "
-                                  "twice");
-
-               loginfo->logflags |= IPT_LOG_TCPSEQ;
-               *flags |= IPT_LOG_OPT_TCPSEQ;
-               break;
-
-       case '2':
-               if (*flags & IPT_LOG_OPT_TCPOPT)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can't specify --log-tcp-options twice");
-
-               loginfo->logflags |= IPT_LOG_TCPOPT;
-               *flags |= IPT_LOG_OPT_TCPOPT;
-               break;
-
-       case '3':
-               if (*flags & IPT_LOG_OPT_IPOPT)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can't specify --log-ip-options twice");
-
-               loginfo->logflags |= IPT_LOG_IPOPT;
-               *flags |= IPT_LOG_OPT_IPOPT;
-               break;
-
-       case '4':
-               if (*flags & IPT_LOG_OPT_UID)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can't specify --log-uid twice");
-
-               loginfo->logflags |= IPT_LOG_UID;
-               *flags |= IPT_LOG_OPT_UID;
-               break;
-
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-/* Prints out the targinfo. */
-static void LOG_print(const void *ip, const struct xt_entry_target *target,
-                      int numeric)
-{
-       const struct ipt_log_info *loginfo
-               = (const struct ipt_log_info *)target->data;
-       unsigned int i = 0;
-
-       printf("LOG ");
-       if (numeric)
-               printf("flags %u level %u ",
-                      loginfo->logflags, loginfo->level);
-       else {
-               for (i = 0;
-                    i < sizeof(ipt_log_names) / sizeof(struct ipt_log_names);
-                    i++) {
-                       if (loginfo->level == ipt_log_names[i].level) {
-                               printf("level %s ", ipt_log_names[i].name);
-                               break;
-                       }
-               }
-               if (i == sizeof(ipt_log_names) / sizeof(struct ipt_log_names))
-                       printf("UNKNOWN level %u ", loginfo->level);
-               if (loginfo->logflags & IPT_LOG_TCPSEQ)
-                       printf("tcp-sequence ");
-               if (loginfo->logflags & IPT_LOG_TCPOPT)
-                       printf("tcp-options ");
-               if (loginfo->logflags & IPT_LOG_IPOPT)
-                       printf("ip-options ");
-               if (loginfo->logflags & IPT_LOG_UID)
-                       printf("uid ");
-               if (loginfo->logflags & ~(IPT_LOG_MASK))
-                       printf("unknown-flags ");
-       }
-
-       if (strcmp(loginfo->prefix, "") != 0)
-               printf("prefix `%s' ", loginfo->prefix);
-}
-
-/* Saves the union ipt_targinfo in parsable form to stdout. */
-static void LOG_save(const void *ip, const struct xt_entry_target *target)
-{
-       const struct ipt_log_info *loginfo
-               = (const struct ipt_log_info *)target->data;
-
-       if (strcmp(loginfo->prefix, "") != 0) {
-               printf("--log-prefix ");
-               save_string(loginfo->prefix);
-       }
-
-       if (loginfo->level != LOG_DEFAULT_LEVEL)
-               printf("--log-level %d ", loginfo->level);
-
-       if (loginfo->logflags & IPT_LOG_TCPSEQ)
-               printf("--log-tcp-sequence ");
-       if (loginfo->logflags & IPT_LOG_TCPOPT)
-               printf("--log-tcp-options ");
-       if (loginfo->logflags & IPT_LOG_IPOPT)
-               printf("--log-ip-options ");
-       if (loginfo->logflags & IPT_LOG_UID)
-               printf("--log-uid ");
-}
-
-static struct xtables_target log_tg_reg = {
-    .name          = "LOG",
-    .version       = XTABLES_VERSION,
-    .family        = PF_INET,
-    .size          = XT_ALIGN(sizeof(struct ipt_log_info)),
-    .userspacesize = XT_ALIGN(sizeof(struct ipt_log_info)),
-    .help          = LOG_help,
-    .init          = LOG_init,
-    .parse         = LOG_parse,
-    .print         = LOG_print,
-    .save          = LOG_save,
-    .extra_opts    = LOG_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&log_tg_reg);
-}
diff --git a/extensions/libipt_LOG.man b/extensions/libipt_LOG.man
deleted file mode 100644 (file)
index 597ba3f..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-Turn on kernel logging of matching packets.  When this option is set
-for a rule, the Linux kernel will print some information on all
-matching packets (like most IP header fields) via the kernel log
-(where it can be read with
-.I dmesg
-or 
-.IR syslogd (8)).
-This is a "non-terminating target", i.e. rule traversal continues at
-the next rule.  So if you want to LOG the packets you refuse, use two
-separate rules with the same matching criteria, first using target LOG
-then DROP (or REJECT).
-.TP
-.BI "--log-level " "level"
-Level of logging (numeric or see \fIsyslog.conf\fP(5)).
-.TP
-.BI "--log-prefix " "prefix"
-Prefix log messages with the specified prefix; up to 29 letters long,
-and useful for distinguishing messages in the logs.
-.TP
-.B --log-tcp-sequence
-Log TCP sequence numbers. This is a security risk if the log is
-readable by users.
-.TP
-.B --log-tcp-options
-Log options from the TCP packet header.
-.TP
-.B --log-ip-options
-Log options from the IP packet header.
-.TP
-.B --log-uid
-Log the userid of the process which generated the packet.
diff --git a/extensions/libipt_MASQUERADE.c b/extensions/libipt_MASQUERADE.c
deleted file mode 100644 (file)
index ea4f5cd..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-/* Shared library add-on to iptables to add masquerade support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <iptables.h>
-#include <linux/netfilter_ipv4/ip_tables.h>
-#include <linux/netfilter/nf_nat.h>
-
-/* Function which prints out usage message. */
-static void MASQUERADE_help(void)
-{
-       printf(
-"MASQUERADE target options:\n"
-" --to-ports <port>[-<port>]\n"
-"                              Port (range) to map to.\n"
-" --random\n"
-"                              Randomize source port.\n");
-}
-
-static const struct option MASQUERADE_opts[] = {
-       { "to-ports", 1, NULL, '1' },
-       { "random", 0, NULL, '2' },
-       { .name = NULL }
-};
-
-/* Initialize the target. */
-static void MASQUERADE_init(struct xt_entry_target *t)
-{
-       struct ip_nat_multi_range *mr = (struct ip_nat_multi_range *)t->data;
-
-       /* Actually, it's 0, but it's ignored at the moment. */
-       mr->rangesize = 1;
-
-}
-
-/* Parses ports */
-static void
-parse_ports(const char *arg, struct ip_nat_multi_range *mr)
-{
-       const char *dash;
-       int port;
-
-       mr->range[0].flags |= IP_NAT_RANGE_PROTO_SPECIFIED;
-
-       port = atoi(arg);
-       if (port <= 0 || port > 65535)
-               exit_error(PARAMETER_PROBLEM, "Port `%s' not valid\n", arg);
-
-       dash = strchr(arg, '-');
-       if (!dash) {
-               mr->range[0].min.tcp.port
-                       = mr->range[0].max.tcp.port
-                       = htons(port);
-       } else {
-               int maxport;
-
-               maxport = atoi(dash + 1);
-               if (maxport == 0 || maxport > 65535)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Port `%s' not valid\n", dash+1);
-               if (maxport < port)
-                       /* People are stupid.  Present reader excepted. */
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Port range `%s' funky\n", arg);
-               mr->range[0].min.tcp.port = htons(port);
-               mr->range[0].max.tcp.port = htons(maxport);
-       }
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int MASQUERADE_parse(int c, char **argv, int invert, unsigned int *flags,
-                            const void *e, struct xt_entry_target **target)
-{
-       const struct ipt_entry *entry = e;
-       int portok;
-       struct ip_nat_multi_range *mr
-               = (struct ip_nat_multi_range *)(*target)->data;
-
-       if (entry->ip.proto == IPPROTO_TCP
-           || entry->ip.proto == IPPROTO_UDP
-           || entry->ip.proto == IPPROTO_ICMP)
-               portok = 1;
-       else
-               portok = 0;
-
-       switch (c) {
-       case '1':
-               if (!portok)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Need TCP or UDP with port specification");
-
-               if (check_inverse(optarg, &invert, NULL, 0))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Unexpected `!' after --to-ports");
-
-               parse_ports(optarg, mr);
-               return 1;
-
-       case '2':
-               mr->range[0].flags |=  IP_NAT_RANGE_PROTO_RANDOM;
-               return 1;
-
-       default:
-               return 0;
-       }
-}
-
-/* Prints out the targinfo. */
-static void
-MASQUERADE_print(const void *ip, const struct xt_entry_target *target,
-                 int numeric)
-{
-       struct ip_nat_multi_range *mr
-               = (struct ip_nat_multi_range *)target->data;
-       struct ip_nat_range *r = &mr->range[0];
-
-       if (r->flags & IP_NAT_RANGE_PROTO_SPECIFIED) {
-               printf("masq ports: ");
-               printf("%hu", ntohs(r->min.tcp.port));
-               if (r->max.tcp.port != r->min.tcp.port)
-                       printf("-%hu", ntohs(r->max.tcp.port));
-               printf(" ");
-       }
-
-       if (r->flags & IP_NAT_RANGE_PROTO_RANDOM)
-               printf("random ");
-}
-
-/* Saves the union ipt_targinfo in parsable form to stdout. */
-static void
-MASQUERADE_save(const void *ip, const struct xt_entry_target *target)
-{
-       struct ip_nat_multi_range *mr
-               = (struct ip_nat_multi_range *)target->data;
-       struct ip_nat_range *r = &mr->range[0];
-
-       if (r->flags & IP_NAT_RANGE_PROTO_SPECIFIED) {
-               printf("--to-ports %hu", ntohs(r->min.tcp.port));
-               if (r->max.tcp.port != r->min.tcp.port)
-                       printf("-%hu", ntohs(r->max.tcp.port));
-               printf(" ");
-       }
-
-       if (r->flags & IP_NAT_RANGE_PROTO_RANDOM)
-               printf("--random ");
-}
-
-static struct xtables_target masquerade_tg_reg = {
-       .name           = "MASQUERADE",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET,
-       .size           = XT_ALIGN(sizeof(struct ip_nat_multi_range)),
-       .userspacesize  = XT_ALIGN(sizeof(struct ip_nat_multi_range)),
-       .help           = MASQUERADE_help,
-       .init           = MASQUERADE_init,
-       .parse          = MASQUERADE_parse,
-       .print          = MASQUERADE_print,
-       .save           = MASQUERADE_save,
-       .extra_opts     = MASQUERADE_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&masquerade_tg_reg);
-}
diff --git a/extensions/libipt_MASQUERADE.man b/extensions/libipt_MASQUERADE.man
deleted file mode 100644 (file)
index f11ad86..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-This target is only valid in the
-.B nat
-table, in the
-.B POSTROUTING
-chain.  It should only be used with dynamically assigned IP (dialup)
-connections: if you have a static IP address, you should use the SNAT
-target.  Masquerading is equivalent to specifying a mapping to the IP
-address of the interface the packet is going out, but also has the
-effect that connections are
-.I forgotten
-when the interface goes down.  This is the correct behavior when the
-next dialup is unlikely to have the same interface address (and hence
-any established connections are lost anyway).  It takes one option:
-.TP
-\fB--to-ports\fP \fIport\fP[\fB-\fP\fIport\fP]
-This specifies a range of source ports to use, overriding the default
-.B SNAT
-source port-selection heuristics (see above).  This is only valid
-if the rule also specifies
-.B "-p tcp"
-or
-.BR "-p udp" .
-.TP
-.BR "--random"
-Randomize source port mapping
-If option
-.B "--random"
-is used then port mapping will be randomized (kernel >= 2.6.21).
-.RS
-.PP
diff --git a/extensions/libipt_MIRROR.c b/extensions/libipt_MIRROR.c
deleted file mode 100644 (file)
index cc1c7a4..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Shared library add-on to iptables to add MIRROR target support. */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-
-#include <iptables.h>
-#include <linux/netfilter_ipv4/ip_tables.h>
-
-/* Function which prints out usage message. */
-static void MIRROR_help(void)
-{
-       printf("MIRROR target takes no options\n");
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int MIRROR_parse(int c, char **argv, int invert, unsigned int *flags,
-                        const void *entry, struct xt_entry_target **target)
-{
-       return 0;
-}
-
-static struct xtables_target mirror_tg_reg = {
-       .name           = "MIRROR",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET,
-       .size           = XT_ALIGN(0),
-       .userspacesize  = XT_ALIGN(0),
-       .help           = MIRROR_help,
-       .parse          = MIRROR_parse,
-       .print          = NULL,
-       .save           = NULL,
-};
-
-void _init(void)
-{
-       xtables_register_target(&mirror_tg_reg);
-}
diff --git a/extensions/libipt_MIRROR.man b/extensions/libipt_MIRROR.man
deleted file mode 100644 (file)
index 7b720bc..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-This is an experimental demonstration target which inverts the source
-and destination fields in the IP header and retransmits the packet.
-It is only valid in the
-.BR INPUT ,
-.B FORWARD
-and
-.B PREROUTING
-chains, and user-defined chains which are only called from those
-chains.  Note that the outgoing packets are
-.B NOT
-seen by any packet filtering chains, connection tracking or NAT, to
-avoid loops and other problems.
diff --git a/extensions/libipt_NETMAP.c b/extensions/libipt_NETMAP.c
deleted file mode 100644 (file)
index 2a78696..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-/* Shared library add-on to iptables to add static NAT support.
-   Author: Svenning Soerensen <svenning@post5.tele.dk>
-*/
-
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <iptables.h>
-#include <linux/netfilter_ipv4/ip_tables.h>
-#include <linux/netfilter/nf_nat.h>
-
-#define MODULENAME "NETMAP"
-
-static const struct option NETMAP_opts[] = {
-       { "to", 1, NULL, '1' },
-       { .name = NULL }
-};
-
-/* Function which prints out usage message. */
-static void NETMAP_help(void)
-{
-       printf(MODULENAME" target options:\n"
-              "  --%s address[/mask]\n"
-              "                                Network address to map to.\n\n",
-              NETMAP_opts[0].name);
-}
-
-static u_int32_t
-bits2netmask(int bits)
-{
-       u_int32_t netmask, bm;
-
-       if (bits >= 32 || bits < 0)
-               return(~0);
-       for (netmask = 0, bm = 0x80000000; bits; bits--, bm >>= 1)
-               netmask |= bm;
-       return htonl(netmask);
-}
-
-static int
-netmask2bits(u_int32_t netmask)
-{
-       u_int32_t bm;
-       int bits;
-
-       netmask = ntohl(netmask);
-       for (bits = 0, bm = 0x80000000; netmask & bm; netmask <<= 1)
-               bits++;
-       if (netmask)
-               return -1; /* holes in netmask */
-       return bits;
-}
-
-/* Initialize the target. */
-static void NETMAP_init(struct xt_entry_target *t)
-{
-       struct ip_nat_multi_range *mr = (struct ip_nat_multi_range *)t->data;
-
-       /* Actually, it's 0, but it's ignored at the moment. */
-       mr->rangesize = 1;
-
-}
-
-/* Parses network address */
-static void
-parse_to(char *arg, struct ip_nat_range *range)
-{
-       char *slash;
-       const struct in_addr *ip;
-       u_int32_t netmask;
-       unsigned int bits;
-
-       range->flags |= IP_NAT_RANGE_MAP_IPS;
-       slash = strchr(arg, '/');
-       if (slash)
-               *slash = '\0';
-
-       ip = numeric_to_ipaddr(arg);
-       if (!ip)
-               exit_error(PARAMETER_PROBLEM, "Bad IP address `%s'\n",
-                          arg);
-       range->min_ip = ip->s_addr;
-       if (slash) {
-               if (strchr(slash+1, '.')) {
-                       ip = numeric_to_ipmask(slash+1);
-                       if (!ip)
-                               exit_error(PARAMETER_PROBLEM, "Bad netmask `%s'\n",
-                                          slash+1);
-                       netmask = ip->s_addr;
-               }
-               else {
-                       if (string_to_number(slash+1, 0, 32, &bits) == -1)
-                               exit_error(PARAMETER_PROBLEM, "Bad netmask `%s'\n",
-                                          slash+1);
-                       netmask = bits2netmask(bits);
-               }
-               /* Don't allow /0 (/1 is probably insane, too) */
-               if (netmask == 0)
-                       exit_error(PARAMETER_PROBLEM, "Netmask needed\n");
-       }
-       else
-               netmask = ~0;
-
-       if (range->min_ip & ~netmask) {
-               if (slash)
-                       *slash = '/';
-               exit_error(PARAMETER_PROBLEM, "Bad network address `%s'\n",
-                          arg);
-       }
-       range->max_ip = range->min_ip | ~netmask;
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int NETMAP_parse(int c, char **argv, int invert, unsigned int *flags,
-                        const void *entry, struct xt_entry_target **target)
-{
-       struct ip_nat_multi_range *mr
-               = (struct ip_nat_multi_range *)(*target)->data;
-
-       switch (c) {
-       case '1':
-               if (check_inverse(optarg, &invert, NULL, 0))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Unexpected `!' after --%s", NETMAP_opts[0].name);
-
-               parse_to(optarg, &mr->range[0]);
-               *flags = 1;
-               return 1;
-
-       default:
-               return 0;
-       }
-}
-
-/* Final check; need --to */
-static void NETMAP_check(unsigned int flags)
-{
-       if (!flags)
-               exit_error(PARAMETER_PROBLEM,
-                          MODULENAME" needs --%s", NETMAP_opts[0].name);
-}
-
-/* Prints out the targinfo. */
-static void NETMAP_print(const void *ip, const struct xt_entry_target *target,
-                         int numeric)
-{
-       struct ip_nat_multi_range *mr
-               = (struct ip_nat_multi_range *)target->data;
-       struct ip_nat_range *r = &mr->range[0];
-       struct in_addr a;
-       int bits;
-
-       a.s_addr = r->min_ip;
-       printf("%s", ipaddr_to_numeric(&a));
-       a.s_addr = ~(r->min_ip ^ r->max_ip);
-       bits = netmask2bits(a.s_addr);
-       if (bits < 0)
-               printf("/%s", ipaddr_to_numeric(&a));
-       else
-               printf("/%d", bits);
-}
-
-/* Saves the targinfo in parsable form to stdout. */
-static void NETMAP_save(const void *ip, const struct xt_entry_target *target)
-{
-       printf("--%s ", NETMAP_opts[0].name);
-       NETMAP_print(ip, target, 0);
-}
-
-static struct xtables_target netmap_tg_reg = {
-       .name           = MODULENAME,
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET,
-       .size           = XT_ALIGN(sizeof(struct ip_nat_multi_range)),
-       .userspacesize  = XT_ALIGN(sizeof(struct ip_nat_multi_range)),
-       .help           = NETMAP_help,
-       .init           = NETMAP_init,
-       .parse          = NETMAP_parse,
-       .final_check    = NETMAP_check,
-       .print          = NETMAP_print,
-       .save           = NETMAP_save,
-       .extra_opts     = NETMAP_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&netmap_tg_reg);
-}
-
diff --git a/extensions/libipt_NETMAP.man b/extensions/libipt_NETMAP.man
deleted file mode 100644 (file)
index f6a933c..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-This target allows you to statically map a whole network of addresses onto
-another network of addresses.  It can only be used from rules in the
-.B nat
-table.
-.TP
-\fB--to\fP \fIaddress\fP[\fB/\fP\fImask\fP]
-Network address to map to.  The resulting address will be constructed in the
-following way: All 'one' bits in the mask are filled in from the new `address'.
-All bits that are zero in the mask are filled in from the original address.
diff --git a/extensions/libipt_REDIRECT.c b/extensions/libipt_REDIRECT.c
deleted file mode 100644 (file)
index c03562b..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-/* Shared library add-on to iptables to add redirect support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <iptables.h>
-#include <linux/netfilter_ipv4/ip_tables.h>
-#include <linux/netfilter/nf_nat.h>
-
-#define IPT_REDIRECT_OPT_DEST  0x01
-#define IPT_REDIRECT_OPT_RANDOM        0x02
-
-/* Function which prints out usage message. */
-static void REDIRECT_help(void)
-{
-       printf(
-"REDIRECT target options:\n"
-" --to-ports <port>[-<port>]\n"
-"                              Port (range) to map to.\n");
-}
-
-static const struct option REDIRECT_opts[] = {
-       { "to-ports", 1, NULL, '1' },
-       { "random", 0, NULL, '2' },
-       { .name = NULL }
-};
-
-/* Initialize the target. */
-static void REDIRECT_init(struct xt_entry_target *t)
-{
-       struct ip_nat_multi_range *mr = (struct ip_nat_multi_range *)t->data;
-
-       /* Actually, it's 0, but it's ignored at the moment. */
-       mr->rangesize = 1;
-
-}
-
-/* Parses ports */
-static void
-parse_ports(const char *arg, struct ip_nat_multi_range *mr)
-{
-       const char *dash;
-       int port;
-
-       mr->range[0].flags |= IP_NAT_RANGE_PROTO_SPECIFIED;
-
-       if (strchr(arg, '.'))
-               exit_error(PARAMETER_PROBLEM, "IP address not permitted\n");
-
-       port = atoi(arg);
-       if (port == 0)
-               port = service_to_port(arg, NULL);
-
-       if (port == 0 || port > 65535)
-               exit_error(PARAMETER_PROBLEM, "Port `%s' not valid\n", arg);
-
-       dash = strchr(arg, '-');
-       if (!dash) {
-               mr->range[0].min.tcp.port
-                       = mr->range[0].max.tcp.port
-                       = htons(port);
-       } else {
-               int maxport;
-
-               maxport = atoi(dash + 1);
-               if (maxport == 0 || maxport > 65535)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Port `%s' not valid\n", dash+1);
-               if (maxport < port)
-                       /* People are stupid. */
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Port range `%s' funky\n", arg);
-               mr->range[0].min.tcp.port = htons(port);
-               mr->range[0].max.tcp.port = htons(maxport);
-       }
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int REDIRECT_parse(int c, char **argv, int invert, unsigned int *flags,
-                          const void *e, struct xt_entry_target **target)
-{
-       const struct ipt_entry *entry = e;
-       struct ip_nat_multi_range *mr
-               = (struct ip_nat_multi_range *)(*target)->data;
-       int portok;
-
-       if (entry->ip.proto == IPPROTO_TCP
-           || entry->ip.proto == IPPROTO_UDP
-           || entry->ip.proto == IPPROTO_ICMP)
-               portok = 1;
-       else
-               portok = 0;
-
-       switch (c) {
-       case '1':
-               if (!portok)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Need TCP or UDP with port specification");
-
-               if (check_inverse(optarg, &invert, NULL, 0))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Unexpected `!' after --to-ports");
-
-               parse_ports(optarg, mr);
-               if (*flags & IPT_REDIRECT_OPT_RANDOM)
-                       mr->range[0].flags |= IP_NAT_RANGE_PROTO_RANDOM;
-               *flags |= IPT_REDIRECT_OPT_DEST;
-               return 1;
-
-       case '2':
-               if (*flags & IPT_REDIRECT_OPT_DEST) {
-                       mr->range[0].flags |= IP_NAT_RANGE_PROTO_RANDOM;
-                       *flags |= IPT_REDIRECT_OPT_RANDOM;
-               } else
-                       *flags |= IPT_REDIRECT_OPT_RANDOM;
-               return 1;
-
-       default:
-               return 0;
-       }
-}
-
-/* Prints out the targinfo. */
-static void REDIRECT_print(const void *ip, const struct xt_entry_target *target,
-                           int numeric)
-{
-       struct ip_nat_multi_range *mr
-               = (struct ip_nat_multi_range *)target->data;
-       struct ip_nat_range *r = &mr->range[0];
-
-       if (r->flags & IP_NAT_RANGE_PROTO_SPECIFIED) {
-               printf("redir ports ");
-               printf("%hu", ntohs(r->min.tcp.port));
-               if (r->max.tcp.port != r->min.tcp.port)
-                       printf("-%hu", ntohs(r->max.tcp.port));
-               printf(" ");
-               if (mr->range[0].flags & IP_NAT_RANGE_PROTO_RANDOM)
-                       printf("random ");
-       }
-}
-
-/* Saves the union ipt_targinfo in parsable form to stdout. */
-static void REDIRECT_save(const void *ip, const struct xt_entry_target *target)
-{
-       struct ip_nat_multi_range *mr
-               = (struct ip_nat_multi_range *)target->data;
-       struct ip_nat_range *r = &mr->range[0];
-
-       if (r->flags & IP_NAT_RANGE_PROTO_SPECIFIED) {
-               printf("--to-ports ");
-               printf("%hu", ntohs(r->min.tcp.port));
-               if (r->max.tcp.port != r->min.tcp.port)
-                       printf("-%hu", ntohs(r->max.tcp.port));
-               printf(" ");
-               if (mr->range[0].flags & IP_NAT_RANGE_PROTO_RANDOM)
-                       printf("--random ");
-       }
-}
-
-static struct xtables_target redirect_tg_reg = {
-       .name           = "REDIRECT",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET,
-       .size           = XT_ALIGN(sizeof(struct ip_nat_multi_range)),
-       .userspacesize  = XT_ALIGN(sizeof(struct ip_nat_multi_range)),
-       .help           = REDIRECT_help,
-       .init           = REDIRECT_init,
-       .parse          = REDIRECT_parse,
-       .print          = REDIRECT_print,
-       .save           = REDIRECT_save,
-       .extra_opts     = REDIRECT_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&redirect_tg_reg);
-}
diff --git a/extensions/libipt_REDIRECT.man b/extensions/libipt_REDIRECT.man
deleted file mode 100644 (file)
index 0217045..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-This target is only valid in the
-.B nat
-table, in the
-.B PREROUTING
-and
-.B OUTPUT
-chains, and user-defined chains which are only called from those
-chains.  It redirects the packet to the machine itself by changing the
-destination IP to the primary address of the incoming interface
-(locally-generated packets are mapped to the 127.0.0.1 address).
-.TP
-\fB--to-ports\fP \fIport\fP[\fB-\fP\fIport\fP]
-This specifies a destination port or range of ports to use: without
-this, the destination port is never altered.  This is only valid
-if the rule also specifies
-.B "-p tcp"
-or
-.BR "-p udp" .
-.TP
-.BR "--random"
-If option
-.B "--random"
-is used then port mapping will be randomized (kernel >= 2.6.22).
-.RS
-.PP
diff --git a/extensions/libipt_REJECT.c b/extensions/libipt_REJECT.c
deleted file mode 100644 (file)
index fd272c4..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-/* Shared library add-on to iptables to add customized REJECT support.
- *
- * (C) 2000 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
- */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <iptables.h>
-#include <linux/netfilter_ipv4/ip_tables.h>
-#include <linux/netfilter_ipv4/ipt_REJECT.h>
-#include <linux/version.h>
-
-/* If we are compiling against a kernel that does not support
- * IPT_ICMP_ADMIN_PROHIBITED, we are emulating it.
- * The result will be a plain DROP of the packet instead of
- * reject. -- Maciej Soltysiak <solt@dns.toxicfilms.tv>
- */
-#ifndef IPT_ICMP_ADMIN_PROHIBITED
-#define IPT_ICMP_ADMIN_PROHIBITED      IPT_TCP_RESET + 1
-#endif
-
-struct reject_names {
-       const char *name;
-       const char *alias;
-       enum ipt_reject_with with;
-       const char *desc;
-};
-
-static const struct reject_names reject_table[] = {
-       {"icmp-net-unreachable", "net-unreach",
-               IPT_ICMP_NET_UNREACHABLE, "ICMP network unreachable"},
-       {"icmp-host-unreachable", "host-unreach",
-               IPT_ICMP_HOST_UNREACHABLE, "ICMP host unreachable"},
-       {"icmp-proto-unreachable", "proto-unreach",
-               IPT_ICMP_PROT_UNREACHABLE, "ICMP protocol unreachable"},
-       {"icmp-port-unreachable", "port-unreach",
-               IPT_ICMP_PORT_UNREACHABLE, "ICMP port unreachable (default)"},
-#if 0
-       {"echo-reply", "echoreply",
-        IPT_ICMP_ECHOREPLY, "for ICMP echo only: faked ICMP echo reply"},
-#endif
-       {"icmp-net-prohibited", "net-prohib",
-        IPT_ICMP_NET_PROHIBITED, "ICMP network prohibited"},
-       {"icmp-host-prohibited", "host-prohib",
-        IPT_ICMP_HOST_PROHIBITED, "ICMP host prohibited"},
-       {"tcp-reset", "tcp-rst",
-        IPT_TCP_RESET, "TCP RST packet"},
-       {"icmp-admin-prohibited", "admin-prohib",
-        IPT_ICMP_ADMIN_PROHIBITED, "ICMP administratively prohibited (*)"}
-};
-
-static void
-print_reject_types(void)
-{
-       unsigned int i;
-
-       printf("Valid reject types:\n");
-
-       for (i = 0; i < sizeof(reject_table)/sizeof(struct reject_names); i++) {
-               printf("    %-25s\t%s\n", reject_table[i].name, reject_table[i].desc);
-               printf("    %-25s\talias\n", reject_table[i].alias);
-       }
-       printf("\n");
-}
-
-/* Saves the union ipt_targinfo in parsable form to stdout. */
-
-/* Function which prints out usage message. */
-static void REJECT_help(void)
-{
-       printf(
-"REJECT target options:\n"
-"--reject-with type              drop input packet and send back\n"
-"                                a reply packet according to type:\n");
-
-       print_reject_types();
-
-       printf("(*) See man page or read the INCOMPATIBILITES file for compatibility issues.\n");
-}
-
-static const struct option REJECT_opts[] = {
-       { "reject-with", 1, NULL, '1' },
-       { .name = NULL }
-};
-
-/* Allocate and initialize the target. */
-static void REJECT_init(struct xt_entry_target *t)
-{
-       struct ipt_reject_info *reject = (struct ipt_reject_info *)t->data;
-
-       /* default */
-       reject->with = IPT_ICMP_PORT_UNREACHABLE;
-
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int REJECT_parse(int c, char **argv, int invert, unsigned int *flags,
-                        const void *entry, struct xt_entry_target **target)
-{
-       struct ipt_reject_info *reject = (struct ipt_reject_info *)(*target)->data;
-       unsigned int limit = sizeof(reject_table)/sizeof(struct reject_names);
-       unsigned int i;
-
-       switch(c) {
-       case '1':
-               if (check_inverse(optarg, &invert, NULL, 0))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Unexpected `!' after --reject-with");
-               for (i = 0; i < limit; i++) {
-                       if ((strncasecmp(reject_table[i].name, optarg, strlen(optarg)) == 0)
-                           || (strncasecmp(reject_table[i].alias, optarg, strlen(optarg)) == 0)) {
-                               reject->with = reject_table[i].with;
-                               return 1;
-                       }
-               }
-               /* This due to be dropped late in 2.4 pre-release cycle --RR */
-               if (strncasecmp("echo-reply", optarg, strlen(optarg)) == 0
-                   || strncasecmp("echoreply", optarg, strlen(optarg)) == 0)
-                       fprintf(stderr, "--reject-with echo-reply no longer"
-                               " supported\n");
-               exit_error(PARAMETER_PROBLEM, "unknown reject type `%s'",optarg);
-       default:
-               /* Fall through */
-               break;
-       }
-       return 0;
-}
-
-/* Prints out ipt_reject_info. */
-static void REJECT_print(const void *ip, const struct xt_entry_target *target,
-                         int numeric)
-{
-       const struct ipt_reject_info *reject
-               = (const struct ipt_reject_info *)target->data;
-       unsigned int i;
-
-       for (i = 0; i < sizeof(reject_table)/sizeof(struct reject_names); i++) {
-               if (reject_table[i].with == reject->with)
-                       break;
-       }
-       printf("reject-with %s ", reject_table[i].name);
-}
-
-/* Saves ipt_reject in parsable form to stdout. */
-static void REJECT_save(const void *ip, const struct xt_entry_target *target)
-{
-       const struct ipt_reject_info *reject
-               = (const struct ipt_reject_info *)target->data;
-       unsigned int i;
-
-       for (i = 0; i < sizeof(reject_table)/sizeof(struct reject_names); i++)
-               if (reject_table[i].with == reject->with)
-                       break;
-
-       printf("--reject-with %s ", reject_table[i].name);
-}
-
-static struct xtables_target reject_tg_reg = {
-       .name           = "REJECT",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET,
-       .size           = XT_ALIGN(sizeof(struct ipt_reject_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct ipt_reject_info)),
-       .help           = REJECT_help,
-       .init           = REJECT_init,
-       .parse          = REJECT_parse,
-       .print          = REJECT_print,
-       .save           = REJECT_save,
-       .extra_opts     = REJECT_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&reject_tg_reg);
-}
diff --git a/extensions/libipt_REJECT.man b/extensions/libipt_REJECT.man
deleted file mode 100644 (file)
index 174bf7b..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-This is used to send back an error packet in response to the matched
-packet: otherwise it is equivalent to
-.B DROP
-so it is a terminating TARGET, ending rule traversal.
-This target is only valid in the
-.BR INPUT ,
-.B FORWARD
-and
-.B OUTPUT
-chains, and user-defined chains which are only called from those
-chains.  The following option controls the nature of the error packet
-returned:
-.TP
-.BI "--reject-with " "type"
-The type given can be
-.nf
-.B " icmp-net-unreachable"
-.B " icmp-host-unreachable"
-.B " icmp-port-unreachable"
-.B " icmp-proto-unreachable"
-.B " icmp-net-prohibited"
-.B " icmp-host-prohibited or"
-.B " icmp-admin-prohibited (*)"
-.fi
-which return the appropriate ICMP error message (\fBport-unreachable\fP is
-the default).  The option
-.B tcp-reset
-can be used on rules which only match the TCP protocol: this causes a
-TCP RST packet to be sent back.  This is mainly useful for blocking 
-.I ident
-(113/tcp) probes which frequently occur when sending mail to broken mail
-hosts (which won't accept your mail otherwise).
-.TP
-(*) Using icmp-admin-prohibited with kernels that do not support it will result in a plain DROP instead of REJECT
diff --git a/extensions/libipt_SAME.c b/extensions/libipt_SAME.c
deleted file mode 100644 (file)
index 3154797..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-/* Shared library add-on to iptables to add simple non load-balancing SNAT support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <iptables.h>
-#include <linux/netfilter_ipv4/ip_tables.h>
-#include <linux/netfilter/nf_nat.h>
-/* For 64bit kernel / 32bit userspace */
-#include "../include/linux/netfilter_ipv4/ipt_SAME.h"
-
-/* Function which prints out usage message. */
-static void SAME_help(void)
-{
-       printf(
-"SAME target options:\n"
-" --to <ipaddr>-<ipaddr>\n"
-"                              Addresses to map source to.\n"
-"                               May be specified more than\n"
-"                                once for multiple ranges.\n"
-" --nodst\n"
-"                              Don't use destination-ip in\n"
-"                                         source selection\n"
-" --random\n"
-"                              Randomize source port\n");
-}
-
-static const struct option SAME_opts[] = {
-       { "to", 1, NULL, '1' },
-       { "nodst", 0, NULL, '2'},
-       { "random", 0, NULL, '3' },
-       { .name = NULL }
-};
-
-/* Initialize the target. */
-static void SAME_init(struct xt_entry_target *t)
-{
-       struct ipt_same_info *mr = (struct ipt_same_info *)t->data;
-
-       /* Set default to 0 */
-       mr->rangesize = 0;
-       mr->info = 0;
-       mr->ipnum = 0;
-       
-}
-
-/* Parses range of IPs */
-static void
-parse_to(char *arg, struct ip_nat_range *range)
-{
-       char *dash;
-       const struct in_addr *ip;
-
-       range->flags |= IP_NAT_RANGE_MAP_IPS;
-       dash = strchr(arg, '-');
-
-       if (dash)
-               *dash = '\0';
-
-       ip = numeric_to_ipaddr(arg);
-       if (!ip)
-               exit_error(PARAMETER_PROBLEM, "Bad IP address `%s'\n",
-                          arg);
-       range->min_ip = ip->s_addr;
-
-       if (dash) {
-               ip = numeric_to_ipaddr(dash+1);
-               if (!ip)
-                       exit_error(PARAMETER_PROBLEM, "Bad IP address `%s'\n",
-                                  dash+1);
-       }
-       range->max_ip = ip->s_addr;
-       if (dash)
-               if (range->min_ip > range->max_ip)
-                       exit_error(PARAMETER_PROBLEM, "Bad IP range `%s-%s'\n", 
-                                  arg, dash+1);
-}
-
-#define IPT_SAME_OPT_TO                        0x01
-#define IPT_SAME_OPT_NODST             0x02
-#define IPT_SAME_OPT_RANDOM            0x04
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int SAME_parse(int c, char **argv, int invert, unsigned int *flags,
-                      const void *entry, struct xt_entry_target **target)
-{
-       struct ipt_same_info *mr
-               = (struct ipt_same_info *)(*target)->data;
-       unsigned int count;
-
-       switch (c) {
-       case '1':
-               if (mr->rangesize == IPT_SAME_MAX_RANGE)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Too many ranges specified, maximum "
-                                  "is %i ranges.\n",
-                                  IPT_SAME_MAX_RANGE);
-               if (check_inverse(optarg, &invert, NULL, 0))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Unexpected `!' after --to");
-
-               parse_to(optarg, &mr->range[mr->rangesize]);
-               /* WTF do we need this for? */
-               if (*flags & IPT_SAME_OPT_RANDOM)
-                       mr->range[mr->rangesize].flags 
-                               |= IP_NAT_RANGE_PROTO_RANDOM;
-               mr->rangesize++;
-               *flags |= IPT_SAME_OPT_TO;
-               break;
-               
-       case '2':
-               if (*flags & IPT_SAME_OPT_NODST)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can't specify --nodst twice");
-               
-               mr->info |= IPT_SAME_NODST;
-               *flags |= IPT_SAME_OPT_NODST;
-               break;
-
-       case '3':       
-               *flags |= IPT_SAME_OPT_RANDOM;
-               for (count=0; count < mr->rangesize; count++)
-                       mr->range[count].flags |= IP_NAT_RANGE_PROTO_RANDOM;
-               break;
-
-       default:
-               return 0;
-       }
-       
-       return 1;
-}
-
-/* Final check; need --to. */
-static void SAME_check(unsigned int flags)
-{
-       if (!(flags & IPT_SAME_OPT_TO))
-               exit_error(PARAMETER_PROBLEM,
-                          "SAME needs --to");
-}
-
-/* Prints out the targinfo. */
-static void SAME_print(const void *ip, const struct xt_entry_target *target,
-                       int numeric)
-{
-       unsigned int count;
-       struct ipt_same_info *mr
-               = (struct ipt_same_info *)target->data;
-       int random_selection = 0;
-       
-       printf("same:");
-       
-       for (count = 0; count < mr->rangesize; count++) {
-               struct ip_nat_range *r = &mr->range[count];
-               struct in_addr a;
-
-               a.s_addr = r->min_ip;
-
-               printf("%s", ipaddr_to_numeric(&a));
-               a.s_addr = r->max_ip;
-               
-               if (r->min_ip == r->max_ip)
-                       printf(" ");
-               else
-                       printf("-%s ", ipaddr_to_numeric(&a));
-               if (r->flags & IP_NAT_RANGE_PROTO_RANDOM) 
-                       random_selection = 1;
-       }
-       
-       if (mr->info & IPT_SAME_NODST)
-               printf("nodst ");
-
-       if (random_selection)
-               printf("random ");
-}
-
-/* Saves the union ipt_targinfo in parsable form to stdout. */
-static void SAME_save(const void *ip, const struct xt_entry_target *target)
-{
-       unsigned int count;
-       struct ipt_same_info *mr
-               = (struct ipt_same_info *)target->data;
-       int random_selection = 0;
-
-       for (count = 0; count < mr->rangesize; count++) {
-               struct ip_nat_range *r = &mr->range[count];
-               struct in_addr a;
-
-               a.s_addr = r->min_ip;
-               printf("--to %s", ipaddr_to_numeric(&a));
-               a.s_addr = r->max_ip;
-
-               if (r->min_ip == r->max_ip)
-                       printf(" ");
-               else
-                       printf("-%s ", ipaddr_to_numeric(&a));
-               if (r->flags & IP_NAT_RANGE_PROTO_RANDOM) 
-                       random_selection = 1;
-       }
-       
-       if (mr->info & IPT_SAME_NODST)
-               printf("--nodst ");
-
-       if (random_selection)
-               printf("--random ");
-}
-
-static struct xtables_target same_tg_reg = {
-       .name           = "SAME",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET,
-       .size           = XT_ALIGN(sizeof(struct ipt_same_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct ipt_same_info)),
-       .help           = SAME_help,
-       .init           = SAME_init,
-       .parse          = SAME_parse,
-       .final_check    = SAME_check,
-       .print          = SAME_print,
-       .save           = SAME_save,
-       .extra_opts     = SAME_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&same_tg_reg);
-}
diff --git a/extensions/libipt_SAME.man b/extensions/libipt_SAME.man
deleted file mode 100644 (file)
index 7e28ca5..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-Similar to SNAT/DNAT depending on chain: it takes a range of addresses
-(`--to 1.2.3.4-1.2.3.7') and gives a client the same
-source-/destination-address for each connection.
-.TP
-\fB--to\fP \fIipaddr\fP[\fB-\fP\fIipaddr\fP]
-Addresses to map source to. May be specified more than once for
-multiple ranges.
-.TP
-.B "--nodst"
-Don't use the destination-ip in the calculations when selecting the
-new source-ip
-.TP
-.B "--random"
-Port mapping will be forcibly randomized to avoid attacks based on 
-port prediction (kernel >= 2.6.21).
diff --git a/extensions/libipt_SET.c b/extensions/libipt_SET.c
deleted file mode 100644 (file)
index 62d959f..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-/* Copyright (C) 2000-2002 Joakim Axelsson <gozem@linux.nu>
- *                         Patrick Schaaf <bof@bof.de>
- *                         Martin Josefsson <gandalf@wlug.westbo.se>
- * Copyright (C) 2003-2004 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.  
- */
-
-/* Shared library add-on to iptables to add IP set mangling target. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <ctype.h>
-
-#include <iptables.h>
-#include <linux/netfilter_ipv4/ip_tables.h>
-#include <linux/netfilter_ipv4/ip_set.h>
-#include <linux/netfilter_ipv4/ipt_set.h>
-#include "libipt_set.h"
-
-/* Function which prints out usage message. */
-static void SET_help(void)
-{
-       printf("SET target options:\n"
-              " --add-set name flags\n"
-              " --del-set name flags\n"
-              "                add/del src/dst IP/port from/to named sets,\n"
-              "                where flags are the comma separated list of\n"
-              "                'src' and 'dst'.\n");
-}
-
-static const struct option SET_opts[] = {
-       {"add-set",   1, NULL, '1'},
-       {"del-set",   1, NULL, '2'},
-       { }
-};
-
-/* Initialize the target. */
-static void SET_init(struct xt_entry_target *target)
-{
-       struct ipt_set_info_target *info =
-           (struct ipt_set_info_target *) target->data;
-
-       memset(info, 0, sizeof(struct ipt_set_info_target));
-       info->add_set.index =
-       info->del_set.index = IP_SET_INVALID_ID;
-
-}
-
-static void
-parse_target(char **argv, int invert, unsigned int *flags,
-             struct ipt_set_info *info, const char *what)
-{
-       if (info->flags[0])
-               exit_error(PARAMETER_PROBLEM,
-                          "--%s can be specified only once", what);
-
-       if (check_inverse(optarg, &invert, NULL, 0))
-               exit_error(PARAMETER_PROBLEM,
-                          "Unexpected `!' after --%s", what);
-
-       if (!argv[optind]
-           || argv[optind][0] == '-' || argv[optind][0] == '!')
-               exit_error(PARAMETER_PROBLEM,
-                          "--%s requires two args.", what);
-
-       if (strlen(argv[optind-1]) > IP_SET_MAXNAMELEN - 1)
-               exit_error(PARAMETER_PROBLEM,
-                          "setname `%s' too long, max %d characters.",
-                          argv[optind-1], IP_SET_MAXNAMELEN - 1);
-
-       get_set_byname(argv[optind - 1], info);
-       parse_bindings(argv[optind], info);
-       optind++;
-       
-       *flags = 1;
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int SET_parse(int c, char **argv, int invert, unsigned int *flags,
-                     const void *entry, struct xt_entry_target **target)
-{
-       struct ipt_set_info_target *myinfo =
-           (struct ipt_set_info_target *) (*target)->data;
-
-       switch (c) {
-       case '1':               /* --add-set <set> <flags> */
-               parse_target(argv, invert, flags,
-                            &myinfo->add_set, "add-set");
-               break;
-       case '2':               /* --del-set <set>[:<flags>] <flags> */
-               parse_target(argv, invert, flags,
-                            &myinfo->del_set, "del-set");
-               break;
-
-       default:
-               return 0;
-       }
-       return 1;
-}
-
-/* Final check; must specify at least one. */
-static void SET_check(unsigned int flags)
-{
-       if (!flags)
-               exit_error(PARAMETER_PROBLEM,
-                          "You must specify either `--add-set' or `--del-set'");
-}
-
-static void
-print_target(const char *prefix, const struct ipt_set_info *info)
-{
-       int i;
-       char setname[IP_SET_MAXNAMELEN];
-
-       if (info->index == IP_SET_INVALID_ID)
-               return;
-       get_set_byid(setname, info->index);
-       printf("%s %s", prefix, setname);
-       for (i = 0; i < IP_SET_MAX_BINDINGS; i++) {
-               if (!info->flags[i])
-                       break;          
-               printf("%s%s",
-                      i == 0 ? " " : ",",
-                      info->flags[i] & IPSET_SRC ? "src" : "dst");
-       }
-       printf(" ");
-}
-
-/* Prints out the targinfo. */
-static void SET_print(const void *ip, const struct xt_entry_target *target,
-                      int numeric)
-{
-       struct ipt_set_info_target *info =
-           (struct ipt_set_info_target *) target->data;
-
-       print_target("add-set", &info->add_set);
-       print_target("del-set", &info->del_set);
-}
-
-/* Saves the union ipt_targinfo in parsable form to stdout. */
-static void SET_save(const void *ip, const struct xt_entry_target *target)
-{
-       struct ipt_set_info_target *info =
-           (struct ipt_set_info_target *) target->data;
-
-       print_target("--add-set", &info->add_set);
-       print_target("--del-set", &info->del_set);
-}
-
-static struct xtables_target set_tg_reg = {
-       .name           = "SET",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET,
-       .size           = XT_ALIGN(sizeof(struct ipt_set_info_target)),
-       .userspacesize  = XT_ALIGN(sizeof(struct ipt_set_info_target)),
-       .help           = SET_help,
-       .init           = SET_init,
-       .parse          = SET_parse,
-       .final_check    = SET_check,
-       .print          = SET_print,
-       .save           = SET_save,
-       .extra_opts     = SET_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&set_tg_reg);
-}
diff --git a/extensions/libipt_SET.man b/extensions/libipt_SET.man
deleted file mode 100644 (file)
index 4da73ca..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-This modules adds and/or deletes entries from IP sets which can be defined 
-by ipset(8).
-.TP
-\fB--add-set\fP \fIsetname\fP \fIflag\fP[\fB,\fP\fIflag\fP...]
-add the address(es)/port(s) of the packet to the sets
-.TP
-\fB--del-set\fP \fIsetname\fP \fIflag\fP[\fB,\fP\fIflag\fP...]
-delete the address(es)/port(s) of the packet from the sets,
-where flags are
-.BR "src"
-and/or
-.BR "dst"
-and there can be no more than six of them.
-.TP
-The bindings to follow must previously be defined in order to use 
-multilevel adding/deleting by the SET target.
diff --git a/extensions/libipt_SNAT.c b/extensions/libipt_SNAT.c
deleted file mode 100644 (file)
index 11536c6..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-/* Shared library add-on to iptables to add source-NAT support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <iptables.h>
-#include <linux/netfilter_ipv4/ip_tables.h>
-#include <linux/netfilter/nf_nat.h>
-
-#define IPT_SNAT_OPT_SOURCE 0x01
-#define IPT_SNAT_OPT_RANDOM 0x02
-
-/* Source NAT data consists of a multi-range, indicating where to map
-   to. */
-struct ipt_natinfo
-{
-       struct xt_entry_target t;
-       struct ip_nat_multi_range mr;
-};
-
-/* Function which prints out usage message. */
-static void SNAT_help(void)
-{
-       printf(
-"SNAT target options:\n"
-" --to-source <ipaddr>[-<ipaddr>][:port-port]\n"
-"                              Address to map source to.\n"
-"[--random]\n");
-}
-
-static const struct option SNAT_opts[] = {
-       { "to-source", 1, NULL, '1' },
-       { "random", 0, NULL, '2' },
-       { .name = NULL }
-};
-
-static struct ipt_natinfo *
-append_range(struct ipt_natinfo *info, const struct ip_nat_range *range)
-{
-       unsigned int size;
-
-       /* One rangesize already in struct ipt_natinfo */
-       size = XT_ALIGN(sizeof(*info) + info->mr.rangesize * sizeof(*range));
-
-       info = realloc(info, size);
-       if (!info)
-               exit_error(OTHER_PROBLEM, "Out of memory\n");
-
-       info->t.u.target_size = size;
-       info->mr.range[info->mr.rangesize] = *range;
-       info->mr.rangesize++;
-
-       return info;
-}
-
-/* Ranges expected in network order. */
-static struct xt_entry_target *
-parse_to(char *arg, int portok, struct ipt_natinfo *info)
-{
-       struct ip_nat_range range;
-       char *colon, *dash, *error;
-       const struct in_addr *ip;
-
-       memset(&range, 0, sizeof(range));
-       colon = strchr(arg, ':');
-
-       if (colon) {
-               int port;
-
-               if (!portok)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Need TCP or UDP with port specification");
-
-               range.flags |= IP_NAT_RANGE_PROTO_SPECIFIED;
-
-               port = atoi(colon+1);
-               if (port <= 0 || port > 65535)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Port `%s' not valid\n", colon+1);
-
-               error = strchr(colon+1, ':');
-               if (error)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Invalid port:port syntax - use dash\n");
-
-               dash = strchr(colon, '-');
-               if (!dash) {
-                       range.min.tcp.port
-                               = range.max.tcp.port
-                               = htons(port);
-               } else {
-                       int maxport;
-
-                       maxport = atoi(dash + 1);
-                       if (maxport <= 0 || maxport > 65535)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "Port `%s' not valid\n", dash+1);
-                       if (maxport < port)
-                               /* People are stupid. */
-                               exit_error(PARAMETER_PROBLEM,
-                                          "Port range `%s' funky\n", colon+1);
-                       range.min.tcp.port = htons(port);
-                       range.max.tcp.port = htons(maxport);
-               }
-               /* Starts with a colon? No IP info...*/
-               if (colon == arg)
-                       return &(append_range(info, &range)->t);
-               *colon = '\0';
-       }
-
-       range.flags |= IP_NAT_RANGE_MAP_IPS;
-       dash = strchr(arg, '-');
-       if (colon && dash && dash > colon)
-               dash = NULL;
-
-       if (dash)
-               *dash = '\0';
-
-       ip = numeric_to_ipaddr(arg);
-       if (!ip)
-               exit_error(PARAMETER_PROBLEM, "Bad IP address `%s'\n",
-                          arg);
-       range.min_ip = ip->s_addr;
-       if (dash) {
-               ip = numeric_to_ipaddr(dash+1);
-               if (!ip)
-                       exit_error(PARAMETER_PROBLEM, "Bad IP address `%s'\n",
-                                  dash+1);
-               range.max_ip = ip->s_addr;
-       } else
-               range.max_ip = range.min_ip;
-
-       return &(append_range(info, &range)->t);
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int SNAT_parse(int c, char **argv, int invert, unsigned int *flags,
-                      const void *e, struct xt_entry_target **target)
-{
-       const struct ipt_entry *entry = e;
-       struct ipt_natinfo *info = (void *)*target;
-       int portok;
-
-       if (entry->ip.proto == IPPROTO_TCP
-           || entry->ip.proto == IPPROTO_UDP
-           || entry->ip.proto == IPPROTO_ICMP)
-               portok = 1;
-       else
-               portok = 0;
-
-       switch (c) {
-       case '1':
-               if (check_inverse(optarg, &invert, NULL, 0))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Unexpected `!' after --to-source");
-
-               if (*flags & IPT_SNAT_OPT_SOURCE) {
-                       if (!kernel_version)
-                               get_kernel_version();
-                       if (kernel_version > LINUX_VERSION(2, 6, 10))
-                               exit_error(PARAMETER_PROBLEM,
-                                          "Multiple --to-source not supported");
-               }
-               *target = parse_to(optarg, portok, info);
-               /* WTF do we need this for?? */
-               if (*flags & IPT_SNAT_OPT_RANDOM)
-                       info->mr.range[0].flags |= IP_NAT_RANGE_PROTO_RANDOM;
-               *flags |= IPT_SNAT_OPT_SOURCE;
-               return 1;
-
-       case '2':
-               if (*flags & IPT_SNAT_OPT_SOURCE) {
-                       info->mr.range[0].flags |= IP_NAT_RANGE_PROTO_RANDOM;
-                       *flags |= IPT_SNAT_OPT_RANDOM;
-               } else
-                       *flags |= IPT_SNAT_OPT_RANDOM;
-               return 1;
-
-       default:
-               return 0;
-       }
-}
-
-/* Final check; must have specfied --to-source. */
-static void SNAT_check(unsigned int flags)
-{
-       if (!(flags & IPT_SNAT_OPT_SOURCE))
-               exit_error(PARAMETER_PROBLEM,
-                          "You must specify --to-source");
-}
-
-static void print_range(const struct ip_nat_range *r)
-{
-       if (r->flags & IP_NAT_RANGE_MAP_IPS) {
-               struct in_addr a;
-
-               a.s_addr = r->min_ip;
-               printf("%s", ipaddr_to_numeric(&a));
-               if (r->max_ip != r->min_ip) {
-                       a.s_addr = r->max_ip;
-                       printf("-%s", ipaddr_to_numeric(&a));
-               }
-       }
-       if (r->flags & IP_NAT_RANGE_PROTO_SPECIFIED) {
-               printf(":");
-               printf("%hu", ntohs(r->min.tcp.port));
-               if (r->max.tcp.port != r->min.tcp.port)
-                       printf("-%hu", ntohs(r->max.tcp.port));
-       }
-}
-
-/* Prints out the targinfo. */
-static void SNAT_print(const void *ip, const struct xt_entry_target *target,
-                       int numeric)
-{
-       struct ipt_natinfo *info = (void *)target;
-       unsigned int i = 0;
-
-       printf("to:");
-       for (i = 0; i < info->mr.rangesize; i++) {
-               print_range(&info->mr.range[i]);
-               printf(" ");
-               if (info->mr.range[i].flags & IP_NAT_RANGE_PROTO_RANDOM)
-                       printf("random ");
-       }
-}
-
-/* Saves the union ipt_targinfo in parsable form to stdout. */
-static void SNAT_save(const void *ip, const struct xt_entry_target *target)
-{
-       struct ipt_natinfo *info = (void *)target;
-       unsigned int i = 0;
-
-       for (i = 0; i < info->mr.rangesize; i++) {
-               printf("--to-source ");
-               print_range(&info->mr.range[i]);
-               printf(" ");
-               if (info->mr.range[i].flags & IP_NAT_RANGE_PROTO_RANDOM)
-                       printf("--random ");
-       }
-}
-
-static struct xtables_target snat_tg_reg = {
-       .name           = "SNAT",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET,
-       .size           = XT_ALIGN(sizeof(struct ip_nat_multi_range)),
-       .userspacesize  = XT_ALIGN(sizeof(struct ip_nat_multi_range)),
-       .help           = SNAT_help,
-       .parse          = SNAT_parse,
-       .final_check    = SNAT_check,
-       .print          = SNAT_print,
-       .save           = SNAT_save,
-       .extra_opts     = SNAT_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&snat_tg_reg);
-}
diff --git a/extensions/libipt_SNAT.man b/extensions/libipt_SNAT.man
deleted file mode 100644 (file)
index 34939af..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-This target is only valid in the
-.B nat
-table, in the
-.B POSTROUTING
-chain.  It specifies that the source address of the packet should be
-modified (and all future packets in this connection will also be
-mangled), and rules should cease being examined.  It takes one type
-of option:
-.TP
-\fB--to-source\fP \fIipaddr\fP[\fB-\fP\fIipaddr\fP][\fB:\fP\fIport\fP[\fB-\fP\fIport\fP]]
-which can specify a single new source IP address, an inclusive range
-of IP addresses, and optionally, a port range (which is only valid if
-the rule also specifies
-.B "-p tcp"
-or
-.BR "-p udp" ).
-If no port range is specified, then source ports below 512 will be
-mapped to other ports below 512: those between 512 and 1023 inclusive
-will be mapped to ports below 1024, and other ports will be mapped to
-1024 or above. Where possible, no port alteration will
-
-In Kernels up to 2.6.10, you can add several --to-source options.  For those
-kernels, if you specify more than one source address, either via an address
-range or multiple --to-source options, a simple round-robin (one after another
-in cycle) takes place between these addresses.
-Later Kernels (>= 2.6.11-rc1) don't have the ability to NAT to multiple ranges
-anymore.
-.TP
-.BR "--random"
-If option
-.B "--random"
-is used then port mapping will be randomized (kernel >= 2.6.21).
-.RS
-.PP
diff --git a/extensions/libipt_TTL.c b/extensions/libipt_TTL.c
deleted file mode 100644 (file)
index 9c22ba3..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-/* Shared library add-on to iptables for the TTL target
- * (C) 2000 by Harald Welte <laforge@gnumonks.org>
- *
- * $Id$
- *
- * This program is distributed under the terms of GNU GPL
- */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <iptables.h>
-
-#include <linux/netfilter_ipv4/ip_tables.h>
-#include <linux/netfilter_ipv4/ipt_TTL.h>
-
-#define IPT_TTL_USED   1
-
-static void TTL_help(void)
-{
-       printf(
-"TTL target options\n"
-"  --ttl-set value             Set TTL to <value 0-255>\n"
-"  --ttl-dec value             Decrement TTL by <value 1-255>\n"
-"  --ttl-inc value             Increment TTL by <value 1-255>\n");
-}
-
-static int TTL_parse(int c, char **argv, int invert, unsigned int *flags,
-                     const void *entry, struct xt_entry_target **target)
-{
-       struct ipt_TTL_info *info = (struct ipt_TTL_info *) (*target)->data;
-       unsigned int value;
-
-       if (*flags & IPT_TTL_USED) {
-               exit_error(PARAMETER_PROBLEM, 
-                               "Can't specify TTL option twice");
-       }
-
-       if (!optarg) 
-               exit_error(PARAMETER_PROBLEM, 
-                               "TTL: You must specify a value");
-
-       if (check_inverse(optarg, &invert, NULL, 0))
-               exit_error(PARAMETER_PROBLEM,
-                               "TTL: unexpected `!'");
-       
-       if (string_to_number(optarg, 0, 255, &value) == -1)
-               exit_error(PARAMETER_PROBLEM,
-                          "TTL: Expected value between 0 and 255");
-
-       switch (c) {
-
-               case '1':
-                       info->mode = IPT_TTL_SET;
-                       break;
-
-               case '2':
-                       if (value == 0) {
-                               exit_error(PARAMETER_PROBLEM,
-                                       "TTL: decreasing by 0?");
-                       }
-
-                       info->mode = IPT_TTL_DEC;
-                       break;
-
-               case '3':
-                       if (value == 0) {
-                               exit_error(PARAMETER_PROBLEM,
-                                       "TTL: increasing by 0?");
-                       }
-
-                       info->mode = IPT_TTL_INC;
-                       break;
-
-               default:
-                       return 0;
-
-       }
-       
-       info->ttl = value;
-       *flags |= IPT_TTL_USED;
-
-       return 1;
-}
-
-static void TTL_check(unsigned int flags)
-{
-       if (!(flags & IPT_TTL_USED))
-               exit_error(PARAMETER_PROBLEM,
-                               "TTL: You must specify an action");
-}
-
-static void TTL_save(const void *ip, const struct xt_entry_target *target)
-{
-       const struct ipt_TTL_info *info = 
-               (struct ipt_TTL_info *) target->data;
-
-       switch (info->mode) {
-               case IPT_TTL_SET:
-                       printf("--ttl-set ");
-                       break;
-               case IPT_TTL_DEC:
-                       printf("--ttl-dec ");
-                       break;
-
-               case IPT_TTL_INC:
-                       printf("--ttl-inc ");
-                       break;
-       }
-       printf("%u ", info->ttl);
-}
-
-static void TTL_print(const void *ip, const struct xt_entry_target *target,
-                      int numeric)
-{
-       const struct ipt_TTL_info *info =
-               (struct ipt_TTL_info *) target->data;
-
-       printf("TTL ");
-       switch (info->mode) {
-               case IPT_TTL_SET:
-                       printf("set to ");
-                       break;
-               case IPT_TTL_DEC:
-                       printf("decrement by ");
-                       break;
-               case IPT_TTL_INC:
-                       printf("increment by ");
-                       break;
-       }
-       printf("%u ", info->ttl);
-}
-
-static const struct option TTL_opts[] = {
-       { "ttl-set", 1, NULL, '1' },
-       { "ttl-dec", 1, NULL, '2' },
-       { "ttl-inc", 1, NULL, '3' },
-       { .name = NULL }
-};
-
-static struct xtables_target ttl_tg_reg = {
-       .name           = "TTL",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET,
-       .size           = XT_ALIGN(sizeof(struct ipt_TTL_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct ipt_TTL_info)),
-       .help           = TTL_help,
-       .parse          = TTL_parse,
-       .final_check    = TTL_check,
-       .print          = TTL_print,
-       .save           = TTL_save,
-       .extra_opts     = TTL_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&ttl_tg_reg);
-}
diff --git a/extensions/libipt_TTL.man b/extensions/libipt_TTL.man
deleted file mode 100644 (file)
index 97c46c4..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-This is used to modify the IPv4 TTL header field.  The TTL field determines
-how many hops (routers) a packet can traverse until it's time to live is
-exceeded.
-.TP
-Setting or incrementing the TTL field can potentially be very dangerous,
-so it should be avoided at any cost.  
-.TP
-.B Don't ever set or increment the value on packets that leave your local network!
-.B mangle
-table.
-.TP
-.BI "--ttl-set " "value"
-Set the TTL value to `value'.
-.TP
-.BI "--ttl-dec " "value"
-Decrement the TTL value `value' times.
-.TP
-.BI "--ttl-inc " "value"
-Increment the TTL value `value' times.
diff --git a/extensions/libipt_ULOG.c b/extensions/libipt_ULOG.c
deleted file mode 100644 (file)
index d2b464f..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-/* Shared library add-on to iptables to add ULOG support.
- * 
- * (C) 2000 by Harald Welte <laforge@gnumonks.org>
- *
- * multipart netlink support based on ideas by Sebastian Zander 
- *                                             <zander@fokus.gmd.de>
- *
- * This software is released under the terms of GNU GPL
- * 
- * libipt_ULOG.c,v 1.7 2001/01/30 11:55:02 laforge Exp
- */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <syslog.h>
-#include <getopt.h>
-#include <iptables.h>
-#include <linux/netfilter_ipv4/ip_tables.h>
-/* For 64bit kernel / 32bit userspace */
-#include "../include/linux/netfilter_ipv4/ipt_ULOG.h"
-
-
-static void print_groups(unsigned int gmask)
-{
-       int b;
-       unsigned int test;
-
-       for (b = 31; b >= 0; b--) {
-               test = (1 << b);
-               if (gmask & test)
-                       printf("%d ", b + 1);
-       }
-}
-
-/* Function which prints out usage message. */
-static void ULOG_help(void)
-{
-       printf("ULOG target options:\n"
-              " --ulog-nlgroup nlgroup         NETLINK group used for logging\n"
-              " --ulog-cprange size            Bytes of each packet to be passed\n"
-              " --ulog-qthreshold              Threshold of in-kernel queue\n"
-              " --ulog-prefix prefix           Prefix log messages with this prefix.\n");
-}
-
-static const struct option ULOG_opts[] = {
-       {"ulog-nlgroup", 1, NULL, '!'},
-       {"ulog-prefix", 1, NULL, '#'},
-       {"ulog-cprange", 1, NULL, 'A'},
-       {"ulog-qthreshold", 1, NULL, 'B'},
-       { .name = NULL }
-};
-
-/* Initialize the target. */
-static void ULOG_init(struct xt_entry_target *t)
-{
-       struct ipt_ulog_info *loginfo = (struct ipt_ulog_info *) t->data;
-
-       loginfo->nl_group = ULOG_DEFAULT_NLGROUP;
-       loginfo->qthreshold = ULOG_DEFAULT_QTHRESHOLD;
-
-}
-
-#define IPT_LOG_OPT_NLGROUP 0x01
-#define IPT_LOG_OPT_PREFIX 0x02
-#define IPT_LOG_OPT_CPRANGE 0x04
-#define IPT_LOG_OPT_QTHRESHOLD 0x08
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int ULOG_parse(int c, char **argv, int invert, unsigned int *flags,
-                      const void *entry, struct xt_entry_target **target)
-{
-       struct ipt_ulog_info *loginfo =
-           (struct ipt_ulog_info *) (*target)->data;
-       int group_d;
-
-       switch (c) {
-       case '!':
-               if (*flags & IPT_LOG_OPT_NLGROUP)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can't specify --ulog-nlgroup twice");
-
-               if (check_inverse(optarg, &invert, NULL, 0))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Unexpected `!' after --ulog-nlgroup");
-               group_d = atoi(optarg);
-               if (group_d > 32 || group_d < 1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "--ulog-nlgroup has to be between 1 and 32");
-
-               loginfo->nl_group = (1 << (group_d - 1));
-
-               *flags |= IPT_LOG_OPT_NLGROUP;
-               break;
-
-       case '#':
-               if (*flags & IPT_LOG_OPT_PREFIX)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can't specify --ulog-prefix twice");
-
-               if (check_inverse(optarg, &invert, NULL, 0))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Unexpected `!' after --ulog-prefix");
-
-               if (strlen(optarg) > sizeof(loginfo->prefix) - 1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Maximum prefix length %u for --ulog-prefix",
-                                  (unsigned int)sizeof(loginfo->prefix) - 1);
-
-               if (strlen(optarg) == 0)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "No prefix specified for --ulog-prefix");
-
-               if (strlen(optarg) != strlen(strtok(optarg, "\n")))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Newlines not allowed in --ulog-prefix");
-
-               strcpy(loginfo->prefix, optarg);
-               *flags |= IPT_LOG_OPT_PREFIX;
-               break;
-       case 'A':
-               if (*flags & IPT_LOG_OPT_CPRANGE)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can't specify --ulog-cprange twice");
-               if (atoi(optarg) < 0)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Negative copy range?");
-               loginfo->copy_range = atoi(optarg);
-               *flags |= IPT_LOG_OPT_CPRANGE;
-               break;
-       case 'B':
-               if (*flags & IPT_LOG_OPT_QTHRESHOLD)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can't specify --ulog-qthreshold twice");
-               if (atoi(optarg) < 1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Negative or zero queue threshold ?");
-               if (atoi(optarg) > ULOG_MAX_QLEN)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Maximum queue length exceeded");
-               loginfo->qthreshold = atoi(optarg);
-               *flags |= IPT_LOG_OPT_QTHRESHOLD;
-               break;
-       default:
-               return 0;
-       }
-       return 1;
-}
-
-/* Saves the union ipt_targinfo in parsable form to stdout. */
-static void ULOG_save(const void *ip, const struct xt_entry_target *target)
-{
-       const struct ipt_ulog_info *loginfo
-           = (const struct ipt_ulog_info *) target->data;
-
-       if (strcmp(loginfo->prefix, "") != 0) {
-               fputs("--ulog-prefix ", stdout);
-               save_string(loginfo->prefix);
-       }
-
-       if (loginfo->nl_group != ULOG_DEFAULT_NLGROUP) {
-               printf("--ulog-nlgroup ");
-               print_groups(loginfo->nl_group);
-       }
-       if (loginfo->copy_range)
-               printf("--ulog-cprange %u ", (unsigned int)loginfo->copy_range);
-
-       if (loginfo->qthreshold != ULOG_DEFAULT_QTHRESHOLD)
-               printf("--ulog-qthreshold %u ", (unsigned int)loginfo->qthreshold);
-}
-
-/* Prints out the targinfo. */
-static void ULOG_print(const void *ip, const struct xt_entry_target *target,
-                       int numeric)
-{
-       const struct ipt_ulog_info *loginfo
-           = (const struct ipt_ulog_info *) target->data;
-
-       printf("ULOG ");
-       printf("copy_range %u nlgroup ", (unsigned int)loginfo->copy_range);
-       print_groups(loginfo->nl_group);
-       if (strcmp(loginfo->prefix, "") != 0)
-               printf("prefix `%s' ", loginfo->prefix);
-       printf("queue_threshold %u ", (unsigned int)loginfo->qthreshold);
-}
-
-static struct xtables_target ulog_tg_reg = {
-       .name           = "ULOG",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET,
-       .size           = XT_ALIGN(sizeof(struct ipt_ulog_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct ipt_ulog_info)),
-       .help           = ULOG_help,
-       .init           = ULOG_init,
-       .parse          = ULOG_parse,
-       .print          = ULOG_print,
-       .save           = ULOG_save,
-       .extra_opts     = ULOG_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&ulog_tg_reg);
-}
diff --git a/extensions/libipt_ULOG.man b/extensions/libipt_ULOG.man
deleted file mode 100644 (file)
index 51aa619..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-This target provides userspace logging of matching packets.  When this
-target is set for a rule, the Linux kernel will multicast this packet
-through a
-.IR netlink 
-socket. One or more userspace processes may then subscribe to various 
-multicast groups and receive the packets.
-Like LOG, this is a "non-terminating target", i.e. rule traversal
-continues at the next rule.
-.TP
-.BI "--ulog-nlgroup " "nlgroup"
-This specifies the netlink group (1-32) to which the packet is sent.
-Default value is 1.
-.TP
-.BI "--ulog-prefix " "prefix"
-Prefix log messages with the specified prefix; up to 32 characters
-long, and useful for distinguishing messages in the logs.
-.TP
-.BI "--ulog-cprange " "size"
-Number of bytes to be copied to userspace.  A value of 0 always copies
-the entire packet, regardless of its size.  Default is 0.
-.TP
-.BI "--ulog-qthreshold " "size"
-Number of packet to queue inside kernel.  Setting this value to, e.g. 10
-accumulates ten packets inside the kernel and transmits them as one
-netlink multipart message to userspace.  Default is 1 (for backwards
-compatibility).
-.br
diff --git a/extensions/libipt_addrtype.c b/extensions/libipt_addrtype.c
deleted file mode 100644 (file)
index 97ad804..0000000
+++ /dev/null
@@ -1,361 +0,0 @@
-/* Shared library add-on to iptables to add addrtype matching support 
- * 
- * This program is released under the terms of GNU GPL */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <getopt.h>
-#include <iptables.h>
-
-#include <linux/netfilter_ipv4/ip_tables.h>
-#include <linux/netfilter_ipv4/ipt_addrtype.h>
-
-/* from linux/rtnetlink.h, must match order of enumeration */
-static const char *const rtn_names[] = {
-       "UNSPEC",
-       "UNICAST",
-       "LOCAL",
-       "BROADCAST",
-       "ANYCAST",
-       "MULTICAST",
-       "BLACKHOLE",
-       "UNREACHABLE",
-       "PROHIBIT",
-       "THROW",
-       "NAT",
-       "XRESOLVE",
-       NULL
-};
-
-static void addrtype_help_types(void)
-{
-       int i;
-
-       for (i = 0; rtn_names[i]; i++)
-               printf("                                %s\n", rtn_names[i]);
-}
-
-static void addrtype_help_v0(void)
-{
-       printf(
-"Address type match options:\n"
-" [!] --src-type type[,...]      Match source address type\n"
-" [!] --dst-type type[,...]      Match destination address type\n"
-"\n"
-"Valid types:           \n");
-       addrtype_help_types();
-}
-
-static void addrtype_help_v1(void)
-{
-       printf(
-"Address type match options:\n"
-" [!] --src-type type[,...]      Match source address type\n"
-" [!] --dst-type type[,...]      Match destination address type\n"
-"     --limit-iface-in           Match only on the packet's incoming device\n"
-"     --limit-iface-out          Match only on the packet's incoming device\n"
-"\n"
-"Valid types:           \n");
-       addrtype_help_types();
-}
-
-static int
-parse_type(const char *name, size_t len, u_int16_t *mask)
-{
-       int i;
-
-       for (i = 0; rtn_names[i]; i++)
-               if (strncasecmp(name, rtn_names[i], len) == 0) {
-                       /* build up bitmask for kernel module */
-                       *mask |= (1 << i);
-                       return 1;
-               }
-
-       return 0;
-}
-
-static void parse_types(const char *arg, u_int16_t *mask)
-{
-       const char *comma;
-
-       while ((comma = strchr(arg, ',')) != NULL) {
-               if (comma == arg || !parse_type(arg, comma-arg, mask))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "addrtype: bad type `%s'", arg);
-               arg = comma + 1;
-       }
-
-       if (strlen(arg) == 0 || !parse_type(arg, strlen(arg), mask))
-               exit_error(PARAMETER_PROBLEM, "addrtype: bad type `%s'", arg);
-}
-       
-#define IPT_ADDRTYPE_OPT_SRCTYPE       0x1
-#define IPT_ADDRTYPE_OPT_DSTTYPE       0x2
-#define IPT_ADDRTYPE_OPT_LIMIT_IFACE_IN                0x4
-#define IPT_ADDRTYPE_OPT_LIMIT_IFACE_OUT       0x8
-
-static int
-addrtype_parse_v0(int c, char **argv, int invert, unsigned int *flags,
-                  const void *entry, struct xt_entry_match **match)
-{
-       struct ipt_addrtype_info *info =
-               (struct ipt_addrtype_info *) (*match)->data;
-
-       switch (c) {
-       case '1':
-               if (*flags&IPT_ADDRTYPE_OPT_SRCTYPE)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "addrtype: can't specify src-type twice");
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_types(argv[optind-1], &info->source);
-               if (invert)
-                       info->invert_source = 1;
-               *flags |= IPT_ADDRTYPE_OPT_SRCTYPE;
-               break;
-       case '2':
-               if (*flags&IPT_ADDRTYPE_OPT_DSTTYPE)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "addrtype: can't specify dst-type twice");
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_types(argv[optind-1], &info->dest);
-               if (invert)
-                       info->invert_dest = 1;
-               *flags |= IPT_ADDRTYPE_OPT_DSTTYPE;
-               break;
-       default:
-               return 0;
-       }
-       
-       return 1;
-}
-
-static int
-addrtype_parse_v1(int c, char **argv, int invert, unsigned int *flags,
-                  const void *entry, struct xt_entry_match **match)
-{
-       struct ipt_addrtype_info_v1 *info =
-               (struct ipt_addrtype_info_v1 *) (*match)->data;
-
-       switch (c) {
-       case '1':
-               if (*flags & IPT_ADDRTYPE_OPT_SRCTYPE)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "addrtype: can't specify src-type twice");
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_types(argv[optind-1], &info->source);
-               if (invert)
-                       info->flags |= IPT_ADDRTYPE_INVERT_SOURCE;
-               *flags |= IPT_ADDRTYPE_OPT_SRCTYPE;
-               break;
-       case '2':
-               if (*flags & IPT_ADDRTYPE_OPT_DSTTYPE)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "addrtype: can't specify dst-type twice");
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_types(argv[optind-1], &info->dest);
-               if (invert)
-                       info->flags |= IPT_ADDRTYPE_INVERT_DEST;
-               *flags |= IPT_ADDRTYPE_OPT_DSTTYPE;
-               break;
-       case '3':
-               if (*flags & IPT_ADDRTYPE_OPT_LIMIT_IFACE_IN)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "addrtype: can't specify limit-iface-in twice");
-               info->flags |= IPT_ADDRTYPE_LIMIT_IFACE_IN;
-               *flags |= IPT_ADDRTYPE_OPT_LIMIT_IFACE_IN;
-               break;
-       case '4':
-               if (*flags & IPT_ADDRTYPE_OPT_LIMIT_IFACE_OUT)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "addrtype: can't specify limit-iface-out twice");
-               info->flags |= IPT_ADDRTYPE_LIMIT_IFACE_OUT;
-               *flags |= IPT_ADDRTYPE_OPT_LIMIT_IFACE_OUT;
-               break;
-       default:
-               return 0;
-       }
-       
-       return 1;
-}
-
-static void addrtype_check_v0(unsigned int flags)
-{
-       if (!(flags & (IPT_ADDRTYPE_OPT_SRCTYPE|IPT_ADDRTYPE_OPT_DSTTYPE)))
-               exit_error(PARAMETER_PROBLEM,
-                          "addrtype: you must specify --src-type or --dst-type");
-}
-
-static void addrtype_check_v1(unsigned int flags)
-{
-       if (!(flags & (IPT_ADDRTYPE_OPT_SRCTYPE|IPT_ADDRTYPE_OPT_DSTTYPE)))
-               exit_error(PARAMETER_PROBLEM,
-                          "addrtype: you must specify --src-type or --dst-type");
-       if (flags & IPT_ADDRTYPE_OPT_LIMIT_IFACE_IN &&
-           flags & IPT_ADDRTYPE_OPT_LIMIT_IFACE_OUT)
-               exit_error(PARAMETER_PROBLEM,
-                          "addrtype: you can't specify both --limit-iface-in "
-                          "and --limit-iface-out");
-}
-
-static void print_types(u_int16_t mask)
-{
-       const char *sep = "";
-       int i;
-
-       for (i = 0; rtn_names[i]; i++)
-               if (mask & (1 << i)) {
-                       printf("%s%s", sep, rtn_names[i]);
-                       sep = ",";
-               }
-
-       printf(" ");
-}
-
-static void addrtype_print_v0(const void *ip, const struct xt_entry_match *match,
-                              int numeric)
-{
-       const struct ipt_addrtype_info *info = 
-               (struct ipt_addrtype_info *) match->data;
-
-       printf("ADDRTYPE match ");
-       if (info->source) {
-               printf("src-type ");
-               if (info->invert_source)
-                       printf("!");
-               print_types(info->source);
-       }
-       if (info->dest) {
-               printf("dst-type ");
-               if (info->invert_dest)
-                       printf("!");
-               print_types(info->dest);
-       }
-}
-
-static void addrtype_print_v1(const void *ip, const struct xt_entry_match *match,
-                              int numeric)
-{
-       const struct ipt_addrtype_info_v1 *info = 
-               (struct ipt_addrtype_info_v1 *) match->data;
-
-       printf("ADDRTYPE match ");
-       if (info->source) {
-               printf("src-type ");
-               if (info->flags & IPT_ADDRTYPE_INVERT_SOURCE)
-                       printf("!");
-               print_types(info->source);
-       }
-       if (info->dest) {
-               printf("dst-type ");
-               if (info->flags & IPT_ADDRTYPE_INVERT_DEST)
-                       printf("!");
-               print_types(info->dest);
-       }
-       if (info->flags & IPT_ADDRTYPE_LIMIT_IFACE_IN) {
-               printf("limit-in ");
-       }
-       if (info->flags & IPT_ADDRTYPE_LIMIT_IFACE_OUT) {
-               printf("limit-out ");
-       }
-}
-
-static void addrtype_save_v0(const void *ip, const struct xt_entry_match *match)
-{
-       const struct ipt_addrtype_info *info =
-               (struct ipt_addrtype_info *) match->data;
-
-       if (info->source) {
-               printf("--src-type ");
-               if (info->invert_source)
-                       printf("! ");
-               print_types(info->source);
-       }
-       if (info->dest) {
-               printf("--dst-type ");
-               if (info->invert_dest)
-                       printf("! ");
-               print_types(info->dest);
-       }
-}
-
-static void addrtype_save_v1(const void *ip, const struct xt_entry_match *match)
-{
-       const struct ipt_addrtype_info_v1 *info =
-               (struct ipt_addrtype_info_v1 *) match->data;
-
-       if (info->source) {
-               printf("--src-type ");
-               if (info->flags & IPT_ADDRTYPE_INVERT_SOURCE)
-                       printf("! ");
-               print_types(info->source);
-       }
-       if (info->dest) {
-               printf("--dst-type ");
-               if (info->flags & IPT_ADDRTYPE_INVERT_DEST)
-                       printf("! ");
-               print_types(info->dest);
-       }
-       if (info->flags & IPT_ADDRTYPE_LIMIT_IFACE_IN) {
-               printf("--limit-iface-in ");
-       }
-       if (info->flags & IPT_ADDRTYPE_LIMIT_IFACE_OUT) {
-               printf("--limit-iface-out ");
-       }
-}
-
-static const struct option addrtype_opts[] = {
-       { "src-type", 1, NULL, '1' },
-       { "dst-type", 1, NULL, '2' },
-       { .name = NULL }
-};
-
-static const struct option addrtype_opts_v0[] = {
-       { "src-type", 1, NULL, '1' },
-       { "dst-type", 1, NULL, '2' },
-       { .name = NULL }
-};
-
-static const struct option addrtype_opts_v1[] = {
-       { "src-type", 1, NULL, '1' },
-       { "dst-type", 1, NULL, '2' },
-       { "limit-iface-in", 0, NULL, '3' },
-       { "limit-iface-out", 0, NULL, '4' },
-       { .name = NULL }
-};
-
-static struct xtables_match addrtype_mt_reg_v0 = {
-       .name           = "addrtype",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET,
-       .size           = XT_ALIGN(sizeof(struct ipt_addrtype_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct ipt_addrtype_info)),
-       .help           = addrtype_help_v0,
-       .parse          = addrtype_parse_v0,
-       .final_check    = addrtype_check_v0,
-       .print          = addrtype_print_v0,
-       .save           = addrtype_save_v0,
-       .extra_opts     = addrtype_opts_v0,
-};
-
-static struct xtables_match addrtype_mt_reg_v1 = {
-       .name           = "addrtype",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET,
-       .size           = XT_ALIGN(sizeof(struct ipt_addrtype_info_v1)),
-       .userspacesize  = XT_ALIGN(sizeof(struct ipt_addrtype_info_v1)),
-       .help           = addrtype_help_v1,
-       .parse          = addrtype_parse_v1,
-       .final_check    = addrtype_check_v1,
-       .print          = addrtype_print_v1,
-       .save           = addrtype_save_v1,
-       .extra_opts     = addrtype_opts_v1,
-       .revision       = 1,
-};
-
-
-void _init(void) 
-{
-       xtables_register_match(&addrtype_mt_reg_v0);
-       xtables_register_match(&addrtype_mt_reg_v1);
-}
diff --git a/extensions/libipt_addrtype.man b/extensions/libipt_addrtype.man
deleted file mode 100644 (file)
index 275d999..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-This module matches packets based on their 
-.B address type.
-Address types are used within the kernel networking stack and categorize
-addresses into various groups.  The exact definition of that group depends on the specific layer three protocol.
-.TP
-The following address types are possible:
-.TP
-.BI "UNSPEC"
-an unspecified address (i.e. 0.0.0.0)
-.TP
-.BI "UNICAST"
-an unicast address
-.TP
-.BI "LOCAL"
-a local address
-.TP
-.BI "BROADCAST"
-a broadcast address
-.TP
-.BI "ANYCAST"
-an anycast packet
-.TP
-.BI "MULTICAST"
-a multicast address
-.TP
-.BI "BLACKHOLE"
-a blackhole address
-.TP
-.BI "UNREACHABLE"
-an unreachable address
-.TP
-.BI "PROHIBIT"
-a prohibited address
-.TP
-.BI "THROW"
-FIXME
-.TP
-.BI "NAT"
-FIXME
-.TP
-.BI "XRESOLVE"
-.TP
-[\fB!\fP] \fB--src-type\fP \fItype\fP
-Matches if the source address is of given type
-.TP
-[\fB!\fP] \fB--dst-type\fP \fItype\fP
-Matches if the destination address is of given type
-.TP
-.BI "--limit-iface-in"
-The address type checking can be limited to the interface the packet is coming
-in. This option is only valid in the
-.BR PREROUTING ,
-.B INPUT
-and
-.B FORWARD
-chains. It cannot be specified with the
-.B "--limit-iface-out"
-option.
-.TP
-.BI "--limit-iface-out"
-The address type checiking can be limited to the interface the packet is going
-out. This option is only valid in the
-.BR POSTROUTING ,
-.B OUTPUT
-and
-.B FORWARD
-chains. It cannot be specified with the
-.B --limit-iface-in
-option.
diff --git a/extensions/libipt_ah.c b/extensions/libipt_ah.c
deleted file mode 100644 (file)
index 182b51a..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-/* Shared library add-on to iptables to add AH support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <errno.h>
-#include <iptables.h>
-#include <linux/netfilter_ipv4/ipt_ah.h>
-                                        
-/* Function which prints out usage message. */
-static void ah_help(void)
-{
-       printf(
-"ah match options:\n"
-" --ahspi [!] spi[:spi]\n"
-"                              match spi (range)\n");
-}
-
-static const struct option ah_opts[] = {
-       { "ahspi", 1, NULL, '1' },
-       { .name = NULL }
-};
-
-static u_int32_t
-parse_ah_spi(const char *spistr)
-{
-       unsigned long int spi;
-       char* ep;
-
-       spi =  strtoul(spistr,&ep,0) ;
-
-       if ( spistr == ep ) {
-               exit_error(PARAMETER_PROBLEM,
-                          "AH no valid digits in spi `%s'", spistr);
-       }
-       if ( spi == ULONG_MAX  && errno == ERANGE ) {
-               exit_error(PARAMETER_PROBLEM,
-                          "spi `%s' specified too big: would overflow", spistr);
-       }       
-       if ( *spistr != '\0'  && *ep != '\0' ) {
-               exit_error(PARAMETER_PROBLEM,
-                          "AH error parsing spi `%s'", spistr);
-       }
-       return (u_int32_t) spi;
-}
-
-static void
-parse_ah_spis(const char *spistring, u_int32_t *spis)
-{
-       char *buffer;
-       char *cp;
-
-       buffer = strdup(spistring);
-       if ((cp = strchr(buffer, ':')) == NULL)
-               spis[0] = spis[1] = parse_ah_spi(buffer);
-       else {
-               *cp = '\0';
-               cp++;
-
-               spis[0] = buffer[0] ? parse_ah_spi(buffer) : 0;
-               spis[1] = cp[0] ? parse_ah_spi(cp) : 0xFFFFFFFF;
-       }
-       free(buffer);
-}
-
-/* Initialize the match. */
-static void ah_init(struct xt_entry_match *m)
-{
-       struct ipt_ah *ahinfo = (struct ipt_ah *)m->data;
-
-       ahinfo->spis[1] = 0xFFFFFFFF;
-}
-
-#define AH_SPI 0x01
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int ah_parse(int c, char **argv, int invert, unsigned int *flags,
-                    const void *entry, struct xt_entry_match **match)
-{
-       struct ipt_ah *ahinfo = (struct ipt_ah *)(*match)->data;
-
-       switch (c) {
-       case '1':
-               if (*flags & AH_SPI)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--ahspi' allowed");
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_ah_spis(argv[optind-1], ahinfo->spis);
-               if (invert)
-                       ahinfo->invflags |= IPT_AH_INV_SPI;
-               *flags |= AH_SPI;
-               break;
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static void
-print_spis(const char *name, u_int32_t min, u_int32_t max,
-           int invert)
-{
-       const char *inv = invert ? "!" : "";
-
-       if (min != 0 || max != 0xFFFFFFFF || invert) {
-               printf("%s", name);
-               if (min == max) {
-                       printf(":%s", inv);
-                       printf("%u", min);
-               } else {
-                       printf("s:%s", inv);
-                       printf("%u",min);
-                       printf(":");
-                       printf("%u",max);
-               }
-               printf(" ");
-       }
-}
-
-/* Prints out the union ipt_matchinfo. */
-static void ah_print(const void *ip, const struct xt_entry_match *match,
-                     int numeric)
-{
-       const struct ipt_ah *ah = (struct ipt_ah *)match->data;
-
-       printf("ah ");
-       print_spis("spi", ah->spis[0], ah->spis[1],
-                   ah->invflags & IPT_AH_INV_SPI);
-       if (ah->invflags & ~IPT_AH_INV_MASK)
-               printf("Unknown invflags: 0x%X ",
-                      ah->invflags & ~IPT_AH_INV_MASK);
-}
-
-/* Saves the union ipt_matchinfo in parsable form to stdout. */
-static void ah_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct ipt_ah *ahinfo = (struct ipt_ah *)match->data;
-
-       if (!(ahinfo->spis[0] == 0
-           && ahinfo->spis[1] == 0xFFFFFFFF)) {
-               printf("--ahspi %s", 
-                       (ahinfo->invflags & IPT_AH_INV_SPI) ? "! " : "");
-               if (ahinfo->spis[0]
-                   != ahinfo->spis[1])
-                       printf("%u:%u ",
-                              ahinfo->spis[0],
-                              ahinfo->spis[1]);
-               else
-                       printf("%u ",
-                              ahinfo->spis[0]);
-       }
-
-}
-
-static struct xtables_match ah_mt_reg = {
-       .name           = "ah",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET,
-       .size           = XT_ALIGN(sizeof(struct ipt_ah)),
-       .userspacesize  = XT_ALIGN(sizeof(struct ipt_ah)),
-       .help           = ah_help,
-       .init           = ah_init,
-       .parse          = ah_parse,
-       .print          = ah_print,
-       .save           = ah_save,
-       .extra_opts     = ah_opts,
-};
-
-void
-_init(void)
-{
-       xtables_register_match(&ah_mt_reg);
-}
diff --git a/extensions/libipt_ah.man b/extensions/libipt_ah.man
deleted file mode 100644 (file)
index 3076554..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-This module matches the SPIs in Authentication header of IPsec packets.
-.TP
-[\fB!\fP] \fB--ahspi\fP \fIspi\fP[\fB:\fP\fIspi\fP]
diff --git a/extensions/libipt_ecn.c b/extensions/libipt_ecn.c
deleted file mode 100644 (file)
index 0621453..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-/* Shared library add-on to iptables for ECN matching
- *
- * (C) 2002 by Harald Welte <laforge@gnumonks.org>
- *
- * This program is distributed under the terms of GNU GPL v2, 1991
- *
- * libipt_ecn.c borrowed heavily from libipt_dscp.c
- *
- */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-
-#include <iptables.h>
-#include <linux/netfilter_ipv4/ip_tables.h>
-#include <linux/netfilter_ipv4/ipt_ecn.h>
-
-static void ecn_help(void)
-{
-       printf(
-"ECN match options\n"
-"[!] --ecn-tcp-cwr             Match CWR bit of TCP header\n"
-"[!] --ecn-tcp-ece             Match ECE bit of TCP header\n"
-"[!] --ecn-ip-ect [0..3]       Match ECN codepoint in IPv4 header\n");
-}
-
-static const struct option ecn_opts[] = {
-       { .name = "ecn-tcp-cwr", .has_arg = 0, .val = 'F' },
-       { .name = "ecn-tcp-ece", .has_arg = 0, .val = 'G' },
-       { .name = "ecn-ip-ect",  .has_arg = 1, .val = 'H' },
-       { .name = NULL }
-};
-
-static int ecn_parse(int c, char **argv, int invert, unsigned int *flags,
-                     const void *entry, struct xt_entry_match **match)
-{
-       unsigned int result;
-       struct ipt_ecn_info *einfo
-               = (struct ipt_ecn_info *)(*match)->data;
-
-       switch (c) {
-       case 'F':
-               if (*flags & IPT_ECN_OP_MATCH_CWR)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "ECN match: can only use parameter ONCE!");
-               check_inverse(optarg, &invert, &optind, 0);
-               einfo->operation |= IPT_ECN_OP_MATCH_CWR;
-               if (invert)
-                       einfo->invert |= IPT_ECN_OP_MATCH_CWR;
-               *flags |= IPT_ECN_OP_MATCH_CWR;
-               break;
-
-       case 'G':
-               if (*flags & IPT_ECN_OP_MATCH_ECE)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "ECN match: can only use parameter ONCE!");
-               check_inverse(optarg, &invert, &optind, 0);
-               einfo->operation |= IPT_ECN_OP_MATCH_ECE;
-               if (invert)
-                       einfo->invert |= IPT_ECN_OP_MATCH_ECE;
-               *flags |= IPT_ECN_OP_MATCH_ECE;
-               break;
-
-       case 'H':
-               if (*flags & IPT_ECN_OP_MATCH_IP)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "ECN match: can only use parameter ONCE!");
-               check_inverse(optarg, &invert, &optind, 0);
-               if (invert)
-                       einfo->invert |= IPT_ECN_OP_MATCH_IP;
-               *flags |= IPT_ECN_OP_MATCH_IP;
-               einfo->operation |= IPT_ECN_OP_MATCH_IP;
-               if (string_to_number(optarg, 0, 3, &result))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "ECN match: Value out of range");
-               einfo->ip_ect = result;
-               break;
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static void ecn_check(unsigned int flags)
-{
-       if (!flags)
-               exit_error(PARAMETER_PROBLEM,
-                          "ECN match: some option required");
-}
-
-/* Prints out the matchinfo. */
-static void ecn_print(const void *ip, const struct xt_entry_match *match,
-                      int numeric)
-{
-       const struct ipt_ecn_info *einfo =
-               (const struct ipt_ecn_info *)match->data;
-
-       printf("ECN match ");
-
-       if (einfo->operation & IPT_ECN_OP_MATCH_ECE) {
-               if (einfo->invert & IPT_ECN_OP_MATCH_ECE)
-                       fputc('!', stdout);
-               printf("ECE ");
-       }
-
-       if (einfo->operation & IPT_ECN_OP_MATCH_CWR) {
-               if (einfo->invert & IPT_ECN_OP_MATCH_CWR)
-                       fputc('!', stdout);
-               printf("CWR ");
-       }
-
-       if (einfo->operation & IPT_ECN_OP_MATCH_IP) {
-               if (einfo->invert & IPT_ECN_OP_MATCH_IP)
-                       fputc('!', stdout);
-               printf("ECT=%d ", einfo->ip_ect);
-       }
-}
-
-/* Saves the union ipt_matchinfo in parsable form to stdout. */
-static void ecn_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct ipt_ecn_info *einfo =
-               (const struct ipt_ecn_info *)match->data;
-       
-       if (einfo->operation & IPT_ECN_OP_MATCH_ECE) {
-               if (einfo->invert & IPT_ECN_OP_MATCH_ECE)
-                       printf("! ");
-               printf("--ecn-tcp-ece ");
-       }
-
-       if (einfo->operation & IPT_ECN_OP_MATCH_CWR) {
-               if (einfo->invert & IPT_ECN_OP_MATCH_CWR)
-                       printf("! ");
-               printf("--ecn-tcp-cwr ");
-       }
-
-       if (einfo->operation & IPT_ECN_OP_MATCH_IP) {
-               if (einfo->invert & IPT_ECN_OP_MATCH_IP)
-                       printf("! ");
-               printf("--ecn-ip-ect %d", einfo->ip_ect);
-       }
-}
-
-static struct xtables_match ecn_mt_reg = {
-    .name          = "ecn",
-    .version       = XTABLES_VERSION,
-    .family        = PF_INET,
-    .size          = XT_ALIGN(sizeof(struct ipt_ecn_info)),
-    .userspacesize = XT_ALIGN(sizeof(struct ipt_ecn_info)),
-    .help          = ecn_help,
-    .parse         = ecn_parse,
-    .final_check   = ecn_check,
-    .print         = ecn_print,
-    .save          = ecn_save,
-    .extra_opts    = ecn_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&ecn_mt_reg);
-}
diff --git a/extensions/libipt_ecn.man b/extensions/libipt_ecn.man
deleted file mode 100644 (file)
index d289d08..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-This allows you to match the ECN bits of the IPv4 and TCP header.  ECN is the Explicit Congestion Notification mechanism as specified in RFC3168
-.TP
-[\fB!\fP] \fB--ecn-tcp-cwr\fP
-This matches if the TCP ECN CWR (Congestion Window Received) bit is set.
-.TP
-[\fB!\fP] \fB--ecn-tcp-ece\fP
-This matches if the TCP ECN ECE (ECN Echo) bit is set.
-.TP
-[\fB!\fP] \fB--ecn-ip-ect\fP \fInum\fP
-This matches a particular IPv4 ECT (ECN-Capable Transport). You have to specify
-a number between `0' and `3'.
diff --git a/extensions/libipt_icmp.c b/extensions/libipt_icmp.c
deleted file mode 100644 (file)
index 4361f13..0000000
+++ /dev/null
@@ -1,293 +0,0 @@
-/* Shared library add-on to iptables to add ICMP support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <iptables.h>
-#include <linux/netfilter_ipv4/ip_tables.h>
-
-/* special hack for icmp-type 'any': 
- * Up to kernel <=2.4.20 the problem was:
- * '-p icmp ' matches all icmp packets
- * '-p icmp -m icmp' matches _only_ ICMP type 0 :(
- * This is now fixed by initializing the field * to icmp type 0xFF
- * See: https://bugzilla.netfilter.org/cgi-bin/bugzilla/show_bug.cgi?id=37
- */
-
-struct icmp_names {
-       const char *name;
-       u_int8_t type;
-       u_int8_t code_min, code_max;
-};
-
-static const struct icmp_names icmp_codes[] = {
-       { "any", 0xFF, 0, 0xFF },
-       { "echo-reply", 0, 0, 0xFF },
-       /* Alias */ { "pong", 0, 0, 0xFF },
-
-       { "destination-unreachable", 3, 0, 0xFF },
-       {   "network-unreachable", 3, 0, 0 },
-       {   "host-unreachable", 3, 1, 1 },
-       {   "protocol-unreachable", 3, 2, 2 },
-       {   "port-unreachable", 3, 3, 3 },
-       {   "fragmentation-needed", 3, 4, 4 },
-       {   "source-route-failed", 3, 5, 5 },
-       {   "network-unknown", 3, 6, 6 },
-       {   "host-unknown", 3, 7, 7 },
-       {   "network-prohibited", 3, 9, 9 },
-       {   "host-prohibited", 3, 10, 10 },
-       {   "TOS-network-unreachable", 3, 11, 11 },
-       {   "TOS-host-unreachable", 3, 12, 12 },
-       {   "communication-prohibited", 3, 13, 13 },
-       {   "host-precedence-violation", 3, 14, 14 },
-       {   "precedence-cutoff", 3, 15, 15 },
-
-       { "source-quench", 4, 0, 0xFF },
-
-       { "redirect", 5, 0, 0xFF },
-       {   "network-redirect", 5, 0, 0 },
-       {   "host-redirect", 5, 1, 1 },
-       {   "TOS-network-redirect", 5, 2, 2 },
-       {   "TOS-host-redirect", 5, 3, 3 },
-
-       { "echo-request", 8, 0, 0xFF },
-       /* Alias */ { "ping", 8, 0, 0xFF },
-
-       { "router-advertisement", 9, 0, 0xFF },
-
-       { "router-solicitation", 10, 0, 0xFF },
-
-       { "time-exceeded", 11, 0, 0xFF },
-       /* Alias */ { "ttl-exceeded", 11, 0, 0xFF },
-       {   "ttl-zero-during-transit", 11, 0, 0 },
-       {   "ttl-zero-during-reassembly", 11, 1, 1 },
-
-       { "parameter-problem", 12, 0, 0xFF },
-       {   "ip-header-bad", 12, 0, 0 },
-       {   "required-option-missing", 12, 1, 1 },
-
-       { "timestamp-request", 13, 0, 0xFF },
-
-       { "timestamp-reply", 14, 0, 0xFF },
-
-       { "address-mask-request", 17, 0, 0xFF },
-
-       { "address-mask-reply", 18, 0, 0xFF }
-};
-
-static void
-print_icmptypes(void)
-{
-       unsigned int i;
-       printf("Valid ICMP Types:");
-
-       for (i = 0; i < sizeof(icmp_codes)/sizeof(struct icmp_names); i++) {
-               if (i && icmp_codes[i].type == icmp_codes[i-1].type) {
-                       if (icmp_codes[i].code_min == icmp_codes[i-1].code_min
-                           && (icmp_codes[i].code_max
-                               == icmp_codes[i-1].code_max))
-                               printf(" (%s)", icmp_codes[i].name);
-                       else
-                               printf("\n   %s", icmp_codes[i].name);
-               }
-               else
-                       printf("\n%s", icmp_codes[i].name);
-       }
-       printf("\n");
-}
-
-/* Function which prints out usage message. */
-static void icmp_help(void)
-{
-       printf(
-"icmp match options:\n"
-" --icmp-type [!] typename     match icmp type\n"
-"                              (or numeric type or type/code)\n");
-       print_icmptypes();
-}
-
-static const struct option icmp_opts[] = {
-       { "icmp-type", 1, NULL, '1' },
-       { .name = NULL }
-};
-
-static void 
-parse_icmp(const char *icmptype, u_int8_t *type, u_int8_t code[])
-{
-       unsigned int limit = sizeof(icmp_codes)/sizeof(struct icmp_names);
-       unsigned int match = limit;
-       unsigned int i;
-
-       for (i = 0; i < limit; i++) {
-               if (strncasecmp(icmp_codes[i].name, icmptype, strlen(icmptype))
-                   == 0) {
-                       if (match != limit)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "Ambiguous ICMP type `%s':"
-                                          " `%s' or `%s'?",
-                                          icmptype,
-                                          icmp_codes[match].name,
-                                          icmp_codes[i].name);
-                       match = i;
-               }
-       }
-
-       if (match != limit) {
-               *type = icmp_codes[match].type;
-               code[0] = icmp_codes[match].code_min;
-               code[1] = icmp_codes[match].code_max;
-       } else {
-               char *slash;
-               char buffer[strlen(icmptype) + 1];
-               unsigned int number;
-
-               strcpy(buffer, icmptype);
-               slash = strchr(buffer, '/');
-
-               if (slash)
-                       *slash = '\0';
-
-               if (string_to_number(buffer, 0, 255, &number) == -1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Invalid ICMP type `%s'\n", buffer);
-               *type = number;
-               if (slash) {
-                       if (string_to_number(slash+1, 0, 255, &number) == -1)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "Invalid ICMP code `%s'\n",
-                                          slash+1);
-                       code[0] = code[1] = number;
-               } else {
-                       code[0] = 0;
-                       code[1] = 0xFF;
-               }
-       }
-}
-
-/* Initialize the match. */
-static void icmp_init(struct xt_entry_match *m)
-{
-       struct ipt_icmp *icmpinfo = (struct ipt_icmp *)m->data;
-
-       icmpinfo->type = 0xFF;
-       icmpinfo->code[1] = 0xFF;
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int icmp_parse(int c, char **argv, int invert, unsigned int *flags,
-                      const void *entry, struct xt_entry_match **match)
-{
-       struct ipt_icmp *icmpinfo = (struct ipt_icmp *)(*match)->data;
-
-       switch (c) {
-       case '1':
-               if (*flags == 1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "icmp match: only use --icmp-type once!");
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_icmp(argv[optind-1], &icmpinfo->type, 
-                          icmpinfo->code);
-               if (invert)
-                       icmpinfo->invflags |= IPT_ICMP_INV;
-               *flags = 1;
-               break;
-
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static void print_icmptype(u_int8_t type,
-                          u_int8_t code_min, u_int8_t code_max,
-                          int invert,
-                          int numeric)
-{
-       if (!numeric) {
-               unsigned int i;
-
-               for (i = 0;
-                    i < sizeof(icmp_codes)/sizeof(struct icmp_names);
-                    i++) {
-                       if (icmp_codes[i].type == type
-                           && icmp_codes[i].code_min == code_min
-                           && icmp_codes[i].code_max == code_max)
-                               break;
-               }
-
-               if (i != sizeof(icmp_codes)/sizeof(struct icmp_names)) {
-                       printf("%s%s ",
-                              invert ? "!" : "",
-                              icmp_codes[i].name);
-                       return;
-               }
-       }
-
-       if (invert)
-               printf("!");
-
-       printf("type %u", type);
-       if (code_min == 0 && code_max == 0xFF)
-               printf(" ");
-       else if (code_min == code_max)
-               printf(" code %u ", code_min);
-       else
-               printf(" codes %u-%u ", code_min, code_max);
-}
-
-/* Prints out the union ipt_matchinfo. */
-static void icmp_print(const void *ip, const struct xt_entry_match *match,
-                       int numeric)
-{
-       const struct ipt_icmp *icmp = (struct ipt_icmp *)match->data;
-
-       printf("icmp ");
-       print_icmptype(icmp->type, icmp->code[0], icmp->code[1],
-                      icmp->invflags & IPT_ICMP_INV,
-                      numeric);
-
-       if (icmp->invflags & ~IPT_ICMP_INV)
-               printf("Unknown invflags: 0x%X ",
-                      icmp->invflags & ~IPT_ICMP_INV);
-}
-
-/* Saves the match in parsable form to stdout. */
-static void icmp_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct ipt_icmp *icmp = (struct ipt_icmp *)match->data;
-
-       if (icmp->invflags & IPT_ICMP_INV)
-               printf("! ");
-
-       /* special hack for 'any' case */
-       if (icmp->type == 0xFF) {
-               printf("--icmp-type any ");
-       } else {
-               printf("--icmp-type %u", icmp->type);
-               if (icmp->code[0] != 0 || icmp->code[1] != 0xFF)
-                       printf("/%u", icmp->code[0]);
-               printf(" ");
-       }
-}
-
-static struct xtables_match icmp_mt_reg = {
-       .name           = "icmp",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET,
-       .size           = XT_ALIGN(sizeof(struct ipt_icmp)),
-       .userspacesize  = XT_ALIGN(sizeof(struct ipt_icmp)),
-       .help           = icmp_help,
-       .init           = icmp_init,
-       .parse          = icmp_parse,
-       .print          = icmp_print,
-       .save           = icmp_save,
-       .extra_opts     = icmp_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&icmp_mt_reg);
-}
diff --git a/extensions/libipt_icmp.man b/extensions/libipt_icmp.man
deleted file mode 100644 (file)
index a912769..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-This extension can be used if `--protocol icmp' is specified.  It
-provides the following option:
-.TP
-[\fB!\fP] \fB--icmp-type\fP \fItypename\fP
-This allows specification of the ICMP type, which can be a numeric
-ICMP type, or one of the ICMP type names shown by the command
-.nf
- iptables -p icmp -h
-.fi
diff --git a/extensions/libipt_policy.c b/extensions/libipt_policy.c
deleted file mode 100644 (file)
index 71e95dd..0000000
+++ /dev/null
@@ -1,427 +0,0 @@
-/* Shared library add-on to iptables to add policy support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <syslog.h>
-#include <getopt.h>
-#include <netdb.h>
-#include <errno.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <iptables.h>
-
-#include <linux/netfilter_ipv4/ip_tables.h>
-#include "../include/linux/netfilter_ipv4/ipt_policy.h"
-
-/*
- * HACK: global pointer to current matchinfo for making
- * final checks and adjustments in final_check.
- */
-static struct ipt_policy_info *policy_info;
-
-static void policy_help(void)
-{
-       printf(
-"policy match options:\n"
-"  --dir in|out                        match policy applied during decapsulation/\n"
-"                              policy to be applied during encapsulation\n"
-"  --pol none|ipsec            match policy\n"
-"  --strict                    match entire policy instead of single element\n"
-"                              at any position\n"
-"[!] --reqid reqid             match reqid\n"
-"[!] --spi spi                 match SPI\n"
-"[!] --proto proto             match protocol (ah/esp/ipcomp)\n"
-"[!] --mode mode               match mode (transport/tunnel)\n"
-"[!] --tunnel-src addr/mask    match tunnel source\n"
-"[!] --tunnel-dst addr/mask    match tunnel destination\n"
-"  --next                      begin next element in policy\n");
-}
-
-static const struct option policy_opts[] =
-{
-       {
-               .name           = "dir",
-               .has_arg        = 1,
-               .val            = '1',
-       },
-       {
-               .name           = "pol",
-               .has_arg        = 1,
-               .val            = '2',
-       },
-       {
-               .name           = "strict",
-               .val            = '3'
-       },
-       {
-               .name           = "reqid",
-               .has_arg        = 1,
-               .val            = '4',
-       },
-       {
-               .name           = "spi",
-               .has_arg        = 1,
-               .val            = '5'
-       },
-       {
-               .name           = "tunnel-src",
-               .has_arg        = 1,
-               .val            = '6'
-       },
-       {
-               .name           = "tunnel-dst",
-               .has_arg        = 1,
-               .val            = '7'
-       },
-       {
-               .name           = "proto",
-               .has_arg        = 1,
-               .val            = '8'
-       },
-       {
-               .name           = "mode",
-               .has_arg        = 1,
-               .val            = '9'
-       },
-       {
-               .name           = "next",
-               .val            = 'a'
-       },
-       { .name = NULL }
-};
-
-static int parse_direction(char *s)
-{
-       if (strcmp(s, "in") == 0)
-               return IPT_POLICY_MATCH_IN;
-       if (strcmp(s, "out") == 0)
-               return IPT_POLICY_MATCH_OUT;
-       exit_error(PARAMETER_PROBLEM, "policy_match: invalid dir `%s'", s);
-}
-
-static int parse_policy(char *s)
-{
-       if (strcmp(s, "none") == 0)
-               return IPT_POLICY_MATCH_NONE;
-       if (strcmp(s, "ipsec") == 0)
-               return 0;
-       exit_error(PARAMETER_PROBLEM, "policy match: invalid policy `%s'", s);
-}
-
-static int parse_mode(char *s)
-{
-       if (strcmp(s, "transport") == 0)
-               return IPT_POLICY_MODE_TRANSPORT;
-       if (strcmp(s, "tunnel") == 0)
-               return IPT_POLICY_MODE_TUNNEL;
-       exit_error(PARAMETER_PROBLEM, "policy match: invalid mode `%s'", s);
-}
-
-static int policy_parse(int c, char **argv, int invert, unsigned int *flags,
-                        const void *entry, struct xt_entry_match **match)
-{
-       struct ipt_policy_info *info = (void *)(*match)->data;
-       struct ipt_policy_elem *e = &info->pol[info->len];
-       struct in_addr *addr = NULL, mask;
-       unsigned int naddr = 0;
-       int mode;
-
-       check_inverse(optarg, &invert, &optind, 0);
-
-       switch (c) {
-       case '1':
-               if (info->flags & (IPT_POLICY_MATCH_IN|IPT_POLICY_MATCH_OUT))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: double --dir option");
-               if (invert)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: can't invert --dir option");
-
-               info->flags |= parse_direction(argv[optind-1]);
-               break;
-       case '2':
-               if (invert)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: can't invert --policy option");
-
-               info->flags |= parse_policy(argv[optind-1]);
-               break;
-       case '3':
-               if (info->flags & IPT_POLICY_MATCH_STRICT)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: double --strict option");
-
-               if (invert)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: can't invert --strict option");
-
-               info->flags |= IPT_POLICY_MATCH_STRICT;
-               break;
-       case '4':
-               if (e->match.reqid)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: double --reqid option");
-
-               e->match.reqid = 1;
-               e->invert.reqid = invert;
-               e->reqid = strtol(argv[optind-1], NULL, 10);
-               break;
-       case '5':
-               if (e->match.spi)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: double --spi option");
-
-               e->match.spi = 1;
-               e->invert.spi = invert;
-               e->spi = strtol(argv[optind-1], NULL, 0x10);
-               break;
-       case '6':
-               if (e->match.saddr)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: double --tunnel-src option");
-
-               ipparse_hostnetworkmask(argv[optind-1], &addr, &mask, &naddr);
-               if (naddr > 1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: name resolves to multiple IPs");
-
-               e->match.saddr = 1;
-               e->invert.saddr = invert;
-               e->saddr.a4 = addr[0];
-               e->smask.a4 = mask;
-                break;
-       case '7':
-               if (e->match.daddr)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: double --tunnel-dst option");
-
-               ipparse_hostnetworkmask(argv[optind-1], &addr, &mask, &naddr);
-               if (naddr > 1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: name resolves to multiple IPs");
-
-               e->match.daddr = 1;
-               e->invert.daddr = invert;
-               e->daddr.a4 = addr[0];
-               e->dmask.a4 = mask;
-               break;
-       case '8':
-               if (e->match.proto)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: double --proto option");
-
-               e->proto = parse_protocol(argv[optind-1]);
-               if (e->proto != IPPROTO_AH && e->proto != IPPROTO_ESP &&
-                   e->proto != IPPROTO_COMP)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: protocol must ah/esp/ipcomp");
-               e->match.proto = 1;
-               e->invert.proto = invert;
-               break;
-       case '9':
-               if (e->match.mode)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: double --mode option");
-
-               mode = parse_mode(argv[optind-1]);
-               e->match.mode = 1;
-               e->invert.mode = invert;
-               e->mode = mode;
-               break;
-       case 'a':
-               if (invert)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: can't invert --next option");
-
-               if (++info->len == IPT_POLICY_MAX_ELEM)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: maximum policy depth reached");
-               break;
-       default:
-               return 0;
-       }
-
-       policy_info = info;
-       return 1;
-}
-
-static void policy_check(unsigned int flags)
-{
-       struct ipt_policy_info *info = policy_info;
-       struct ipt_policy_elem *e;
-       int i;
-
-       if (info == NULL)
-               exit_error(PARAMETER_PROBLEM,
-                          "policy match: no parameters given");
-
-       if (!(info->flags & (IPT_POLICY_MATCH_IN|IPT_POLICY_MATCH_OUT)))
-               exit_error(PARAMETER_PROBLEM,
-                          "policy match: neither --in nor --out specified");
-
-       if (info->flags & IPT_POLICY_MATCH_NONE) {
-               if (info->flags & IPT_POLICY_MATCH_STRICT)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: policy none but --strict given");
-
-               if (info->len != 0)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: policy none but policy given");
-       } else
-               info->len++;    /* increase len by 1, no --next after last element */
-
-       if (!(info->flags & IPT_POLICY_MATCH_STRICT) && info->len > 1)
-               exit_error(PARAMETER_PROBLEM,
-                          "policy match: multiple elements but no --strict");
-
-       for (i = 0; i < info->len; i++) {
-               e = &info->pol[i];
-
-               if (info->flags & IPT_POLICY_MATCH_STRICT &&
-                   !(e->match.reqid || e->match.spi || e->match.saddr ||
-                     e->match.daddr || e->match.proto || e->match.mode))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: empty policy element");
-
-               if ((e->match.saddr || e->match.daddr)
-                   && ((e->mode == IPT_POLICY_MODE_TUNNEL && e->invert.mode) ||
-                       (e->mode == IPT_POLICY_MODE_TRANSPORT && !e->invert.mode)))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "policy match: --tunnel-src/--tunnel-dst "
-                                  "is only valid in tunnel mode");
-       }
-}
-
-static void print_mode(char *prefix, u_int8_t mode, int numeric)
-{
-       printf("%smode ", prefix);
-
-       switch (mode) {
-       case IPT_POLICY_MODE_TRANSPORT:
-               printf("transport ");
-               break;
-       case IPT_POLICY_MODE_TUNNEL:
-               printf("tunnel ");
-               break;
-       default:
-               printf("??? ");
-               break;
-       }
-}
-
-static void print_proto(char *prefix, u_int8_t proto, int numeric)
-{
-       struct protoent *p = NULL;
-
-       printf("%sproto ", prefix);
-       if (!numeric)
-               p = getprotobynumber(proto);
-       if (p != NULL)
-               printf("%s ", p->p_name);
-       else
-               printf("%u ", proto);
-}
-
-#define PRINT_INVERT(x)                \
-do {                           \
-       if (x)                  \
-               printf("! ");   \
-} while(0)
-
-static void print_entry(char *prefix, const struct ipt_policy_elem *e,
-                        int numeric)
-{
-       if (e->match.reqid) {
-               PRINT_INVERT(e->invert.reqid);
-               printf("%sreqid %u ", prefix, e->reqid);
-       }
-       if (e->match.spi) {
-               PRINT_INVERT(e->invert.spi);
-               printf("%sspi 0x%x ", prefix, e->spi);
-       }
-       if (e->match.proto) {
-               PRINT_INVERT(e->invert.proto);
-               print_proto(prefix, e->proto, numeric);
-       }
-       if (e->match.mode) {
-               PRINT_INVERT(e->invert.mode);
-               print_mode(prefix, e->mode, numeric);
-       }
-       if (e->match.daddr) {
-               PRINT_INVERT(e->invert.daddr);
-               printf("%stunnel-dst %s%s ", prefix,
-                      ipaddr_to_numeric((const void *)&e->daddr),
-                      ipmask_to_numeric((const void *)&e->dmask));
-       }
-       if (e->match.saddr) {
-               PRINT_INVERT(e->invert.saddr);
-               printf("%stunnel-src %s%s ", prefix,
-                      ipaddr_to_numeric((const void *)&e->saddr),
-                      ipmask_to_numeric((const void *)&e->smask));
-       }
-}
-
-static void print_flags(char *prefix, const struct ipt_policy_info *info)
-{
-       if (info->flags & IPT_POLICY_MATCH_IN)
-               printf("%sdir in ", prefix);
-       else
-               printf("%sdir out ", prefix);
-
-       if (info->flags & IPT_POLICY_MATCH_NONE)
-               printf("%spol none ", prefix);
-       else
-               printf("%spol ipsec ", prefix);
-
-       if (info->flags & IPT_POLICY_MATCH_STRICT)
-               printf("%sstrict ", prefix);
-}
-
-static void policy_print(const void *ip, const struct xt_entry_match *match,
-                         int numeric)
-{
-       const struct ipt_policy_info *info = (void *)match->data;
-       unsigned int i;
-
-       printf("policy match ");
-       print_flags("", info);
-       for (i = 0; i < info->len; i++) {
-               if (info->len > 1)
-                       printf("[%u] ", i);
-               print_entry("", &info->pol[i], numeric);
-       }
-}
-
-static void policy_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct ipt_policy_info *info = (void *)match->data;
-       unsigned int i;
-
-       print_flags("--", info);
-       for (i = 0; i < info->len; i++) {
-               print_entry("--", &info->pol[i], 0);
-               if (i + 1 < info->len)
-                       printf("--next ");
-       }
-}
-
-static struct xtables_match policy_mt_reg = {
-       .name           = "policy",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET,
-       .size           = XT_ALIGN(sizeof(struct ipt_policy_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct ipt_policy_info)),
-       .help           = policy_help,
-       .parse          = policy_parse,
-       .final_check    = policy_check,
-       .print          = policy_print,
-       .save           = policy_save,
-       .extra_opts     = policy_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&policy_mt_reg);
-}
diff --git a/extensions/libipt_realm.c b/extensions/libipt_realm.c
deleted file mode 100644 (file)
index 7fdc293..0000000
+++ /dev/null
@@ -1,264 +0,0 @@
-/* Shared library add-on to iptables to add realm matching support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <ctype.h>
-#include <getopt.h>
-#if defined(__GLIBC__) && __GLIBC__ == 2
-#include <net/ethernet.h>
-#else
-#include <linux/if_ether.h>
-#endif
-#include <iptables.h>
-#include <linux/netfilter_ipv4/ipt_realm.h>
-
-/* Function which prints out usage message. */
-static void realm_help(void)
-{
-       printf(
-"realm match options:\n"
-" --realm [!] value[/mask]\n"
-"                              Match realm\n");
-}
-
-static const struct option realm_opts[] = {
-       { "realm", 1, NULL, '1' },
-       { .name = NULL }
-};
-
-struct realmname { 
-       int     id;
-       char*   name;
-       int     len;
-       struct realmname* next;
-};
-
-/* array of realms from /etc/iproute2/rt_realms */
-static struct realmname *realms = NULL;
-/* 1 if loading failed */
-static int rdberr = 0;
-
-
-static void load_realms(void)
-{
-       const char* rfnm = "/etc/iproute2/rt_realms";
-       char buf[512];
-       FILE *fil;
-       char *cur, *nxt;
-       int id;
-       struct realmname *oldnm = NULL, *newnm = NULL;
-
-       fil = fopen(rfnm, "r");
-       if (!fil) {
-               rdberr = 1;
-               return;
-       }
-
-       while (fgets(buf, sizeof(buf), fil)) {
-               cur = buf;
-               while ((*cur == ' ') || (*cur == '\t'))
-                       cur++;
-               if ((*cur == '#') || (*cur == '\n') || (*cur == 0))
-                       continue;
-
-               /* iproute2 allows hex and dec format */
-               errno = 0;
-               id = strtoul(cur, &nxt, strncmp(cur, "0x", 2) ? 10 : 16);
-               if ((nxt == cur) || errno)
-                       continue;
-
-               /* same boundaries as in iproute2 */
-               if (id < 0 || id > 255)
-                       continue;
-               cur = nxt;
-
-               if (!isspace(*cur))
-                       continue;
-               while ((*cur == ' ') || (*cur == '\t'))
-                       cur++;
-               if ((*cur == '#') || (*cur == '\n') || (*cur == 0))
-                       continue;
-               nxt = cur;
-               while ((*nxt != 0) && !isspace(*nxt))
-                       nxt++;
-               if (nxt == cur)
-                       continue;
-
-               /* found valid data */
-               newnm = (struct realmname*)malloc(sizeof(struct realmname));
-               if (newnm == NULL) {
-                       perror("libipt_realm: malloc failed");
-                       exit(1);
-               }
-               newnm->id = id;
-               newnm->len = nxt - cur;
-               newnm->name = (char*)malloc(newnm->len + 1);
-               if (newnm->name == NULL) {
-                       perror("libipt_realm: malloc failed");
-                       exit(1);
-               }
-               strncpy(newnm->name, cur, newnm->len);
-               newnm->name[newnm->len] = 0;
-               newnm->next = NULL;
-
-               if (oldnm)
-                       oldnm->next = newnm;
-               else
-                       realms = newnm;
-               oldnm = newnm;
-       }
-
-       fclose(fil);
-}
-
-/* get realm id for name, -1 if error/not found */
-static int realm_name2id(const char* name)
-{
-       struct realmname* cur;
-
-       if ((realms == NULL) && (rdberr == 0))
-               load_realms();
-       cur = realms;
-       if (cur == NULL)
-               return -1;
-       while (cur) {
-               if (!strncmp(name, cur->name, cur->len + 1))
-                       return cur->id;
-               cur = cur->next;
-       }
-       return -1;
-}
-
-/* get realm name for id, NULL if error/not found */
-static const char *realm_id2name(int id)
-{
-       struct realmname* cur;
-
-       if ((realms == NULL) && (rdberr == 0))
-               load_realms();
-       cur = realms;
-       if (cur == NULL)
-               return NULL;
-       while (cur) {
-               if (id == cur->id)
-                       return cur->name;
-               cur = cur->next;
-       }
-       return NULL;
-}
-
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int realm_parse(int c, char **argv, int invert, unsigned int *flags,
-                       const void *entry, struct xt_entry_match **match)
-{
-       struct ipt_realm_info *realminfo = (struct ipt_realm_info *)(*match)->data;
-       int id;
-
-       switch (c) {
-               char *end;
-       case '1':
-               check_inverse(argv[optind-1], &invert, &optind, 0);
-               end = optarg = argv[optind-1];
-               realminfo->id = strtoul(optarg, &end, 0);
-               if (end != optarg && (*end == '/' || *end == '\0')) {
-                       if (*end == '/')
-                               realminfo->mask = strtoul(end+1, &end, 0);
-                       else
-                               realminfo->mask = 0xffffffff;
-                       if (*end != '\0' || end == optarg)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "Bad realm value `%s'", optarg);
-               } else {
-                       id = realm_name2id(optarg);
-                       if (id == -1)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "Realm `%s' not found", optarg);
-                       realminfo->id = (u_int32_t)id;
-                       realminfo->mask = 0xffffffff;
-               }
-               if (invert)
-                       realminfo->invert = 1;
-               *flags = 1;
-               break;
-
-       default:
-               return 0;
-       }
-       return 1;
-}
-
-static void
-print_realm(unsigned long id, unsigned long mask, int numeric)
-{
-       const char* name = NULL;
-
-       if (mask != 0xffffffff)
-               printf("0x%lx/0x%lx ", id, mask);
-       else {
-               if (numeric == 0)
-                       name = realm_id2name(id);
-               if (name)
-                       printf("%s ", name);
-               else
-                       printf("0x%lx ", id);
-       }
-}
-
-/* Prints out the matchinfo. */
-static void realm_print(const void *ip, const struct xt_entry_match *match,
-                        int numeric)
-{
-       struct ipt_realm_info *ri = (struct ipt_realm_info *) match->data;
-
-       if (ri->invert)
-               printf("! ");
-
-       printf("realm ");
-       print_realm(ri->id, ri->mask, numeric);
-}
-
-
-/* Saves the union ipt_matchinfo in parsable form to stdout. */
-static void realm_save(const void *ip, const struct xt_entry_match *match)
-{
-       struct ipt_realm_info *ri = (struct ipt_realm_info *) match->data;
-
-       if (ri->invert)
-               printf("! ");
-
-       printf("--realm ");
-       print_realm(ri->id, ri->mask, 0);
-}
-
-/* Final check; must have specified --mark. */
-static void realm_check(unsigned int flags)
-{
-       if (!flags)
-               exit_error(PARAMETER_PROBLEM,
-                          "realm match: You must specify `--realm'");
-}
-
-static struct xtables_match realm_mt_reg = {
-       .name           = "realm",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET,
-       .size           = XT_ALIGN(sizeof(struct ipt_realm_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct ipt_realm_info)),
-       .help           = realm_help,
-       .parse          = realm_parse,
-       .final_check    = realm_check,
-       .print          = realm_print,
-       .save           = realm_save,
-       .extra_opts     = realm_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&realm_mt_reg);
-}
-
-
diff --git a/extensions/libipt_realm.man b/extensions/libipt_realm.man
deleted file mode 100644 (file)
index 362ab60..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-This matches the routing realm.  Routing realms are used in complex routing
-setups involving dynamic routing protocols like BGP.
-.TP
-[\fB!\fP] \fB--realm\fP \fIvalue\fP[\fB/\fP\fImask\fP]
-Matches a given realm number (and optionally mask). If not a number, value
-can be a named realm from /etc/iproute2/rt_realms (mask can not be used in
-that case).
diff --git a/extensions/libipt_recent.c b/extensions/libipt_recent.c
deleted file mode 100644 (file)
index 51b0d15..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-/* Shared library add-on to iptables to add recent matching support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-
-#include <iptables.h>
-#include <linux/netfilter_ipv4/ipt_recent.h>
-
-/* Need these in order to not fail when compiling against an older kernel. */
-#ifndef RECENT_NAME
-#define RECENT_NAME    "ipt_recent"
-#endif /* RECENT_NAME */
-
-#ifndef RECENT_VER
-#define RECENT_VER     "unknown"
-#endif /* RECENT_VER */
-
-#ifndef IPT_RECENT_NAME_LEN
-#define IPT_RECENT_NAME_LEN    200
-#endif /* IPT_RECENT_NAME_LEN */
-
-/* Options for this module */
-static const struct option recent_opts[] = {
-       { .name = "set",      .has_arg = 0, .val = 201 }, 
-       { .name = "rcheck",   .has_arg = 0, .val = 202 }, 
-       { .name = "update",   .has_arg = 0, .val = 203 },
-       { .name = "seconds",  .has_arg = 1, .val = 204 }, 
-       { .name = "hitcount", .has_arg = 1, .val = 205 },
-       { .name = "remove",   .has_arg = 0, .val = 206 },
-       { .name = "rttl",     .has_arg = 0, .val = 207 },
-       { .name = "name",     .has_arg = 1, .val = 208 },
-       { .name = "rsource",  .has_arg = 0, .val = 209 },
-       { .name = "rdest",    .has_arg = 0, .val = 210 },
-       { .name = NULL }
-};
-
-/* Function which prints out usage message. */
-static void recent_help(void)
-{
-       printf(
-"recent match options:\n"
-"[!] --set                       Add source address to list, always matches.\n"
-"[!] --rcheck                    Match if source address in list.\n"
-"[!] --update                    Match if source address in list, also update last-seen time.\n"
-"[!] --remove                    Match if source address in list, also removes that address from list.\n"
-"    --seconds seconds           For check and update commands above.\n"
-"                                Specifies that the match will only occur if source address last seen within\n"
-"                                the last 'seconds' seconds.\n"
-"    --hitcount hits             For check and update commands above.\n"
-"                                Specifies that the match will only occur if source address seen hits times.\n"
-"                                May be used in conjunction with the seconds option.\n"
-"    --rttl                      For check and update commands above.\n"
-"                                Specifies that the match will only occur if the source address and the TTL\n"
-"                                match between this packet and the one which was set.\n"
-"                                Useful if you have problems with people spoofing their source address in order\n"
-"                                to DoS you via this module.\n"
-"    --name name                 Name of the recent list to be used.  DEFAULT used if none given.\n"
-"    --rsource                   Match/Save the source address of each packet in the recent list table (default).\n"
-"    --rdest                     Match/Save the destination address of each packet in the recent list table.\n"
-RECENT_NAME " " RECENT_VER ": Stephen Frost <sfrost@snowman.net>.  http://snowman.net/projects/ipt_recent/\n");
-}
-  
-/* Initialize the match. */
-static void recent_init(struct xt_entry_match *match)
-{
-       struct ipt_recent_info *info = (struct ipt_recent_info *)(match)->data;
-
-
-       strncpy(info->name,"DEFAULT",IPT_RECENT_NAME_LEN);
-       /* eventhough IPT_RECENT_NAME_LEN is currently defined as 200,
-        * better be safe, than sorry */
-       info->name[IPT_RECENT_NAME_LEN-1] = '\0';
-       info->side = IPT_RECENT_SOURCE;
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int recent_parse(int c, char **argv, int invert, unsigned int *flags,
-                        const void *entry, struct xt_entry_match **match)
-{
-       struct ipt_recent_info *info = (struct ipt_recent_info *)(*match)->data;
-       switch (c) {
-               case 201:
-                       if (*flags) exit_error(PARAMETER_PROBLEM,
-                                       "recent: only one of `--set', `--rcheck' "
-                                       "`--update' or `--remove' may be set");
-                       check_inverse(optarg, &invert, &optind, 0);
-                       info->check_set |= IPT_RECENT_SET;
-                       if (invert) info->invert = 1;
-                       *flags = 1;
-                       break;
-                       
-               case 202:
-                       if (*flags) exit_error(PARAMETER_PROBLEM,
-                                       "recent: only one of `--set', `--rcheck' "
-                                       "`--update' or `--remove' may be set");
-                       check_inverse(optarg, &invert, &optind, 0);
-                       info->check_set |= IPT_RECENT_CHECK;
-                       if(invert) info->invert = 1;
-                       *flags = 1;
-                       break;
-
-               case 203:
-                       if (*flags) exit_error(PARAMETER_PROBLEM,
-                                       "recent: only one of `--set', `--rcheck' "
-                                       "`--update' or `--remove' may be set");
-                       check_inverse(optarg, &invert, &optind, 0);
-                       info->check_set |= IPT_RECENT_UPDATE;
-                       if (invert) info->invert = 1;
-                       *flags = 1;
-                       break;
-
-               case 206:
-                       if (*flags) exit_error(PARAMETER_PROBLEM,
-                                       "recent: only one of `--set', `--rcheck' "
-                                       "`--update' or `--remove' may be set");
-                       check_inverse(optarg, &invert, &optind, 0);
-                       info->check_set |= IPT_RECENT_REMOVE;
-                       if (invert) info->invert = 1;
-                       *flags = 1;
-                       break;
-
-               case 204:
-                       info->seconds = atoi(optarg);
-                       break;
-
-               case 205:
-                       info->hit_count = atoi(optarg);
-                       break;
-
-               case 207:
-                       info->check_set |= IPT_RECENT_TTL;
-                       break;
-
-               case 208:
-                       strncpy(info->name,optarg,IPT_RECENT_NAME_LEN);
-                       info->name[IPT_RECENT_NAME_LEN-1] = '\0';
-                       break;
-
-               case 209:
-                       info->side = IPT_RECENT_SOURCE;
-                       break;
-
-               case 210:
-                       info->side = IPT_RECENT_DEST;
-                       break;
-
-               default:
-                       return 0;
-       }
-
-       return 1;
-}
-
-/* Final check; must have specified a specific option. */
-static void recent_check(unsigned int flags)
-{
-
-       if (!flags)
-               exit_error(PARAMETER_PROBLEM,
-                       "recent: you must specify one of `--set', `--rcheck' "
-                       "`--update' or `--remove'");
-}
-
-/* Prints out the matchinfo. */
-static void recent_print(const void *ip, const struct xt_entry_match *match,
-                         int numeric)
-{
-       struct ipt_recent_info *info = (struct ipt_recent_info *)match->data;
-
-       if (info->invert)
-               fputc('!', stdout);
-
-       printf("recent: ");
-       if(info->check_set & IPT_RECENT_SET) printf("SET ");
-       if(info->check_set & IPT_RECENT_CHECK) printf("CHECK ");
-       if(info->check_set & IPT_RECENT_UPDATE) printf("UPDATE ");
-       if(info->check_set & IPT_RECENT_REMOVE) printf("REMOVE ");
-       if(info->seconds) printf("seconds: %d ",info->seconds);
-       if(info->hit_count) printf("hit_count: %d ",info->hit_count);
-       if(info->check_set & IPT_RECENT_TTL) printf("TTL-Match ");
-       if(info->name) printf("name: %s ",info->name);
-       if(info->side == IPT_RECENT_SOURCE) printf("side: source ");
-       if(info->side == IPT_RECENT_DEST) printf("side: dest");
-}
-
-/* Saves the union ipt_matchinfo in parsable form to stdout. */
-static void recent_save(const void *ip, const struct xt_entry_match *match)
-{
-       struct ipt_recent_info *info = (struct ipt_recent_info *)match->data;
-
-       if (info->invert)
-               printf("! ");
-
-       if(info->check_set & IPT_RECENT_SET) printf("--set ");
-       if(info->check_set & IPT_RECENT_CHECK) printf("--rcheck ");
-       if(info->check_set & IPT_RECENT_UPDATE) printf("--update ");
-       if(info->check_set & IPT_RECENT_REMOVE) printf("--remove ");
-       if(info->seconds) printf("--seconds %d ",info->seconds);
-       if(info->hit_count) printf("--hitcount %d ",info->hit_count);
-       if(info->check_set & IPT_RECENT_TTL) printf("--rttl ");
-       if(info->name) printf("--name %s ",info->name);
-       if(info->side == IPT_RECENT_SOURCE) printf("--rsource ");
-       if(info->side == IPT_RECENT_DEST) printf("--rdest ");
-}
-
-/* Structure for iptables to use to communicate with module */
-static struct xtables_match recent_mt_reg = {
-    .name          = "recent",
-    .version       = XTABLES_VERSION,
-    .family        = PF_INET,
-    .size          = XT_ALIGN(sizeof(struct ipt_recent_info)),
-    .userspacesize = XT_ALIGN(sizeof(struct ipt_recent_info)),
-    .help          = recent_help,
-    .init          = recent_init,
-    .parse         = recent_parse,
-    .final_check   = recent_check,
-    .print         = recent_print,
-    .save          = recent_save,
-    .extra_opts    = recent_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&recent_mt_reg);
-}
diff --git a/extensions/libipt_recent.man b/extensions/libipt_recent.man
deleted file mode 100644 (file)
index bf5d710..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-Allows you to dynamically create a list of IP addresses and then match
-against that list in a few different ways.
-
-For example, you can create a `badguy' list out of people attempting
-to connect to port 139 on your firewall and then DROP all future
-packets from them without considering them.
-.TP
-.BI "--name " "name"
-Specify the list to use for the commands. If no name is given then 'DEFAULT'
-will be used.
-.TP
-[\fB!\fR] \fB--set\fR
-This will add the source address of the packet to the list. If the
-source address is already in the list, this will update the existing
-entry. This will always return success (or failure if `!' is passed
-in).
-.TP
-[\fB!\fR] \fB--rcheck\fR
-Check if the source address of the packet is currently in
-the list.
-.TP
-[\fB!\fR] \fB--update\fR
-Like \fB--rcheck\fR, except it will update the "last seen" timestamp if it
-matches.
-.TP
-[\fB!\fR] \fB--remove\fR
-Check if the source address of the packet is currently in the list and
-if so that address will be removed from the list and the rule will
-return true. If the address is not found, false is returned.
-.TP
-[\fB!\fR] \fB--seconds \fIseconds\fR
-This option must be used in conjunction with one of \fB--rcheck\fR or
-\fB--update\fR. When used, this will narrow the match to only happen
-when the address is in the list and was seen within the last given
-number of seconds.
-.TP
-[\fB!\fR] \fB--hitcount \fIhits\fR
-This option must be used in conjunction with one of \fB--rcheck\fR or
-\fB--update\fR. When used, this will narrow the match to only happen
-when the address is in the list and packets had been received greater
-than or equal to the given value. This option may be used along with
-\fB--seconds\fR to create an even narrower match requiring a certain
-number of hits within a specific time frame.
-.TP
-\fB--rttl\fR
-This option must be used in conjunction with one of \fB--rcheck\fR or
-\fB--update\fR. When used, this will narrow the match to only happen
-when the address is in the list and the TTL of the current packet
-matches that of the packet which hit the \fB--set\fR rule. This may be
-useful if you have problems with people faking their source address in
-order to DoS you via this module by disallowing others access to your
-site by sending bogus packets to you.
-.P
-Examples:
-.IP
-# iptables -A FORWARD -m recent --name badguy --rcheck --seconds 60 -j DROP
-
-# iptables -A FORWARD -p tcp -i eth0 --dport 139 -m recent --name badguy --set -j DROP
-.P
-Official website (http://snowman.net/projects/ipt_recent/) also has
-some examples of usage.
-
-/proc/net/ipt_recent/* are the current lists of addresses and information 
-about each entry of each list.
-
-Each file in /proc/net/ipt_recent/ can be read from to see the current list
-or written two using the following commands to modify the list:
-.TP
-echo xx.xx.xx.xx > /proc/net/ipt_recent/DEFAULT
-to Add to the DEFAULT list
-.TP
-echo -xx.xx.xx.xx > /proc/net/ipt_recent/DEFAULT
-to Remove from the DEFAULT list
-.TP
-echo clear > /proc/net/ipt_recent/DEFAULT
-to empty the DEFAULT list.
-.P
-The module itself accepts parameters, defaults shown:
-.TP
-.BI "ip_list_tot=" "100"
-Number of addresses remembered per table
-.TP
-.BI "ip_pkt_list_tot=" "20"
-Number of packets per address remembered
-.TP
-.BI "ip_list_hash_size=" "0"
-Hash table size. 0 means to calculate it based on ip_list_tot, default: 512
-.TP
-.BI "ip_list_perms=" "0644"
-Permissions for /proc/net/ipt_recent/* files
-.TP
-.BI "debug=" "0"
-Set to 1 to get lots of debugging info
diff --git a/extensions/libipt_set.c b/extensions/libipt_set.c
deleted file mode 100644 (file)
index 759bca3..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-/* Copyright (C) 2000-2002 Joakim Axelsson <gozem@linux.nu>
- *                         Patrick Schaaf <bof@bof.de>
- *                         Martin Josefsson <gandalf@wlug.westbo.se>
- * Copyright (C) 2003-2004 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.  
- */
-
-/* Shared library add-on to iptables to add IP set matching. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <ctype.h>
-#include <errno.h>
-
-#include <iptables.h>
-#include <linux/netfilter_ipv4/ipt_set.h>
-#include "libipt_set.h"
-
-/* Function which prints out usage message. */
-static void set_help(void)
-{
-       printf("set match options:\n"
-              " [!] --set     name flags\n"
-              "                'name' is the set name from to match,\n" 
-              "                'flags' are the comma separated list of\n"
-              "                'src' and 'dst'.\n");
-}
-
-static const struct option set_opts[] = {
-       {"set", 1, NULL, '1'},
-       { }
-};
-
-/* Initialize the match. */
-static void set_init(struct xt_entry_match *match)
-{
-       struct ipt_set_info_match *info = 
-               (struct ipt_set_info_match *) match->data;
-       
-
-       memset(info, 0, sizeof(struct ipt_set_info_match));
-
-}
-
-/* Function which parses command options; returns true if it ate an option */
-static int set_parse(int c, char **argv, int invert, unsigned int *flags,
-                     const void *entry, struct xt_entry_match **match)
-{
-       struct ipt_set_info_match *myinfo = 
-               (struct ipt_set_info_match *) (*match)->data;
-       struct ipt_set_info *info = &myinfo->match_set;
-
-       switch (c) {
-       case '1':               /* --set <set> <flag>[,<flag> */
-               if (info->flags[0])
-                       exit_error(PARAMETER_PROBLEM,
-                                  "--set can be specified only once");
-
-               check_inverse(optarg, &invert, &optind, 0);
-               if (invert)
-                       info->flags[0] |= IPSET_MATCH_INV;
-
-               if (!argv[optind]
-                   || argv[optind][0] == '-'
-                   || argv[optind][0] == '!')
-                       exit_error(PARAMETER_PROBLEM,
-                                  "--set requires two args.");
-
-               if (strlen(argv[optind-1]) > IP_SET_MAXNAMELEN - 1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "setname `%s' too long, max %d characters.",
-                                  argv[optind-1], IP_SET_MAXNAMELEN - 1);
-
-               get_set_byname(argv[optind - 1], info);
-               parse_bindings(argv[optind], info);
-               DEBUGP("parse: set index %u\n", info->index);
-               optind++;
-               
-               *flags = 1;
-               break;
-
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-/* Final check; must have specified --set. */
-static void set_check(unsigned int flags)
-{
-       if (!flags)
-               exit_error(PARAMETER_PROBLEM,
-                          "You must specify `--set' with proper arguments");
-       DEBUGP("final check OK\n");
-}
-
-static void
-print_match(const char *prefix, const struct ipt_set_info *info)
-{
-       int i;
-       char setname[IP_SET_MAXNAMELEN];
-
-       get_set_byid(setname, info->index);
-       printf("%s%s %s", 
-              (info->flags[0] & IPSET_MATCH_INV) ? "! " : "",
-              prefix,
-              setname); 
-       for (i = 0; i < IP_SET_MAX_BINDINGS; i++) {
-               if (!info->flags[i])
-                       break;          
-               printf("%s%s",
-                      i == 0 ? " " : ",",
-                      info->flags[i] & IPSET_SRC ? "src" : "dst");
-       }
-       printf(" ");
-}
-
-/* Prints out the matchinfo. */
-static void set_print(const void *ip, const struct xt_entry_match *match,
-                      int numeric)
-{
-       struct ipt_set_info_match *info = 
-               (struct ipt_set_info_match *) match->data;
-
-       print_match("set", &info->match_set);
-}
-
-/* Saves the matchinfo in parsable form to stdout. */
-static void set_save(const void *ip, const struct xt_entry_match *match)
-{
-       struct ipt_set_info_match *info = 
-               (struct ipt_set_info_match *) match->data;
-
-       print_match("--set", &info->match_set);
-}
-
-static struct xtables_match set_mt_reg = {
-       .name           = "set",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET,
-       .size           = XT_ALIGN(sizeof(struct ipt_set_info_match)),
-       .userspacesize  = XT_ALIGN(sizeof(struct ipt_set_info_match)),
-       .help           = set_help,
-       .init           = set_init,
-       .parse          = set_parse,
-       .final_check    = set_check,
-       .print          = set_print,
-       .save           = set_save,
-       .extra_opts     = set_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&set_mt_reg);
-}
diff --git a/extensions/libipt_set.h b/extensions/libipt_set.h
deleted file mode 100644 (file)
index 3e70d7b..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-#ifndef _LIBIPT_SET_H
-#define _LIBIPT_SET_H
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <errno.h>
-
-#ifdef DEBUG
-#define DEBUGP(x, args...) fprintf(stderr, x, ## args)
-#else
-#define DEBUGP(x, args...) 
-#endif
-
-static void
-parse_bindings(const char *opt_arg, struct ipt_set_info *info)
-{
-       char *saved = strdup(opt_arg);
-       char *ptr, *tmp = saved;
-       int i = 0;
-       
-       while (i < (IP_SET_MAX_BINDINGS - 1) && tmp != NULL) {
-               ptr = strsep(&tmp, ",");
-               if (strncmp(ptr, "src", 3) == 0)
-                       info->flags[i++] |= IPSET_SRC;
-               else if (strncmp(ptr, "dst", 3) == 0)
-                       info->flags[i++] |= IPSET_DST;
-               else
-                       exit_error(PARAMETER_PROBLEM,
-                                  "You must spefify (the comma separated list of) 'src' or 'dst'.");
-       }
-
-       if (tmp)
-               exit_error(PARAMETER_PROBLEM,
-                          "Can't follow bindings deeper than %i.", 
-                          IP_SET_MAX_BINDINGS - 1);
-
-       free(saved);
-}
-
-static int get_set_getsockopt(void *data, socklen_t * size)
-{
-       int sockfd = -1;
-       sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
-       if (sockfd < 0)
-               exit_error(OTHER_PROBLEM,
-                          "Can't open socket to ipset.\n");
-       /* Send! */
-       return getsockopt(sockfd, SOL_IP, SO_IP_SET, data, size);
-}
-
-static void get_set_byname(const char *setname, struct ipt_set_info *info)
-{
-       struct ip_set_req_get_set req;
-       socklen_t size = sizeof(struct ip_set_req_get_set);
-       int res;
-
-       req.op = IP_SET_OP_GET_BYNAME;
-       req.version = IP_SET_PROTOCOL_VERSION;
-       strncpy(req.set.name, setname, IP_SET_MAXNAMELEN);
-       req.set.name[IP_SET_MAXNAMELEN - 1] = '\0';
-       res = get_set_getsockopt(&req, &size);
-       if (res != 0)
-               exit_error(OTHER_PROBLEM,
-                          "Problem when communicating with ipset, errno=%d.\n",
-                          errno);
-       if (size != sizeof(struct ip_set_req_get_set))
-               exit_error(OTHER_PROBLEM,
-                          "Incorrect return size from kernel during ipset lookup, "
-                          "(want %zu, got %zu)\n",
-                          sizeof(struct ip_set_req_get_set), (size_t)size);
-       if (req.set.index == IP_SET_INVALID_ID)
-               exit_error(PARAMETER_PROBLEM,
-                          "Set %s doesn't exist.\n", setname);
-
-       info->index = req.set.index;
-}
-
-static void get_set_byid(char * setname, ip_set_id_t idx)
-{
-       struct ip_set_req_get_set req;
-       socklen_t size = sizeof(struct ip_set_req_get_set);
-       int res;
-
-       req.op = IP_SET_OP_GET_BYINDEX;
-       req.version = IP_SET_PROTOCOL_VERSION;
-       req.set.index = idx;
-       res = get_set_getsockopt(&req, &size);
-       if (res != 0)
-               exit_error(OTHER_PROBLEM,
-                          "Problem when communicating with ipset, errno=%d.\n",
-                          errno);
-       if (size != sizeof(struct ip_set_req_get_set))
-               exit_error(OTHER_PROBLEM,
-                          "Incorrect return size from kernel during ipset lookup, "
-                          "(want %zu, got %zu)\n",
-                          sizeof(struct ip_set_req_get_set), (size_t)size);
-       if (req.set.name[0] == '\0')
-               exit_error(PARAMETER_PROBLEM,
-                          "Set id %i in kernel doesn't exist.\n", idx);
-
-       strncpy(setname, req.set.name, IP_SET_MAXNAMELEN);
-}
-
-#endif /*_LIBIPT_SET_H*/
diff --git a/extensions/libipt_set.man b/extensions/libipt_set.man
deleted file mode 100644 (file)
index c8ff601..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-This modules macthes IP sets which can be defined by ipset(8).
-.TP
-[\fB!\fP] \fB--set\fP \fIsetname\fP \fIflag\fP[\fB,\fP\fIflag\fP]...
-where flags are
-.BR "src"
-and/or
-.BR "dst" 
-and there can be no more than six of them. Hence the command
-.nf
- iptables -A FORWARD -m set --set test src,dst
-.fi
-will match packets, for which (depending on the type of the set) the source
-address or port number of the packet can be found in the specified set. If 
-there is a binding belonging to the mached set element or there is a default 
-binding for the given set, then the rule will match the packet only if 
-additionally (depending on the type of the set) the destination address or 
-port number of the packet can be found in the set according to the binding.
diff --git a/extensions/libipt_ttl.c b/extensions/libipt_ttl.c
deleted file mode 100644 (file)
index 25b9206..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-/* Shared library add-on to iptables to add TTL matching support 
- * (C) 2000 by Harald Welte <laforge@gnumonks.org>
- *
- * $Id$
- *
- * This program is released under the terms of GNU GPL */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <getopt.h>
-#include <iptables.h>
-
-#include <linux/netfilter_ipv4/ip_tables.h>
-#include <linux/netfilter_ipv4/ipt_ttl.h>
-
-static void ttl_help(void)
-{
-       printf(
-"ttl match options:\n"
-"  --ttl-eq value      Match time to live value\n"
-"  --ttl-lt value      Match TTL < value\n"
-"  --ttl-gt value      Match TTL > value\n");
-}
-
-static int ttl_parse(int c, char **argv, int invert, unsigned int *flags,
-                     const void *entry, struct xt_entry_match **match)
-{
-       struct ipt_ttl_info *info = (struct ipt_ttl_info *) (*match)->data;
-       unsigned int value;
-
-       check_inverse(optarg, &invert, &optind, 0);
-
-       switch (c) {
-               case '2':
-                       if (string_to_number(optarg, 0, 255, &value) == -1)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "ttl: Expected value between 0 and 255");
-
-                       if (invert)
-                               info->mode = IPT_TTL_NE;
-                       else
-                               info->mode = IPT_TTL_EQ;
-
-                       /* is 0 allowed? */
-                       info->ttl = value;
-                       break;
-               case '3':
-                       if (string_to_number(optarg, 0, 255, &value) == -1)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "ttl: Expected value between 0 and 255");
-
-                       if (invert) 
-                               exit_error(PARAMETER_PROBLEM,
-                                               "ttl: unexpected `!'");
-
-                       info->mode = IPT_TTL_LT;
-                       info->ttl = value;
-                       break;
-               case '4':
-                       if (string_to_number(optarg, 0, 255, &value) == -1)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "ttl: Expected value between 0 and 255");
-
-                       if (invert)
-                               exit_error(PARAMETER_PROBLEM,
-                                               "ttl: unexpected `!'");
-
-                       info->mode = IPT_TTL_GT;
-                       info->ttl = value;
-                       break;
-               default:
-                       return 0;
-
-       }
-
-       if (*flags) 
-               exit_error(PARAMETER_PROBLEM, 
-                               "Can't specify TTL option twice");
-       *flags = 1;
-
-       return 1;
-}
-
-static void ttl_check(unsigned int flags)
-{
-       if (!flags) 
-               exit_error(PARAMETER_PROBLEM,
-                       "TTL match: You must specify one of "
-                       "`--ttl-eq', `--ttl-lt', `--ttl-gt");
-}
-
-static void ttl_print(const void *ip, const struct xt_entry_match *match,
-                      int numeric)
-{
-       const struct ipt_ttl_info *info = 
-               (struct ipt_ttl_info *) match->data;
-
-       printf("TTL match ");
-       switch (info->mode) {
-               case IPT_TTL_EQ:
-                       printf("TTL == ");
-                       break;
-               case IPT_TTL_NE:
-                       printf("TTL != ");
-                       break;
-               case IPT_TTL_LT:
-                       printf("TTL < ");
-                       break;
-               case IPT_TTL_GT:
-                       printf("TTL > ");
-                       break;
-       }
-       printf("%u ", info->ttl);
-}
-
-static void ttl_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct ipt_ttl_info *info =
-               (struct ipt_ttl_info *) match->data;
-
-       switch (info->mode) {
-               case IPT_TTL_EQ:
-                       printf("--ttl-eq ");
-                       break;
-               case IPT_TTL_NE:
-                       printf("! --ttl-eq ");
-                       break;
-               case IPT_TTL_LT:
-                       printf("--ttl-lt ");
-                       break;
-               case IPT_TTL_GT:
-                       printf("--ttl-gt ");
-                       break;
-               default:
-                       /* error */
-                       break;
-       }
-       printf("%u ", info->ttl);
-}
-
-static const struct option ttl_opts[] = {
-       { "ttl", 1, NULL, '2' },
-       { "ttl-eq", 1, NULL, '2'},
-       { "ttl-lt", 1, NULL, '3'},
-       { "ttl-gt", 1, NULL, '4'},
-       { .name = NULL }
-};
-
-static struct xtables_match ttl_mt_reg = {
-       .name           = "ttl",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET,
-       .size           = XT_ALIGN(sizeof(struct ipt_ttl_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct ipt_ttl_info)),
-       .help           = ttl_help,
-       .parse          = ttl_parse,
-       .final_check    = ttl_check,
-       .print          = ttl_print,
-       .save           = ttl_save,
-       .extra_opts     = ttl_opts,
-};
-
-
-void _init(void) 
-{
-       xtables_register_match(&ttl_mt_reg);
-}
diff --git a/extensions/libipt_ttl.man b/extensions/libipt_ttl.man
deleted file mode 100644 (file)
index f043c79..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-This module matches the time to live field in the IP header.
-.TP
-.BI "--ttl-eq " "ttl"
-Matches the given TTL value.
-.TP
-.BI "--ttl-gt " "ttl"
-Matches if TTL is greater than the given TTL value.
-.TP
-.BI "--ttl-lt " "ttl"
-Matches if TTL is less than the given TTL value.
diff --git a/extensions/libipt_unclean.c b/extensions/libipt_unclean.c
deleted file mode 100644 (file)
index 4bdbd1b..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Shared library add-on to iptables for unclean. */
-#include <stdio.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <iptables.h>
-
-/* Function which prints out usage message. */
-static void unclean_help(void)
-{
-       printf("unclean match takes no options\n");
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int unclean_parse(int c, char **argv, int invert, unsigned int *flags,
-                         const void *entry, struct xt_entry_match **match)
-{
-       return 0;
-}
-
-static struct xtables_match unclean_mt_reg = {
-       .name           = "unclean",
-       .version        = XTABLES_VERSION,
-       .family         = PF_INET,
-       .size           = XT_ALIGN(0),
-       .userspacesize  = XT_ALIGN(0),
-       .help           = unclean_help,
-       .parse          = unclean_parse,
-};
-
-void _init(void)
-{
-       xtables_register_match(&unclean_mt_reg);
-}
diff --git a/extensions/libipt_unclean.man b/extensions/libipt_unclean.man
deleted file mode 100644 (file)
index 3fecd55..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-This module takes no options, but attempts to match packets which seem
-malformed or unusual.  This is regarded as experimental.
diff --git a/extensions/libxt_CLASSIFY.c b/extensions/libxt_CLASSIFY.c
deleted file mode 100644 (file)
index 4c5d963..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-/* Shared library add-on to iptables to add CLASSIFY target support. */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-
-#include <xtables.h>
-#include <linux/netfilter/x_tables.h>
-#include <linux/netfilter/xt_CLASSIFY.h>
-#include <linux/types.h>
-#include <linux/pkt_sched.h>
-
-/* Function which prints out usage message. */
-static void
-CLASSIFY_help(void)
-{
-       printf(
-"CLASSIFY target options:\n"
-"  --set-class [MAJOR:MINOR]    Set skb->priority value\n"
-"  --add-mark                   Add value of skb->mark to skb->priority (PlanetLab specific)\n");
-}
-
-static const struct option CLASSIFY_opts[] = {
-       { "set-class", 1, NULL, '1' },
-       { "add-mark", 0, 0, '2' },
-       { .name = NULL }
-};
-
-static int CLASSIFY_string_to_priority(const char *s, unsigned int *p)
-{
-       unsigned int i, j;
-
-       if (sscanf(s, "%x:%x", &i, &j) != 2)
-               return 1;
-       
-       *p = TC_H_MAKE(i<<16, j);
-       return 0;
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int
-CLASSIFY_parse(int c, char **argv, int invert, unsigned int *flags,
-      const void *entry,
-      struct xt_entry_target **target)
-{
-       struct xt_classify_target_info *clinfo
-               = (struct xt_classify_target_info *)(*target)->data;
-
-       clinfo->add_mark = 0;
-
-       switch (c) {
-       case '1':
-               if (CLASSIFY_string_to_priority(optarg, &clinfo->priority))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Bad class value `%s'", optarg);
-               if (*flags)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "CLASSIFY: Can't specify --set-class twice");
-               *flags = 1;
-               break;
-
-       case '2':
-               clinfo->add_mark = 1;
-               break;
-
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static void
-CLASSIFY_final_check(unsigned int flags)
-{
-       if (!flags)
-               exit_error(PARAMETER_PROBLEM,
-                          "CLASSIFY: Parameter --set-class is required");
-}
-
-static void
-CLASSIFY_print_class(unsigned int priority, int numeric)
-{
-       printf("%x:%x ", TC_H_MAJ(priority)>>16, TC_H_MIN(priority));
-}
-
-/* Prints out the targinfo. */
-static void
-CLASSIFY_print(const void *ip,
-      const struct xt_entry_target *target,
-      int numeric)
-{
-       const struct xt_classify_target_info *clinfo =
-               (const struct xt_classify_target_info *)target->data;
-       printf("CLASSIFY set ");
-       CLASSIFY_print_class(clinfo->priority, numeric);
-
-       if (clinfo->add_mark)
-              printf ("add-mark ");
-}
-
-/* Saves the union ipt_targinfo in parsable form to stdout. */
-static void
-CLASSIFY_save(const void *ip, const struct xt_entry_target *target)
-{
-       const struct xt_classify_target_info *clinfo =
-               (const struct xt_classify_target_info *)target->data;
-
-       printf("--set-class %.4x:%.4x ",
-              TC_H_MAJ(clinfo->priority)>>16, TC_H_MIN(clinfo->priority));
-
-       if (clinfo->add_mark)
-              printf("--add-mark ");
-}
-
-static struct xtables_target classify_target = { 
-       .family         = AF_UNSPEC,
-       .name           = "CLASSIFY",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_classify_target_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_classify_target_info)),
-       .help           = CLASSIFY_help,
-       .parse          = CLASSIFY_parse,
-       .final_check    = CLASSIFY_final_check,
-       .print          = CLASSIFY_print,
-       .save           = CLASSIFY_save,
-       .extra_opts     = CLASSIFY_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&classify_target);
-}
diff --git a/extensions/libxt_CLASSIFY.c.orig b/extensions/libxt_CLASSIFY.c.orig
deleted file mode 100644 (file)
index 79dd16c..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-/* Shared library add-on to iptables to add CLASSIFY target support. */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-
-#include <xtables.h>
-#include <linux/netfilter/x_tables.h>
-#include <linux/netfilter/xt_CLASSIFY.h>
-#include <linux/types.h>
-#include <linux/pkt_sched.h>
-
-/* Function which prints out usage message. */
-static void
-CLASSIFY_help(void)
-{
-       printf(
-"CLASSIFY target options:\n"
-"  --set-class [MAJOR:MINOR]    Set skb->priority value\n");
-}
-
-static const struct option CLASSIFY_opts[] = {
-       { "set-class", 1, NULL, '1' },
-       { .name = NULL }
-};
-
-static int CLASSIFY_string_to_priority(const char *s, unsigned int *p)
-{
-       unsigned int i, j;
-
-       if (sscanf(s, "%x:%x", &i, &j) != 2)
-               return 1;
-       
-       *p = TC_H_MAKE(i<<16, j);
-       return 0;
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int
-CLASSIFY_parse(int c, char **argv, int invert, unsigned int *flags,
-      const void *entry,
-      struct xt_entry_target **target)
-{
-       struct xt_classify_target_info *clinfo
-               = (struct xt_classify_target_info *)(*target)->data;
-
-       switch (c) {
-       case '1':
-               if (CLASSIFY_string_to_priority(optarg, &clinfo->priority))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Bad class value `%s'", optarg);
-               if (*flags)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "CLASSIFY: Can't specify --set-class twice");
-               *flags = 1;
-               break;
-
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static void
-CLASSIFY_final_check(unsigned int flags)
-{
-       if (!flags)
-               exit_error(PARAMETER_PROBLEM,
-                          "CLASSIFY: Parameter --set-class is required");
-}
-
-static void
-CLASSIFY_print_class(unsigned int priority, int numeric)
-{
-       printf("%x:%x ", TC_H_MAJ(priority)>>16, TC_H_MIN(priority));
-}
-
-/* Prints out the targinfo. */
-static void
-CLASSIFY_print(const void *ip,
-      const struct xt_entry_target *target,
-      int numeric)
-{
-       const struct xt_classify_target_info *clinfo =
-               (const struct xt_classify_target_info *)target->data;
-       printf("CLASSIFY set ");
-       CLASSIFY_print_class(clinfo->priority, numeric);
-}
-
-/* Saves the union ipt_targinfo in parsable form to stdout. */
-static void
-CLASSIFY_save(const void *ip, const struct xt_entry_target *target)
-{
-       const struct xt_classify_target_info *clinfo =
-               (const struct xt_classify_target_info *)target->data;
-
-       printf("--set-class %.4x:%.4x ",
-              TC_H_MAJ(clinfo->priority)>>16, TC_H_MIN(clinfo->priority));
-}
-
-static struct xtables_target classify_target = { 
-       .family         = AF_UNSPEC,
-       .name           = "CLASSIFY",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_classify_target_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_classify_target_info)),
-       .help           = CLASSIFY_help,
-       .parse          = CLASSIFY_parse,
-       .final_check    = CLASSIFY_final_check,
-       .print          = CLASSIFY_print,
-       .save           = CLASSIFY_save,
-       .extra_opts     = CLASSIFY_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&classify_target);
-}
diff --git a/extensions/libxt_CLASSIFY.man b/extensions/libxt_CLASSIFY.man
deleted file mode 100644 (file)
index dbeff32..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-This module allows you to set the skb->priority value (and thus classify the packet into a specific CBQ class).
-.TP
-\fB--set-class\fP \fImajor\fP\fB:\fP\fIminor\fP
-Set the major and minor class value.
diff --git a/extensions/libxt_CONNMARK.c b/extensions/libxt_CONNMARK.c
deleted file mode 100644 (file)
index 27640f5..0000000
+++ /dev/null
@@ -1,477 +0,0 @@
-/* Shared library add-on to iptables to add CONNMARK target support.
- *
- * (C) 2002,2004 MARA Systems AB <http://www.marasystems.com>
- * by Henrik Nordstrom <hno@marasystems.com>
- *
- * Version 1.1
- *
- * 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 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, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-
-#include <xtables.h>
-#include <linux/netfilter/x_tables.h>
-#include <linux/netfilter/xt_CONNMARK.h>
-
-enum {
-       F_MARK    = 1 << 0,
-       F_SR_MARK = 1 << 1,
-};
-
-/* Function which prints out usage message. */
-static void CONNMARK_help(void)
-{
-       printf(
-"CONNMARK target options:\n"
-"  --set-mark value[/mask]       Set conntrack mark value\n"
-"  --save-mark [--mask mask]     Save the packet nfmark in the connection\n"
-"  --restore-mark [--mask mask]  Restore saved nfmark value\n");
-}
-
-static const struct option CONNMARK_opts[] = {
-       { "set-mark", 1, NULL, '1' },
-       { "save-mark", 0, NULL, '2' },
-       { "restore-mark", 0, NULL, '3' },
-       { "mask", 1, NULL, '4' },
-       { .name = NULL }
-};
-
-static const struct option connmark_tg_opts[] = {
-       {.name = "set-xmark",     .has_arg = true,  .val = '='},
-       {.name = "set-mark",      .has_arg = true,  .val = '-'},
-       {.name = "and-mark",      .has_arg = true,  .val = '&'},
-       {.name = "or-mark",       .has_arg = true,  .val = '|'},
-       {.name = "xor-mark",      .has_arg = true,  .val = '^'},
-       {.name = "save-mark",     .has_arg = false, .val = 'S'},
-       {.name = "restore-mark",  .has_arg = false, .val = 'R'},
-       {.name = "ctmask",        .has_arg = true,  .val = 'c'},
-       {.name = "nfmask",        .has_arg = true,  .val = 'n'},
-       {.name = "mask",          .has_arg = true,  .val = 'm'},
-       {.name = NULL},
-};
-
-static void connmark_tg_help(void)
-{
-       printf(
-"CONNMARK target options:\n"
-"  --set-xmark value[/ctmask]    Zero mask bits and XOR ctmark with value\n"
-"  --save-mark [--ctmask mask] [--nfmask mask]\n"
-"                                Copy ctmark to nfmark using masks\n"
-"  --restore-mark [--ctmask mask] [--nfmask mask]\n"
-"                                Copy nfmark to ctmark using masks\n"
-"  --set-mark value[/mask]       Set conntrack mark value\n"
-"  --save-mark [--mask mask]     Save the packet nfmark in the connection\n"
-"  --restore-mark [--mask mask]  Restore saved nfmark value\n"
-"  --and-mark value              Binary AND the ctmark with bits\n"
-"  --or-mark value               Binary OR  the ctmark with bits\n"
-"  --xor-mark value              Binary XOR the ctmark with bits\n"
-);
-}
-
-static void connmark_tg_init(struct xt_entry_target *target)
-{
-       struct xt_connmark_tginfo1 *info = (void *)target->data;
-
-       /*
-        * Need these defaults for --save-mark/--restore-mark if no
-        * --ctmark or --nfmask is given.
-        */
-       info->ctmask = ~0U;
-       info->nfmask = ~0U;
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int
-CONNMARK_parse(int c, char **argv, int invert, unsigned int *flags,
-               const void *entry, struct xt_entry_target **target)
-{
-       struct xt_connmark_target_info *markinfo
-               = (struct xt_connmark_target_info *)(*target)->data;
-
-       switch (c) {
-               char *end;
-       case '1':
-               markinfo->mode = XT_CONNMARK_SET;
-
-               markinfo->mark = strtoul(optarg, &end, 0);
-               if (*end == '/' && end[1] != '\0')
-                   markinfo->mask = strtoul(end+1, &end, 0);
-
-               if (*end != '\0' || end == optarg)
-                       exit_error(PARAMETER_PROBLEM, "Bad MARK value `%s'", optarg);
-               if (*flags)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "CONNMARK target: Can't specify --set-mark twice");
-               *flags = 1;
-               break;
-       case '2':
-               markinfo->mode = XT_CONNMARK_SAVE;
-               if (*flags)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "CONNMARK target: Can't specify --save-mark twice");
-               *flags = 1;
-               break;
-       case '3':
-               markinfo->mode = XT_CONNMARK_RESTORE;
-               if (*flags)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "CONNMARK target: Can't specify --restore-mark twice");
-               *flags = 1;
-               break;
-       case '4':
-               if (!*flags)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "CONNMARK target: Can't specify --mask without a operation");
-               markinfo->mask = strtoul(optarg, &end, 0);
-
-               if (*end != '\0' || end == optarg)
-                       exit_error(PARAMETER_PROBLEM, "Bad MASK value `%s'", optarg);
-               break;
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static int connmark_tg_parse(int c, char **argv, int invert,
-                             unsigned int *flags, const void *entry,
-                             struct xt_entry_target **target)
-{
-       struct xt_connmark_tginfo1 *info = (void *)(*target)->data;
-       unsigned int value, mask = ~0U;
-       char *end;
-
-       switch (c) {
-       case '=': /* --set-xmark */
-       case '-': /* --set-mark */
-               param_act(P_ONE_ACTION, "CONNMARK", *flags & F_MARK);
-               if (!strtonum(optarg, &end, &value, 0, ~0U))
-                       param_act(P_BAD_VALUE, "CONNMARK", "--set-xmark/--set-mark", optarg);
-               if (*end == '/')
-                       if (!strtonum(end + 1, &end, &mask, 0, ~0U))
-                               param_act(P_BAD_VALUE, "CONNMARK", "--set-xmark/--set-mark", optarg);
-               if (*end != '\0')
-                       param_act(P_BAD_VALUE, "CONNMARK", "--set-xmark/--set-mark", optarg);
-               info->mode   = XT_CONNMARK_SET;
-               info->ctmark = value;
-               info->ctmask = mask;
-               if (c == '-')
-                       info->ctmask |= value;
-               *flags |= F_MARK;
-               return true;
-
-       case '&': /* --and-mark */
-               param_act(P_ONE_ACTION, "CONNMARK", *flags & F_MARK);
-               if (!strtonum(optarg, NULL, &mask, 0, ~0U))
-                       param_act(P_BAD_VALUE, "CONNMARK", "--and-mark", optarg);
-               info->mode   = XT_CONNMARK_SET;
-               info->ctmark = 0;
-               info->ctmask = ~mask;
-               *flags      |= F_MARK;
-               return true;
-
-       case '|': /* --or-mark */
-               param_act(P_ONE_ACTION, "CONNMARK", *flags & F_MARK);
-               if (!strtonum(optarg, NULL, &value, 0, ~0U))
-                       param_act(P_BAD_VALUE, "CONNMARK", "--or-mark", optarg);
-               info->mode   = XT_CONNMARK_SET;
-               info->ctmark = value;
-               info->ctmask = value;
-               *flags      |= F_MARK;
-               return true;
-
-       case '^': /* --xor-mark */
-               param_act(P_ONE_ACTION, "CONNMARK", *flags & F_MARK);
-               if (!strtonum(optarg, NULL, &value, 0, ~0U))
-                       param_act(P_BAD_VALUE, "CONNMARK", "--xor-mark", optarg);
-               info->mode   = XT_CONNMARK_SET;
-               info->ctmark = value;
-               info->ctmask = 0;
-               *flags      |= F_MARK;
-               return true;
-
-       case 'S': /* --save-mark */
-               param_act(P_ONE_ACTION, "CONNMARK", *flags & F_MARK);
-               info->mode = XT_CONNMARK_SAVE;
-               *flags |= F_MARK | F_SR_MARK;
-               return true;
-
-       case 'R': /* --restore-mark */
-               param_act(P_ONE_ACTION, "CONNMARK", *flags & F_MARK);
-               info->mode = XT_CONNMARK_RESTORE;
-               *flags |= F_MARK | F_SR_MARK;
-               return true;
-
-       case 'n': /* --nfmask */
-               if (!(*flags & F_SR_MARK))
-                       exit_error(PARAMETER_PROBLEM, "CONNMARK: --save-mark "
-                                  "or --restore-mark is required for "
-                                  "--nfmask");
-               if (!strtonum(optarg, NULL, &value, 0, ~0U))
-                       param_act(P_BAD_VALUE, "CONNMARK", "--nfmask", optarg);
-               info->nfmask = value;
-               return true;
-
-       case 'c': /* --ctmask */
-               if (!(*flags & F_SR_MARK))
-                       exit_error(PARAMETER_PROBLEM, "CONNMARK: --save-mark "
-                                  "or --restore-mark is required for "
-                                  "--ctmask");
-               if (!strtonum(optarg, NULL, &value, 0, ~0U))
-                       param_act(P_BAD_VALUE, "CONNMARK", "--ctmask", optarg);
-               info->ctmask = value;
-               return true;
-
-       case 'm': /* --mask */
-               if (!(*flags & F_SR_MARK))
-                       exit_error(PARAMETER_PROBLEM, "CONNMARK: --save-mark "
-                                  "or --restore-mark is required for "
-                                  "--mask");
-               if (!strtonum(optarg, NULL, &value, 0, ~0U))
-                       param_act(P_BAD_VALUE, "CONNMARK", "--mask", optarg);
-               info->nfmask = info->ctmask = value;
-               return true;
-       }
-
-       return false;
-}
-
-static void connmark_tg_check(unsigned int flags)
-{
-       if (!flags)
-               exit_error(PARAMETER_PROBLEM,
-                          "CONNMARK target: No operation specified");
-}
-
-static void
-print_mark(unsigned long mark)
-{
-       printf("0x%lx", mark);
-}
-
-static void
-print_mask(const char *text, unsigned long mask)
-{
-       if (mask != 0xffffffffUL)
-               printf("%s0x%lx", text, mask);
-}
-
-
-/* Prints out the target info. */
-static void CONNMARK_print(const void *ip,
-                           const struct xt_entry_target *target, int numeric)
-{
-       const struct xt_connmark_target_info *markinfo =
-               (const struct xt_connmark_target_info *)target->data;
-       switch (markinfo->mode) {
-       case XT_CONNMARK_SET:
-           printf("CONNMARK set ");
-           print_mark(markinfo->mark);
-           print_mask("/", markinfo->mask);
-           printf(" ");
-           break;
-       case XT_CONNMARK_SAVE:
-           printf("CONNMARK save ");
-           print_mask("mask ", markinfo->mask);
-           printf(" ");
-           break;
-       case XT_CONNMARK_RESTORE:
-           printf("CONNMARK restore ");
-           print_mask("mask ", markinfo->mask);
-           break;
-       default:
-           printf("ERROR: UNKNOWN CONNMARK MODE ");
-           break;
-       }
-}
-
-static void
-connmark_tg_print(const void *ip, const struct xt_entry_target *target,
-                  int numeric)
-{
-       const struct xt_connmark_tginfo1 *info = (const void *)target->data;
-
-       switch (info->mode) {
-       case XT_CONNMARK_SET:
-               if (info->ctmark == 0)
-                       printf("CONNMARK and 0x%x ",
-                              (unsigned int)(u_int32_t)~info->ctmask);
-               else if (info->ctmark == info->ctmask)
-                       printf("CONNMARK or 0x%x ", info->ctmark);
-               else if (info->ctmask == 0)
-                       printf("CONNMARK xor 0x%x ", info->ctmark);
-               else
-                       printf("CONNMARK xset 0x%x/0x%x ",
-                              info->ctmark, info->ctmask);
-               break;
-       case XT_CONNMARK_SAVE:
-               if (info->nfmask == ~0U && info->ctmask == ~0U)
-                       printf("CONNMARK save ");
-               else if (info->nfmask == info->ctmask)
-                       printf("CONNMARK save mask 0x%x ", info->nfmask);
-               else
-                       printf("CONNMARK save nfmask 0x%x ctmask ~0x%x ",
-                              info->nfmask, info->ctmask);
-               break;
-       case XT_CONNMARK_RESTORE:
-               if (info->ctmask == ~0U && info->nfmask == ~0U)
-                       printf("CONNMARK restore ");
-               else if (info->ctmask == info->nfmask)
-                       printf("CONNMARK restore mask 0x%x ", info->ctmask);
-               else
-                       printf("CONNMARK restore ctmask 0x%x nfmask ~0x%x ",
-                              info->ctmask, info->nfmask);
-               break;
-
-       default:
-               printf("ERROR: UNKNOWN CONNMARK MODE");
-               break;
-       }
-}
-
-/* Saves the target into in parsable form to stdout. */
-static void CONNMARK_save(const void *ip, const struct xt_entry_target *target)
-{
-       const struct xt_connmark_target_info *markinfo =
-               (const struct xt_connmark_target_info *)target->data;
-
-       switch (markinfo->mode) {
-       case XT_CONNMARK_SET:
-           printf("--set-mark ");
-           print_mark(markinfo->mark);
-           print_mask("/", markinfo->mask);
-           printf(" ");
-           break;
-       case XT_CONNMARK_SAVE:
-           printf("--save-mark ");
-           print_mask("--mask ", markinfo->mask);
-           break;
-       case XT_CONNMARK_RESTORE:
-           printf("--restore-mark ");
-           print_mask("--mask ", markinfo->mask);
-           break;
-       default:
-           printf("ERROR: UNKNOWN CONNMARK MODE ");
-           break;
-       }
-}
-
-static void CONNMARK_init(struct xt_entry_target *t)
-{
-       struct xt_connmark_target_info *markinfo
-               = (struct xt_connmark_target_info *)t->data;
-
-       markinfo->mask = 0xffffffffUL;
-}
-
-static void
-connmark_tg_save(const void *ip, const struct xt_entry_target *target)
-{
-       const struct xt_connmark_tginfo1 *info = (const void *)target->data;
-
-       switch (info->mode) {
-       case XT_CONNMARK_SET:
-               printf("--set-xmark 0x%x/0x%x ", info->ctmark, info->ctmask);
-               break;
-       case XT_CONNMARK_SAVE:
-               printf("--save-mark --nfmask 0x%x --ctmask 0x%x ",
-                      info->nfmask, info->ctmask);
-               break;
-       case XT_CONNMARK_RESTORE:
-               printf("--restore-mark --nfmask 0x%x --ctmask 0x%x ",
-                      info->nfmask, info->ctmask);
-               break;
-       default:
-               printf("ERROR: UNKNOWN CONNMARK MODE");
-               break;
-       }
-}
-
-static struct xtables_target connmark_target = {
-       .family         = AF_INET,
-       .name           = "CONNMARK",
-       .revision       = 0,
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_connmark_target_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_connmark_target_info)),
-       .help           = CONNMARK_help,
-       .init           = CONNMARK_init,
-       .parse          = CONNMARK_parse,
-       .final_check    = connmark_tg_check,
-       .print          = CONNMARK_print,
-       .save           = CONNMARK_save,
-       .extra_opts     = CONNMARK_opts,
-};
-
-static struct xtables_target connmark_target6 = {
-       .family         = AF_INET6,
-       .name           = "CONNMARK",
-       .revision       = 0,
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_connmark_target_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_connmark_target_info)),
-       .help           = CONNMARK_help,
-       .init           = CONNMARK_init,
-       .parse          = CONNMARK_parse,
-       .final_check    = connmark_tg_check,
-       .print          = CONNMARK_print,
-       .save           = CONNMARK_save,
-       .extra_opts     = CONNMARK_opts,
-};
-
-static struct xtables_target connmark_tg_reg = {
-       .version        = XTABLES_VERSION,
-       .name           = "CONNMARK",
-       .revision       = 1,
-       .family         = AF_INET,
-       .size           = XT_ALIGN(sizeof(struct xt_connmark_tginfo1)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_connmark_tginfo1)),
-       .help           = connmark_tg_help,
-       .init           = connmark_tg_init,
-       .parse          = connmark_tg_parse,
-       .final_check    = connmark_tg_check,
-       .print          = connmark_tg_print,
-       .save           = connmark_tg_save,
-       .extra_opts     = connmark_tg_opts,
-};
-
-static struct xtables_target connmark_tg6_reg = {
-       .version        = XTABLES_VERSION,
-       .name           = "CONNMARK",
-       .revision       = 1,
-       .family         = AF_INET6,
-       .size           = XT_ALIGN(sizeof(struct xt_connmark_tginfo1)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_connmark_tginfo1)),
-       .help           = connmark_tg_help,
-       .init           = connmark_tg_init,
-       .parse          = connmark_tg_parse,
-       .final_check    = connmark_tg_check,
-       .print          = connmark_tg_print,
-       .save           = connmark_tg_save,
-       .extra_opts     = connmark_tg_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&connmark_target);
-       xtables_register_target(&connmark_target6);
-       xtables_register_target(&connmark_tg_reg);
-       xtables_register_target(&connmark_tg6_reg);
-}
diff --git a/extensions/libxt_CONNMARK.man b/extensions/libxt_CONNMARK.man
deleted file mode 100644 (file)
index e39a02a..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-This module sets the netfilter mark value associated with a connection.
-.TP
-\fB--set-xmark\fR \fIvalue\fR[\fB/\fR\fImask\fR]
-Zero out the bits given by \fImask\fR and XOR \fIvalue\fR into the ctmark.
-.TP
-\fB--save-mark\fR [\fB--nfmask\fR \fInfmask\fR] [\fB--ctmask\fR \fIctmask\fR]
-Copy the packet mark (nfmark) to the connection mark (ctmark) using the given
-masks. The new nfmark value is determined as follows:
-.IP
-ctmark = (ctmark & ~ctmask) ^ (nfmark & nfmask)
-.IP
-i.e. \fIctmask\fR defines what bits to clear and \fInfmask\fR what bits of the
-nfmark to XOR into the ctmark. \fIctmask\fR and \fInfmask\fR default to
-0xFFFFFFFF.
-.TP
-\fB--restore-mark\fR [\fB--nfmask\fR \fInfmask\fR] [\fB--ctmask\fR \fIctmask\fR]
-Copy the connection mark (ctmark) to the packet mark (nfmark) using the given
-masks. The new ctmark value is determined as follows:
-.IP
-nfmark = (nfmark & ~\fInfmask\fR) ^ (ctmark & \fIctmask\fR);
-.IP
-i.e. \fInfmask\fR defines what bits to clear and \fIctmask\fR what bits of the
-ctmark to XOR into the nfmark. \fIctmask\fR and \fInfmask\fR default to
-0xFFFFFFFF.
-.IP
-\fB--restore-mark\fR is only valid in the \fBmangle\fR table.
-.PP
-The following mnemonics are available for \fB--set-xmark\fR:
-.TP
-\fB--and-mark\fR \fIbits\fR
-Binary AND the ctmark with \fIbits\fR. (Mnemonic for \fB--set-xmark
-0/\fR\fIinvbits\fR, where \fIinvbits\fR is the binary negation of \fIbits\fR.)
-.TP
-\fB--or-mark\fR \fIbits\fR
-Binary OR the ctmark with \fIbits\fR. (Mnemonic for \fB--set-xmark\fR
-\fIbits\fR\fB/\fR\fIbits\fR.)
-.TP
-\fB--xor-mark\fR \fIbits\fR
-Binary XOR the ctmark with \fIbits\fR. (Mnemonic for \fB--set-xmark\fR
-\fIbits\fR\fB/0\fR.)
-.TP
-\fB--set-mark\fR \fIvalue\fR[\fB/\fR\fImask\fR]
-Set the connection mark. If a mask is specified then only those bits set in the
-mask are modified.
-.TP
-\fB--save-mark\fR [\fB--mask\fR \fImask\fR]
-Copy the nfmark to the ctmark. If a mask is specified, only those bits are
-copied.
-.TP
-\fB--restore-mark\fR [\fB--mask\fR \fImask\fR]
-Copy the ctmark to the nfmark. If a mask is specified, only those bits are
-copied. This is only valid in the \fBmangle\fR table.
diff --git a/extensions/libxt_CONNSECMARK.c b/extensions/libxt_CONNSECMARK.c
deleted file mode 100644 (file)
index 2c425cb..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Shared library add-on to iptables to add CONNSECMARK target support.
- *
- * Based on the MARK and CONNMARK targets.
- *
- * Copyright (C) 2006 Red Hat, Inc., James Morris <jmorris@redhat.com>
- */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <xtables.h>
-#include <linux/netfilter/xt_CONNSECMARK.h>
-
-#define PFX "CONNSECMARK target: "
-
-static void CONNSECMARK_help(void)
-{
-       printf(
-"CONNSECMARK target options:\n"
-"  --save                   Copy security mark from packet to conntrack\n"
-"  --restore                Copy security mark from connection to packet\n");
-}
-
-static const struct option CONNSECMARK_opts[] = {
-       { "save", 0, NULL, '1' },
-       { "restore", 0, NULL, '2' },
-       { .name = NULL }
-};
-
-static int
-CONNSECMARK_parse(int c, char **argv, int invert, unsigned int *flags,
-                  const void *entry, struct xt_entry_target **target)
-{
-       struct xt_connsecmark_target_info *info =
-               (struct xt_connsecmark_target_info*)(*target)->data;
-
-       switch (c) {
-       case '1':
-               if (*flags & CONNSECMARK_SAVE)
-                       exit_error(PARAMETER_PROBLEM, PFX
-                                  "Can't specify --save twice");
-               info->mode = CONNSECMARK_SAVE;
-               *flags |= CONNSECMARK_SAVE;
-               break;
-
-       case '2':
-               if (*flags & CONNSECMARK_RESTORE)
-                       exit_error(PARAMETER_PROBLEM, PFX
-                                  "Can't specify --restore twice");
-               info->mode = CONNSECMARK_RESTORE;
-               *flags |= CONNSECMARK_RESTORE;
-               break;
-
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static void CONNSECMARK_check(unsigned int flags)
-{
-       if (!flags)
-               exit_error(PARAMETER_PROBLEM, PFX "parameter required");
-
-       if (flags == (CONNSECMARK_SAVE|CONNSECMARK_RESTORE))
-               exit_error(PARAMETER_PROBLEM, PFX "only one flag of --save "
-                          "or --restore is allowed");
-}
-
-static void print_connsecmark(struct xt_connsecmark_target_info *info)
-{
-       switch (info->mode) {
-       case CONNSECMARK_SAVE:
-               printf("save ");
-               break;
-               
-       case CONNSECMARK_RESTORE:
-               printf("restore ");
-               break;
-               
-       default:
-               exit_error(OTHER_PROBLEM, PFX "invalid mode %hhu\n", info->mode);
-       }
-}
-
-static void
-CONNSECMARK_print(const void *ip, const struct xt_entry_target *target,
-                  int numeric)
-{
-       struct xt_connsecmark_target_info *info =
-               (struct xt_connsecmark_target_info*)(target)->data;
-
-       printf("CONNSECMARK ");
-       print_connsecmark(info);
-}
-
-static void
-CONNSECMARK_save(const void *ip, const struct xt_entry_target *target)
-{
-       struct xt_connsecmark_target_info *info =
-               (struct xt_connsecmark_target_info*)target->data;
-
-       printf("--");
-       print_connsecmark(info);
-}
-
-static struct xtables_target connsecmark_target = {
-       .family         = AF_INET,
-       .name           = "CONNSECMARK",
-       .version        = XTABLES_VERSION,
-       .revision       = 0,
-       .size           = XT_ALIGN(sizeof(struct xt_connsecmark_target_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_connsecmark_target_info)),
-       .parse          = CONNSECMARK_parse,
-       .help           = CONNSECMARK_help,
-       .final_check    = CONNSECMARK_check,
-       .print          = CONNSECMARK_print,
-       .save           = CONNSECMARK_save,
-       .extra_opts     = CONNSECMARK_opts,
-};
-
-static struct xtables_target connsecmark_target6 = {
-       .family         = AF_INET6,
-       .name           = "CONNSECMARK",
-       .version        = XTABLES_VERSION,
-       .revision       = 0,
-       .size           = XT_ALIGN(sizeof(struct xt_connsecmark_target_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_connsecmark_target_info)),
-       .parse          = CONNSECMARK_parse,
-       .help           = CONNSECMARK_help,
-       .final_check    = CONNSECMARK_check,
-       .print          = CONNSECMARK_print,
-       .save           = CONNSECMARK_save,
-       .extra_opts     = CONNSECMARK_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&connsecmark_target);
-       xtables_register_target(&connsecmark_target6);
-}
diff --git a/extensions/libxt_CONNSECMARK.man b/extensions/libxt_CONNSECMARK.man
deleted file mode 100644 (file)
index b94353a..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-This module copies security markings from packets to connections
-(if unlabeled), and from connections back to packets (also only
-if unlabeled).  Typically used in conjunction with SECMARK, it is
-only valid in the
-.B mangle
-table.
-.TP
-.B --save
-If the packet has a security marking, copy it to the connection
-if the connection is not marked.
-.TP
-.B --restore
-If the packet does not have a security marking, and the connection
-does, copy the security marking from the connection to the packet.
-
diff --git a/extensions/libxt_DSCP.c b/extensions/libxt_DSCP.c
deleted file mode 100644 (file)
index e9369ab..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-/* Shared library add-on to iptables for DSCP
- *
- * (C) 2000- 2002 by Matthew G. Marsh <mgm@paktronix.com>,
- *                  Harald Welte <laforge@gnumonks.org>
- *
- * This program is distributed under the terms of GNU GPL v2, 1991
- *
- * libipt_DSCP.c borrowed heavily from libipt_TOS.c
- *
- * --set-class added by Iain Barnes
- */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-
-#include <xtables.h>
-#include <linux/netfilter/x_tables.h>
-#include <linux/netfilter/xt_DSCP.h>
-
-/* This is evil, but it's my code - HW*/
-#include "dscp_helper.c"
-
-static void DSCP_help(void)
-{
-       printf(
-"DSCP target options\n"
-"  --set-dscp value            Set DSCP field in packet header to value\n"
-"                              This value can be in decimal (ex: 32)\n"
-"                              or in hex (ex: 0x20)\n"
-"  --set-dscp-class class      Set the DSCP field in packet header to the\n"
-"                              value represented by the DiffServ class value.\n"
-"                              This class may be EF,BE or any of the CSxx\n"
-"                              or AFxx classes.\n"
-"\n"
-"                              These two options are mutually exclusive !\n"
-);
-}
-
-static const struct option DSCP_opts[] = {
-       { "set-dscp", 1, NULL, 'F' },
-       { "set-dscp-class", 1, NULL, 'G' },
-       { .name = NULL }
-};
-
-static void
-parse_dscp(const char *s, struct xt_DSCP_info *dinfo)
-{
-       unsigned int dscp;
-       
-       if (string_to_number(s, 0, 255, &dscp) == -1)
-               exit_error(PARAMETER_PROBLEM,
-                          "Invalid dscp `%s'\n", s);
-
-       if (dscp > XT_DSCP_MAX)
-               exit_error(PARAMETER_PROBLEM,
-                          "DSCP `%d` out of range\n", dscp);
-
-       dinfo->dscp = (u_int8_t )dscp;
-       return;
-}
-
-
-static void
-parse_class(const char *s, struct xt_DSCP_info *dinfo)
-{
-       unsigned int dscp = class_to_dscp(s);
-
-       /* Assign the value */
-       dinfo->dscp = (u_int8_t)dscp;
-}
-
-
-static int DSCP_parse(int c, char **argv, int invert, unsigned int *flags,
-                      const void *entry, struct xt_entry_target **target)
-{
-       struct xt_DSCP_info *dinfo
-               = (struct xt_DSCP_info *)(*target)->data;
-
-       switch (c) {
-       case 'F':
-               if (*flags)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "DSCP target: Only use --set-dscp ONCE!");
-               parse_dscp(optarg, dinfo);
-               *flags = 1;
-               break;
-       case 'G':
-               if (*flags)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "DSCP target: Only use --set-dscp-class ONCE!");
-               parse_class(optarg, dinfo);
-               *flags = 1;
-               break;
-
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static void DSCP_check(unsigned int flags)
-{
-       if (!flags)
-               exit_error(PARAMETER_PROBLEM,
-                          "DSCP target: Parameter --set-dscp is required");
-}
-
-static void
-print_dscp(u_int8_t dscp, int numeric)
-{
-       printf("0x%02x ", dscp);
-}
-
-/* Prints out the targinfo. */
-static void DSCP_print(const void *ip, const struct xt_entry_target *target,
-                       int numeric)
-{
-       const struct xt_DSCP_info *dinfo =
-               (const struct xt_DSCP_info *)target->data;
-       printf("DSCP set ");
-       print_dscp(dinfo->dscp, numeric);
-}
-
-/* Saves the union ipt_targinfo in parsable form to stdout. */
-static void DSCP_save(const void *ip, const struct xt_entry_target *target)
-{
-       const struct xt_DSCP_info *dinfo =
-               (const struct xt_DSCP_info *)target->data;
-
-       printf("--set-dscp 0x%02x ", dinfo->dscp);
-}
-
-static struct xtables_target dscp_target = {
-       .family         = AF_INET,
-       .name           = "DSCP",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_DSCP_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_DSCP_info)),
-       .help           = DSCP_help,
-       .parse          = DSCP_parse,
-       .final_check    = DSCP_check,
-       .print          = DSCP_print,
-       .save           = DSCP_save,
-       .extra_opts     = DSCP_opts,
-};
-
-static struct xtables_target dscp_target6 = {
-       .family         = AF_INET6,
-       .name           = "DSCP",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_DSCP_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_DSCP_info)),
-       .help           = DSCP_help,
-       .parse          = DSCP_parse,
-       .final_check    = DSCP_check,
-       .print          = DSCP_print,
-       .save           = DSCP_save,
-       .extra_opts     = DSCP_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&dscp_target);
-       xtables_register_target(&dscp_target6);
-}
diff --git a/extensions/libxt_DSCP.man b/extensions/libxt_DSCP.man
deleted file mode 100644 (file)
index e8e5cf5..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-This target allows to alter the value of the DSCP bits within the TOS
-header of the IPv4 packet.  As this manipulates a packet, it can only
-be used in the mangle table.
-.TP
-.BI "--set-dscp " "value"
-Set the DSCP field to a numerical value (can be decimal or hex)
-.TP
-.BI "--set-dscp-class " "class"
-Set the DSCP field to a DiffServ class.
diff --git a/extensions/libxt_MARK.c b/extensions/libxt_MARK.c
deleted file mode 100644 (file)
index 8996ad4..0000000
+++ /dev/null
@@ -1,376 +0,0 @@
-/* Shared library add-on to iptables to add MARK target support. */
-#include <stdbool.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-
-#include <xtables.h>
-#include <linux/netfilter/x_tables.h>
-#include <linux/netfilter/xt_MARK.h>
-
-enum {
-       F_MARK = 1 << 0,
-};
-
-/* Function which prints out usage message. */
-static void MARK_help(void)
-{
-       printf(
-"MARK target options:\n"
-"  --set-mark value                   Set nfmark value\n"
-"  --and-mark value                   Binary AND the nfmark with value\n"
-"  --or-mark  value                   Binary OR  the nfmark with value\n"
-"  --copy-xid                         Set nfmark to be the connection xid (PlanetLab specific)\n"
-);
-}
-
-static const struct option MARK_opts[] = {
-       { "set-mark", 1, NULL, '1' },
-       { "and-mark", 1, NULL, '2' },
-       { "or-mark", 1, NULL, '3' },
-       { "copy-xid", 1, 0, '4' },
-       { .name = NULL }
-};
-
-static const struct option mark_tg_opts[] = {
-       {.name = "set-xmark", .has_arg = true, .val = 'X'},
-       {.name = "set-mark",  .has_arg = true, .val = '='},
-       {.name = "and-mark",  .has_arg = true, .val = '&'},
-       {.name = "or-mark",   .has_arg = true, .val = '|'},
-       {.name = "xor-mark",  .has_arg = true, .val = '^'},
-       {.name = "copy-xid",  .has_arg = true, .val = '%'},
-       { .name = NULL }
-};
-
-static void mark_tg_help(void)
-{
-       printf(
-"MARK target options:\n"
-"  --set-xmark value[/mask]  Clear bits in mask and XOR value into nfmark\n"
-"  --set-mark value[/mask]   Clear bits in mask and OR value into nfmark\n"
-"  --and-mark bits           Binary AND the nfmark with bits\n"
-"  --or-mark bits            Binary OR the nfmark with bits\n"
-"  --copy-xid                Set nfmark to be the connection xid (PlanetLab specific)\n"
-"  --xor-mask bits           Binary XOR the nfmark with bits\n"
-"\n");
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int
-MARK_parse_v0(int c, char **argv, int invert, unsigned int *flags,
-              const void *entry, struct xt_entry_target **target)
-{
-       struct xt_mark_target_info *markinfo
-               = (struct xt_mark_target_info *)(*target)->data;
-
-       switch (c) {
-       case '1':
-               if (string_to_number_l(optarg, 0, 0, 
-                                    &markinfo->mark))
-                       exit_error(PARAMETER_PROBLEM, "Bad MARK value `%s'", optarg);
-               if (*flags)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "MARK target: Can't specify --set-mark twice");
-               *flags = 1;
-               break;
-       case '2':
-               exit_error(PARAMETER_PROBLEM,
-                          "MARK target: kernel too old for --and-mark");
-       case '3':
-               exit_error(PARAMETER_PROBLEM,
-                          "MARK target: kernel too old for --or-mark");
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static void MARK_check(unsigned int flags)
-{
-       if (!flags)
-               exit_error(PARAMETER_PROBLEM,
-                          "MARK target: Parameter --set/and/or-mark"
-                          " is required");
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int
-MARK_parse_v1(int c, char **argv, int invert, unsigned int *flags,
-              const void *entry, struct xt_entry_target **target)
-{
-       struct xt_mark_target_info_v1 *markinfo
-               = (struct xt_mark_target_info_v1 *)(*target)->data;
-
-       switch (c) {
-       case '1':
-               markinfo->mode = XT_MARK_SET;
-               break;
-       case '2':
-               markinfo->mode = XT_MARK_AND;
-               break;
-       case '3':
-               markinfo->mode = XT_MARK_OR;
-               break;
-       case '4':
-               markinfo->mode = IPT_MARK_COPYXID;
-               break;
-       default:
-               return 0;
-       }
-
-       if (string_to_number_l(optarg, 0, 0, &markinfo->mark))
-               exit_error(PARAMETER_PROBLEM, "Bad MARK value `%s'", optarg);
-
-       if (*flags)
-               exit_error(PARAMETER_PROBLEM,
-                          "MARK target: Can't specify --set-mark twice");
-
-       *flags = 1;
-       return 1;
-}
-
-static int mark_tg_parse(int c, char **argv, int invert, unsigned int *flags,
-                         const void *entry, struct xt_entry_target **target)
-{
-       struct xt_mark_tginfo2 *info = (void *)(*target)->data;
-       unsigned int value, mask = ~0U;
-       char *end;
-
-       switch (c) {
-       case 'X': /* --set-xmark */
-       case '=': /* --set-mark */
-               param_act(P_ONE_ACTION, "MARK", *flags & F_MARK);
-               param_act(P_NO_INVERT, "MARK", "--set-xmark/--set-mark", invert);
-               if (!strtonum(optarg, &end, &value, 0, ~0U))
-                       param_act(P_BAD_VALUE, "MARK", "--set-xmark/--set-mark", optarg);
-               if (*end == '/')
-                       if (!strtonum(end + 1, &end, &mask, 0, ~0U))
-                               param_act(P_BAD_VALUE, "MARK", "--set-xmark/--set-mark", optarg);
-               if (*end != '\0')
-                       param_act(P_BAD_VALUE, "MARK", "--set-xmark/--set-mark", optarg);
-               info->mark = value;
-               info->mask = mask;
-
-               if (c == '=')
-                       info->mask = value | mask;
-               break;
-
-       case '&': /* --and-mark */
-               param_act(P_ONE_ACTION, "MARK", *flags & F_MARK);
-               param_act(P_NO_INVERT, "MARK", "--and-mark", invert);
-               if (!strtonum(optarg, NULL, &mask, 0, ~0U))
-                       param_act(P_BAD_VALUE, "MARK", "--and-mark", optarg);
-               info->mark = 0;
-               info->mask = ~mask;
-               break;
-
-       case '|': /* --or-mark */
-               param_act(P_ONE_ACTION, "MARK", *flags & F_MARK);
-               param_act(P_NO_INVERT, "MARK", "--or-mark", invert);
-               if (!strtonum(optarg, NULL, &value, 0, ~0U))
-                       param_act(P_BAD_VALUE, "MARK", "--or-mark", optarg);
-               info->mark = value;
-               info->mask = value;
-               break;
-
-       case '^': /* --xor-mark */
-               param_act(P_ONE_ACTION, "MARK", *flags & F_MARK);
-               param_act(P_NO_INVERT, "MARK", "--xor-mark", invert);
-               if (!strtonum(optarg, NULL, &value, 0, ~0U))
-                       param_act(P_BAD_VALUE, "MARK", "--xor-mark", optarg);
-               info->mark = value;
-               info->mask = 0;
-               break;
-
-    case '%': /* --copy-xid */
-        param_act(P_ONE_ACTION, "MARK", *flags & F_MARK);
-        info->mark = ~0U; /* Consistency check */
-        info->mask = mask;
-        break;
-
-       default:
-               return false;
-       }
-
-       *flags |= F_MARK;
-       return true;
-}
-
-static void mark_tg_check(unsigned int flags)
-{
-       if (flags == 0)
-               exit_error(PARAMETER_PROBLEM, "MARK: One of the --set-xmark, "
-                          "--{and,or,xor,set}-mark, or --copy-xid options is required");
-}
-
-static void
-print_mark(unsigned long mark)
-{
-       printf("0x%lx ", mark);
-}
-
-/* Prints out the targinfo. */
-static void MARK_print_v0(const void *ip,
-                          const struct xt_entry_target *target, int numeric)
-{
-       const struct xt_mark_target_info *markinfo =
-               (const struct xt_mark_target_info *)target->data;
-       printf("MARK set ");
-       print_mark(markinfo->mark);
-}
-
-/* Saves the union ipt_targinfo in parsable form to stdout. */
-static void MARK_save_v0(const void *ip, const struct xt_entry_target *target)
-{
-       const struct xt_mark_target_info *markinfo =
-               (const struct xt_mark_target_info *)target->data;
-
-       printf("--set-mark ");
-       print_mark(markinfo->mark);
-}
-
-/* Prints out the targinfo. */
-static void MARK_print_v1(const void *ip, const struct xt_entry_target *target,
-                          int numeric)
-{
-       const struct xt_mark_target_info_v1 *markinfo =
-               (const struct xt_mark_target_info_v1 *)target->data;
-
-       switch (markinfo->mode) {
-       case XT_MARK_SET:
-               printf("MARK set ");
-               break;
-       case XT_MARK_AND:
-               printf("MARK and ");
-               break;
-       case XT_MARK_OR: 
-               printf("MARK or ");
-               break;
-       case IPT_MARK_COPYXID: 
-               printf("MARK copyxid ");
-               break;
-       }
-       print_mark(markinfo->mark);
-}
-
-static void mark_tg_print(const void *ip, const struct xt_entry_target *target,
-        int numeric)
-{
-    const struct xt_mark_tginfo2 *info = (const void *)target->data;
-
-    if (info->mark == ~0U) 
-        printf("MARK copy-xid");
-    else if (info->mark == 0)
-        printf("MARK and 0x%x ", (unsigned int)(u_int32_t)~info->mask);
-    else if (info->mark == info->mask)
-        printf("MARK or 0x%x ", info->mark);
-    else if (info->mask == 0)
-        printf("MARK xor 0x%x ", info->mark);
-    else
-        printf("MARK xset 0x%x/0x%x ", info->mark, info->mask);
-}
-
-/* Saves the union ipt_targinfo in parsable form to stdout. */
-static void MARK_save_v1(const void *ip, const struct xt_entry_target *target)
-{
-       const struct xt_mark_target_info_v1 *markinfo =
-               (const struct xt_mark_target_info_v1 *)target->data;
-
-       switch (markinfo->mode) {
-       case XT_MARK_SET:
-               printf("--set-mark ");
-               break;
-       case XT_MARK_AND:
-               printf("--and-mark ");
-               break;
-       case XT_MARK_OR: 
-               printf("--or-mark ");
-               break;
-       case IPT_MARK_COPYXID: 
-               printf("--copy-xid ");
-               break;
-       }
-       print_mark(markinfo->mark);
-}
-
-static void mark_tg_save(const void *ip, const struct xt_entry_target *target)
-{
-       const struct xt_mark_tginfo2 *info = (const void *)target->data;
-
-    if (info->mark==~0U)
-        printf("--copy-xid 0x0");
-    else
-           printf("--set-xmark 0x%x/0x%x ", info->mark, info->mask);
-}
-
-static struct xtables_target mark_target_v0 = {
-       .family         = AF_INET,
-       .name           = "MARK",
-       .version        = XTABLES_VERSION,
-       .revision       = 0,
-       .size           = XT_ALIGN(sizeof(struct xt_mark_target_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_mark_target_info)),
-       .help           = MARK_help,
-       .parse          = MARK_parse_v0,
-       .final_check    = MARK_check,
-       .print          = MARK_print_v0,
-       .save           = MARK_save_v0,
-       .extra_opts     = MARK_opts,
-};
-
-static struct xtables_target mark_target_v1 = {
-       .family         = AF_INET,
-       .name           = "MARK",
-       .version        = XTABLES_VERSION,
-       .revision       = 1,
-       .size           = XT_ALIGN(sizeof(struct xt_mark_target_info_v1)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_mark_target_info_v1)),
-       .help           = MARK_help,
-       .parse          = MARK_parse_v1,
-       .final_check    = MARK_check,
-       .print          = MARK_print_v1,
-       .save           = MARK_save_v1,
-       .extra_opts     = MARK_opts,
-};
-
-static struct xtables_target mark_target6_v0 = {
-       .family         = AF_INET6,
-       .name           = "MARK",
-       .version        = XTABLES_VERSION,
-       .revision       = 0,
-       .size           = XT_ALIGN(sizeof(struct xt_mark_target_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_mark_target_info)),
-       .help           = MARK_help,
-       .parse          = MARK_parse_v0,
-       .final_check    = MARK_check,
-       .print          = MARK_print_v0,
-       .save           = MARK_save_v0,
-       .extra_opts     = MARK_opts,
-};
-
-static struct xtables_target mark_tg_reg_v2 = {
-       .version       = XTABLES_VERSION,
-       .name          = "MARK",
-       .revision      = 2,
-       .family        = AF_UNSPEC,
-       .size          = XT_ALIGN(sizeof(struct xt_mark_tginfo2)),
-       .userspacesize = XT_ALIGN(sizeof(struct xt_mark_tginfo2)),
-       .help          = mark_tg_help,
-       .parse         = mark_tg_parse,
-       .final_check   = mark_tg_check,
-       .print         = mark_tg_print,
-       .save          = mark_tg_save,
-       .extra_opts    = mark_tg_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&mark_target_v0);
-       xtables_register_target(&mark_target_v1);
-       xtables_register_target(&mark_target6_v0);
-       xtables_register_target(&mark_tg_reg_v2);
-}
diff --git a/extensions/libxt_MARK.c.orig b/extensions/libxt_MARK.c.orig
deleted file mode 100644 (file)
index 5b880ce..0000000
+++ /dev/null
@@ -1,351 +0,0 @@
-/* Shared library add-on to iptables to add MARK target support. */
-#include <stdbool.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-
-#include <xtables.h>
-#include <linux/netfilter/x_tables.h>
-#include <linux/netfilter/xt_MARK.h>
-
-enum {
-       F_MARK = 1 << 0,
-};
-
-/* Function which prints out usage message. */
-static void MARK_help(void)
-{
-       printf(
-"MARK target options:\n"
-"  --set-mark value                   Set nfmark value\n"
-"  --and-mark value                   Binary AND the nfmark with value\n"
-"  --or-mark  value                   Binary OR  the nfmark with value\n");
-}
-
-static const struct option MARK_opts[] = {
-       { "set-mark", 1, NULL, '1' },
-       { "and-mark", 1, NULL, '2' },
-       { "or-mark", 1, NULL, '3' },
-       { .name = NULL }
-};
-
-static const struct option mark_tg_opts[] = {
-       {.name = "set-xmark", .has_arg = true, .val = 'X'},
-       {.name = "set-mark",  .has_arg = true, .val = '='},
-       {.name = "and-mark",  .has_arg = true, .val = '&'},
-       {.name = "or-mark",   .has_arg = true, .val = '|'},
-       {.name = "xor-mark",  .has_arg = true, .val = '^'},
-       { .name = NULL }
-};
-
-static void mark_tg_help(void)
-{
-       printf(
-"MARK target options:\n"
-"  --set-xmark value[/mask]  Clear bits in mask and XOR value into nfmark\n"
-"  --set-mark value[/mask]   Clear bits in mask and OR value into nfmark\n"
-"  --and-mark bits           Binary AND the nfmark with bits\n"
-"  --or-mark bits            Binary OR the nfmark with bits\n"
-"  --xor-mask bits           Binary XOR the nfmark with bits\n"
-"\n");
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int
-MARK_parse_v0(int c, char **argv, int invert, unsigned int *flags,
-              const void *entry, struct xt_entry_target **target)
-{
-       struct xt_mark_target_info *markinfo
-               = (struct xt_mark_target_info *)(*target)->data;
-
-       switch (c) {
-       case '1':
-               if (string_to_number_l(optarg, 0, 0, 
-                                    &markinfo->mark))
-                       exit_error(PARAMETER_PROBLEM, "Bad MARK value `%s'", optarg);
-               if (*flags)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "MARK target: Can't specify --set-mark twice");
-               *flags = 1;
-               break;
-       case '2':
-               exit_error(PARAMETER_PROBLEM,
-                          "MARK target: kernel too old for --and-mark");
-       case '3':
-               exit_error(PARAMETER_PROBLEM,
-                          "MARK target: kernel too old for --or-mark");
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static void MARK_check(unsigned int flags)
-{
-       if (!flags)
-               exit_error(PARAMETER_PROBLEM,
-                          "MARK target: Parameter --set/and/or-mark"
-                          " is required");
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int
-MARK_parse_v1(int c, char **argv, int invert, unsigned int *flags,
-              const void *entry, struct xt_entry_target **target)
-{
-       struct xt_mark_target_info_v1 *markinfo
-               = (struct xt_mark_target_info_v1 *)(*target)->data;
-
-       switch (c) {
-       case '1':
-               markinfo->mode = XT_MARK_SET;
-               break;
-       case '2':
-               markinfo->mode = XT_MARK_AND;
-               break;
-       case '3':
-               markinfo->mode = XT_MARK_OR;
-               break;
-       default:
-               return 0;
-       }
-
-       if (string_to_number_l(optarg, 0, 0, &markinfo->mark))
-               exit_error(PARAMETER_PROBLEM, "Bad MARK value `%s'", optarg);
-
-       if (*flags)
-               exit_error(PARAMETER_PROBLEM,
-                          "MARK target: Can't specify --set-mark twice");
-
-       *flags = 1;
-       return 1;
-}
-
-static int mark_tg_parse(int c, char **argv, int invert, unsigned int *flags,
-                         const void *entry, struct xt_entry_target **target)
-{
-       struct xt_mark_tginfo2 *info = (void *)(*target)->data;
-       unsigned int value, mask = ~0U;
-       char *end;
-
-       switch (c) {
-       case 'X': /* --set-xmark */
-       case '=': /* --set-mark */
-               param_act(P_ONE_ACTION, "MARK", *flags & F_MARK);
-               param_act(P_NO_INVERT, "MARK", "--set-xmark/--set-mark", invert);
-               if (!strtonum(optarg, &end, &value, 0, ~0U))
-                       param_act(P_BAD_VALUE, "MARK", "--set-xmark/--set-mark", optarg);
-               if (*end == '/')
-                       if (!strtonum(end + 1, &end, &mask, 0, ~0U))
-                               param_act(P_BAD_VALUE, "MARK", "--set-xmark/--set-mark", optarg);
-               if (*end != '\0')
-                       param_act(P_BAD_VALUE, "MARK", "--set-xmark/--set-mark", optarg);
-               info->mark = value;
-               info->mask = mask;
-
-               if (c == '=')
-                       info->mask = value | mask;
-               break;
-
-       case '&': /* --and-mark */
-               param_act(P_ONE_ACTION, "MARK", *flags & F_MARK);
-               param_act(P_NO_INVERT, "MARK", "--and-mark", invert);
-               if (!strtonum(optarg, NULL, &mask, 0, ~0U))
-                       param_act(P_BAD_VALUE, "MARK", "--and-mark", optarg);
-               info->mark = 0;
-               info->mask = ~mask;
-               break;
-
-       case '|': /* --or-mark */
-               param_act(P_ONE_ACTION, "MARK", *flags & F_MARK);
-               param_act(P_NO_INVERT, "MARK", "--or-mark", invert);
-               if (!strtonum(optarg, NULL, &value, 0, ~0U))
-                       param_act(P_BAD_VALUE, "MARK", "--or-mark", optarg);
-               info->mark = value;
-               info->mask = value;
-               break;
-
-       case '^': /* --xor-mark */
-               param_act(P_ONE_ACTION, "MARK", *flags & F_MARK);
-               param_act(P_NO_INVERT, "MARK", "--xor-mark", invert);
-               if (!strtonum(optarg, NULL, &value, 0, ~0U))
-                       param_act(P_BAD_VALUE, "MARK", "--xor-mark", optarg);
-               info->mark = value;
-               info->mask = 0;
-               break;
-
-       default:
-               return false;
-       }
-
-       *flags |= F_MARK;
-       return true;
-}
-
-static void mark_tg_check(unsigned int flags)
-{
-       if (flags == 0)
-               exit_error(PARAMETER_PROBLEM, "MARK: One of the --set-xmark, "
-                          "--{and,or,xor,set}-mark options is required");
-}
-
-static void
-print_mark(unsigned long mark)
-{
-       printf("0x%lx ", mark);
-}
-
-/* Prints out the targinfo. */
-static void MARK_print_v0(const void *ip,
-                          const struct xt_entry_target *target, int numeric)
-{
-       const struct xt_mark_target_info *markinfo =
-               (const struct xt_mark_target_info *)target->data;
-       printf("MARK set ");
-       print_mark(markinfo->mark);
-}
-
-/* Saves the union ipt_targinfo in parsable form to stdout. */
-static void MARK_save_v0(const void *ip, const struct xt_entry_target *target)
-{
-       const struct xt_mark_target_info *markinfo =
-               (const struct xt_mark_target_info *)target->data;
-
-       printf("--set-mark ");
-       print_mark(markinfo->mark);
-}
-
-/* Prints out the targinfo. */
-static void MARK_print_v1(const void *ip, const struct xt_entry_target *target,
-                          int numeric)
-{
-       const struct xt_mark_target_info_v1 *markinfo =
-               (const struct xt_mark_target_info_v1 *)target->data;
-
-       switch (markinfo->mode) {
-       case XT_MARK_SET:
-               printf("MARK set ");
-               break;
-       case XT_MARK_AND:
-               printf("MARK and ");
-               break;
-       case XT_MARK_OR: 
-               printf("MARK or ");
-               break;
-       }
-       print_mark(markinfo->mark);
-}
-
-static void mark_tg_print(const void *ip, const struct xt_entry_target *target,
-                          int numeric)
-{
-       const struct xt_mark_tginfo2 *info = (const void *)target->data;
-
-       if (info->mark == 0)
-               printf("MARK and 0x%x ", (unsigned int)(u_int32_t)~info->mask);
-       else if (info->mark == info->mask)
-               printf("MARK or 0x%x ", info->mark);
-       else if (info->mask == 0)
-               printf("MARK xor 0x%x ", info->mark);
-       else
-               printf("MARK xset 0x%x/0x%x ", info->mark, info->mask);
-}
-
-/* Saves the union ipt_targinfo in parsable form to stdout. */
-static void MARK_save_v1(const void *ip, const struct xt_entry_target *target)
-{
-       const struct xt_mark_target_info_v1 *markinfo =
-               (const struct xt_mark_target_info_v1 *)target->data;
-
-       switch (markinfo->mode) {
-       case XT_MARK_SET:
-               printf("--set-mark ");
-               break;
-       case XT_MARK_AND:
-               printf("--and-mark ");
-               break;
-       case XT_MARK_OR: 
-               printf("--or-mark ");
-               break;
-       }
-       print_mark(markinfo->mark);
-}
-
-static void mark_tg_save(const void *ip, const struct xt_entry_target *target)
-{
-       const struct xt_mark_tginfo2 *info = (const void *)target->data;
-
-       printf("--set-xmark 0x%x/0x%x ", info->mark, info->mask);
-}
-
-static struct xtables_target mark_target_v0 = {
-       .family         = AF_INET,
-       .name           = "MARK",
-       .version        = XTABLES_VERSION,
-       .revision       = 0,
-       .size           = XT_ALIGN(sizeof(struct xt_mark_target_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_mark_target_info)),
-       .help           = MARK_help,
-       .parse          = MARK_parse_v0,
-       .final_check    = MARK_check,
-       .print          = MARK_print_v0,
-       .save           = MARK_save_v0,
-       .extra_opts     = MARK_opts,
-};
-
-static struct xtables_target mark_target_v1 = {
-       .family         = AF_INET,
-       .name           = "MARK",
-       .version        = XTABLES_VERSION,
-       .revision       = 1,
-       .size           = XT_ALIGN(sizeof(struct xt_mark_target_info_v1)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_mark_target_info_v1)),
-       .help           = MARK_help,
-       .parse          = MARK_parse_v1,
-       .final_check    = MARK_check,
-       .print          = MARK_print_v1,
-       .save           = MARK_save_v1,
-       .extra_opts     = MARK_opts,
-};
-
-static struct xtables_target mark_target6_v0 = {
-       .family         = AF_INET6,
-       .name           = "MARK",
-       .version        = XTABLES_VERSION,
-       .revision       = 0,
-       .size           = XT_ALIGN(sizeof(struct xt_mark_target_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_mark_target_info)),
-       .help           = MARK_help,
-       .parse          = MARK_parse_v0,
-       .final_check    = MARK_check,
-       .print          = MARK_print_v0,
-       .save           = MARK_save_v0,
-       .extra_opts     = MARK_opts,
-};
-
-static struct xtables_target mark_tg_reg_v2 = {
-       .version       = XTABLES_VERSION,
-       .name          = "MARK",
-       .revision      = 2,
-       .family        = AF_UNSPEC,
-       .size          = XT_ALIGN(sizeof(struct xt_mark_tginfo2)),
-       .userspacesize = XT_ALIGN(sizeof(struct xt_mark_tginfo2)),
-       .help          = mark_tg_help,
-       .parse         = mark_tg_parse,
-       .final_check   = mark_tg_check,
-       .print         = mark_tg_print,
-       .save          = mark_tg_save,
-       .extra_opts    = mark_tg_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&mark_target_v0);
-       xtables_register_target(&mark_target_v1);
-       xtables_register_target(&mark_target6_v0);
-       xtables_register_target(&mark_tg_reg_v2);
-}
diff --git a/extensions/libxt_MARK.man b/extensions/libxt_MARK.man
deleted file mode 100644 (file)
index 9585f02..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-This target is used to set the Netfilter mark value associated with the packet.
-The target can only be used in the \fBmangle\fR table. It can, for example, be
-used in conjunction with routing based on fwmark (needs iproute2).
-.TP
-\fB--set-xmark\fR \fIvalue\fR[\fB/\fR\fImask\fR]
-Zeroes out the bits given by \fImask\fR and XORs \fIvalue\fR into the packet
-mark ("nfmark"). If \fImask\fR is omitted, 0xFFFFFFFF is assumed.
-.TP
-\fB--set-mark\fR \fIvalue\fR[\fB/\fR\fImask\fR]
-Zeroes out the bits given by \fImask\fR and ORs \fIvalue\fR into the packet
-mark. If \fImask\fR is omitted, 0xFFFFFFFF is assumed.
-.PP
-The following mnemonics are available:
-.TP
-\fB--and-mark\fR \fIbits\fR
-Binary AND the nfmark with \fIbits\fR. (Mnemonic for \fB--set-xmark
-0/\fR\fIinvbits\fR, where \fIinvbits\fR is the binary negation of \fIbits\fR.)
-.TP
-\fB--or-mark\fR \fIbits\fR
-Binary OR the nfmark with \fIbits\fR. (Mnemonic for \fB--set-xmark\fR
-\fIbits\fR\fB/\fR\fIbits\fR.)
-.TP
-\fB--xor-mark\fR \fIbits\fR
-Binary XOR the nfmark with \fIbits\fR. (Mnemonic for \fB--set-xmark\fR
-\fIbits\fR\fB/0\fR.)
diff --git a/extensions/libxt_NFLOG.c b/extensions/libxt_NFLOG.c
deleted file mode 100644 (file)
index e5b6719..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <getopt.h>
-#include <xtables.h>
-
-#include <linux/netfilter/x_tables.h>
-#include <linux/netfilter/xt_NFLOG.h>
-
-enum {
-       NFLOG_GROUP     = 0x1,
-       NFLOG_PREFIX    = 0x2,
-       NFLOG_RANGE     = 0x4,
-       NFLOG_THRESHOLD = 0x8,
-};
-
-static const struct option NFLOG_opts[] = {
-       { "nflog-group",     1, NULL, NFLOG_GROUP },
-       { "nflog-prefix",    1, NULL, NFLOG_PREFIX },
-       { "nflog-range",     1, NULL, NFLOG_RANGE },
-       { "nflog-threshold", 1, NULL, NFLOG_THRESHOLD },
-       { .name = NULL }
-};
-
-static void NFLOG_help(void)
-{
-       printf("NFLOG target options:\n"
-              " --nflog-group NUM              NETLINK group used for logging\n"
-              " --nflog-range NUM              Number of byte to copy\n"
-              " --nflog-threshold NUM          Message threshold of in-kernel queue\n"
-              " --nflog-prefix STRING          Prefix string for log messages\n");
-}
-
-static void NFLOG_init(struct xt_entry_target *t)
-{
-       struct xt_nflog_info *info = (struct xt_nflog_info *)t->data;
-
-       info->group     = 0;
-       info->threshold = XT_NFLOG_DEFAULT_THRESHOLD;
-}
-
-static int NFLOG_parse(int c, char **argv, int invert, unsigned int *flags,
-                       const void *entry, struct xt_entry_target **target)
-{
-       struct xt_nflog_info *info = (struct xt_nflog_info *)(*target)->data;
-       int n;
-       size_t length;
-
-       switch (c) {
-       case NFLOG_GROUP:
-               if (*flags & NFLOG_GROUP)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can't specify --nflog-group twice");
-               if (check_inverse(optarg, &invert, NULL, 0))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Unexpected `!' after --nflog-group");
-
-               n = atoi(optarg);
-               if (n < 0)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "--nflog-group can not be negative");
-               info->group = n;
-               break;
-       case NFLOG_PREFIX:
-               if (*flags & NFLOG_PREFIX)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can't specify --nflog-prefix twice");
-               if (check_inverse(optarg, &invert, NULL, 0))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Unexpected `!' after --nflog-prefix");
-
-               length = strlen(optarg);
-               if (length == 0)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "No prefix specified for --nflog-prefix");
-               if (length >= sizeof(info->prefix))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "--nflog-prefix too long, max %Zu characters",
-                                  sizeof(info->prefix) - 1);
-               if (length != strlen(strtok(optarg, "\n")))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Newlines are not allowed in --nflog-prefix");
-               strcpy(info->prefix, optarg);
-               break;
-       case NFLOG_RANGE:
-               if (*flags & NFLOG_RANGE)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can't specify --nflog-range twice");
-               n = atoi(optarg);
-               if (n < 0)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Invalid --nflog-range, must be >= 0");
-               info->len = n;
-               break;
-       case NFLOG_THRESHOLD:
-               if (*flags & NFLOG_THRESHOLD)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can't specify --nflog-threshold twice");
-               n = atoi(optarg);
-               if (n < 1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Invalid --nflog-threshold, must be >= 1");
-               info->threshold = n;
-               break;
-       default:
-               return 0;
-       }
-       *flags |= c;
-       return 1;
-}
-
-static void nflog_print(const struct xt_nflog_info *info, char *prefix)
-{
-       if (info->prefix[0] != '\0') {
-               printf("%snflog-prefix ", prefix);
-               save_string(info->prefix);
-       }
-       if (info->group)
-               printf("%snflog-group %u ", prefix, info->group);
-       if (info->len)
-               printf("%snflog-range %u ", prefix, info->len);
-       if (info->threshold != XT_NFLOG_DEFAULT_THRESHOLD)
-               printf("%snflog-threshold %u ", prefix, info->threshold);
-}
-
-static void NFLOG_print(const void *ip, const struct xt_entry_target *target,
-                        int numeric)
-{
-       const struct xt_nflog_info *info = (struct xt_nflog_info *)target->data;
-
-       nflog_print(info, "");
-}
-
-static void NFLOG_save(const void *ip, const struct xt_entry_target *target)
-{
-       const struct xt_nflog_info *info = (struct xt_nflog_info *)target->data;
-
-       nflog_print(info, "--");
-}
-
-static struct xtables_target nflog_target = {
-       .family         = AF_INET,
-       .name           = "NFLOG",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_nflog_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_nflog_info)),
-       .help           = NFLOG_help,
-       .init           = NFLOG_init,
-       .parse          = NFLOG_parse,
-       .print          = NFLOG_print,
-       .save           = NFLOG_save,
-       .extra_opts     = NFLOG_opts,
-};
-
-static struct xtables_target nflog_target6 = {
-       .family         = AF_INET6,
-       .name           = "NFLOG",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_nflog_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_nflog_info)),
-       .help           = NFLOG_help,
-       .init           = NFLOG_init,
-       .parse          = NFLOG_parse,
-       .print          = NFLOG_print,
-       .save           = NFLOG_save,
-       .extra_opts     = NFLOG_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&nflog_target);
-       xtables_register_target(&nflog_target6);
-}
diff --git a/extensions/libxt_NFLOG.man b/extensions/libxt_NFLOG.man
deleted file mode 100644 (file)
index 08c42de..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-This target provides logging of matching packets. When this target is
-set for a rule, the Linux kernel will pass the packet to the loaded
-logging backend to log the packet. This is usually used in combination
-with nfnetlink_log as logging backend, which will multicast the packet
-through a
-.IR netlink
-socket to the specified multicast group. One or more userspace processes
-may subscribe to the group to receive the packets. Like LOG, this is a
-non-terminating target, i.e. rule traversal continues at the next rule.
-.TP
-.BI "--nflog-group " "nlgroup"
-The netlink group (1 - 2^32-1) to which packets are (only applicable for
-nfnetlink_log). The default value is 0.
-.TP
-.BI "--nflog-prefix " "prefix"
-A prefix string to include in the log message, up to 64 characters
-long, useful for distinguishing messages in the logs.
-.TP
-.BI "--nflog-range " "size"
-The number of bytes to be copied to userspace (only applicable for
-nfnetlink_log). nfnetlink_log instances may specify their own
-range, this option overrides it.
-.TP
-.BI "--nflog-threshold " "size"
-Number of packets to queue inside the kernel before sending them
-to userspace (only applicable for nfnetlink_log). Higher values
-result in less overhead per packet, but increase delay until the
-packets reach userspace. The default value is 1.
-.BR
diff --git a/extensions/libxt_NFQUEUE.c b/extensions/libxt_NFQUEUE.c
deleted file mode 100644 (file)
index 49d0ebc..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-/* Shared library add-on to iptables for NFQ
- *
- * (C) 2005 by Harald Welte <laforge@netfilter.org>
- *
- * This program is distributed under the terms of GNU GPL v2, 1991
- *
- */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-
-#include <xtables.h>
-#include <linux/netfilter/x_tables.h>
-#include <linux/netfilter/xt_NFQUEUE.h>
-
-static void NFQUEUE_help(void)
-{
-       printf(
-"NFQUEUE target options\n"
-"  --queue-num value           Send packet to QUEUE number <value>.\n"
-"                              Valid queue numbers are 0-65535\n"
-);
-}
-
-static const struct option NFQUEUE_opts[] = {
-       { "queue-num", 1, NULL, 'F' },
-       { .name = NULL }
-};
-
-static void
-parse_num(const char *s, struct xt_NFQ_info *tinfo)
-{
-       unsigned int num;
-       
-       if (string_to_number(s, 0, 65535, &num) == -1)
-               exit_error(PARAMETER_PROBLEM,
-                          "Invalid queue number `%s'\n", s);
-
-       tinfo->queuenum = num & 0xffff;
-       return;
-}
-
-static int
-NFQUEUE_parse(int c, char **argv, int invert, unsigned int *flags,
-              const void *entry, struct xt_entry_target **target)
-{
-       struct xt_NFQ_info *tinfo
-               = (struct xt_NFQ_info *)(*target)->data;
-
-       switch (c) {
-       case 'F':
-               if (*flags)
-                       exit_error(PARAMETER_PROBLEM, "NFQUEUE target: "
-                                  "Only use --queue-num ONCE!");
-               parse_num(optarg, tinfo);
-               break;
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-/* Prints out the targinfo. */
-static void NFQUEUE_print(const void *ip,
-                          const struct xt_entry_target *target, int numeric)
-{
-       const struct xt_NFQ_info *tinfo =
-               (const struct xt_NFQ_info *)target->data;
-       printf("NFQUEUE num %u", tinfo->queuenum);
-}
-
-/* Saves the union ipt_targinfo in parsable form to stdout. */
-static void NFQUEUE_save(const void *ip, const struct xt_entry_target *target)
-{
-       const struct xt_NFQ_info *tinfo =
-               (const struct xt_NFQ_info *)target->data;
-
-       printf("--queue-num %u ", tinfo->queuenum);
-}
-
-static struct xtables_target nfqueue_target = {
-       .family         = AF_INET,
-       .name           = "NFQUEUE",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_NFQ_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_NFQ_info)),
-       .help           = NFQUEUE_help,
-       .parse          = NFQUEUE_parse,
-       .print          = NFQUEUE_print,
-       .save           = NFQUEUE_save,
-       .extra_opts     = NFQUEUE_opts
-};
-
-static struct xtables_target nfqueue_target6 = {
-       .family         = AF_INET6,
-       .name           = "NFQUEUE",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_NFQ_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_NFQ_info)),
-       .help           = NFQUEUE_help,
-       .parse          = NFQUEUE_parse,
-       .print          = NFQUEUE_print,
-       .save           = NFQUEUE_save,
-       .extra_opts     = NFQUEUE_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&nfqueue_target);
-       xtables_register_target(&nfqueue_target6);
-}
diff --git a/extensions/libxt_NFQUEUE.man b/extensions/libxt_NFQUEUE.man
deleted file mode 100644 (file)
index acd45e9..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-This target is an extension of the QUEUE target. As opposed to QUEUE, it allows
-you to put a packet into any specific queue, identified by its 16-bit queue
-number.  
-.TP
-\fB--queue-num\fP \fIvalue\fP
-This specifies the QUEUE number to use. Valid queue numbers are 0 to 65535. The default value is 0.
-.TP
-It can only be used with Kernel versions 2.6.14 or later, since it requires
-the
-.B
-nfnetlink_queue
-kernel support.
diff --git a/extensions/libxt_NOTRACK.c b/extensions/libxt_NOTRACK.c
deleted file mode 100644 (file)
index 83ad817..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Shared library add-on to iptables to add NOTRACK target support. */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-
-#include <xtables.h>
-#include <linux/netfilter/x_tables.h>
-
-/* Function which prints out usage message. */
-static void NOTRACK_help(void)
-{
-       printf("NOTRACK target takes no options\n");
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int
-NOTRACK_parse(int c, char **argv, int invert, unsigned int *flags,
-              const void *entry, struct xt_entry_target **target)
-{
-       return 0;
-}
-
-static struct xtables_target notrack_target = {
-       .family         = AF_INET,
-       .name           = "NOTRACK",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(0),
-       .userspacesize  = XT_ALIGN(0),
-       .help           = NOTRACK_help,
-       .parse          = NOTRACK_parse,
-};
-
-static struct xtables_target notrack_target6 = {
-       .family         = AF_INET6,
-       .name           = "NOTRACK",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(0),
-       .userspacesize  = XT_ALIGN(0),
-       .help           = NOTRACK_help,
-       .parse          = NOTRACK_parse,
-};
-
-void _init(void)
-{
-       xtables_register_target(&notrack_target);
-       xtables_register_target(&notrack_target6);
-}
diff --git a/extensions/libxt_NOTRACK.man b/extensions/libxt_NOTRACK.man
deleted file mode 100644 (file)
index 30e830a..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-This target disables connection tracking for all packets matching that rule.
-.TP
-It can only be used in the
-.B raw
-table.
diff --git a/extensions/libxt_RATEEST.c b/extensions/libxt_RATEEST.c
deleted file mode 100644 (file)
index cf1284f..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <getopt.h>
-#include <math.h>
-
-#include <xtables.h>
-#include <linux/netfilter/x_tables.h>
-#include <linux/netfilter/xt_RATEEST.h>
-
-/* hack to pass raw values to final_check */
-static struct xt_rateest_target_info *RATEEST_info;
-static unsigned int interval;
-static unsigned int ewma_log;
-
-static void
-RATEEST_help(void)
-{
-       printf(
-"RATEEST target options:\n"
-"  --rateest-name name         Rate estimator name\n"
-"  --rateest-interval sec      Rate measurement interval in seconds\n"
-"  --rateest-ewmalog value     Rate measurement averaging time constant\n");
-}
-
-enum RATEEST_options {
-       RATEEST_OPT_NAME,
-       RATEEST_OPT_INTERVAL,
-       RATEEST_OPT_EWMALOG,
-};
-
-static const struct option RATEEST_opts[] = {
-       { "rateest-name",       1, NULL, RATEEST_OPT_NAME },
-       { "rateest-interval",   1, NULL, RATEEST_OPT_INTERVAL },
-       { "rateest-ewmalog",    1, NULL, RATEEST_OPT_EWMALOG },
-       { .name = NULL },
-};
-
-/* Copied from iproute */
-#define TIME_UNITS_PER_SEC     1000000
-
-static int
-RATEEST_get_time(unsigned int *time, const char *str)
-{
-       double t;
-       char *p;
-
-       t = strtod(str, &p);
-       if (p == str)
-               return -1;
-
-       if (*p) {
-               if (strcasecmp(p, "s") == 0 || strcasecmp(p, "sec")==0 ||
-                   strcasecmp(p, "secs")==0)
-                       t *= TIME_UNITS_PER_SEC;
-               else if (strcasecmp(p, "ms") == 0 || strcasecmp(p, "msec")==0 ||
-                        strcasecmp(p, "msecs") == 0)
-                       t *= TIME_UNITS_PER_SEC/1000;
-               else if (strcasecmp(p, "us") == 0 || strcasecmp(p, "usec")==0 ||
-                        strcasecmp(p, "usecs") == 0)
-                       t *= TIME_UNITS_PER_SEC/1000000;
-               else
-                       return -1;
-       }
-
-       *time = t;
-       return 0;
-}
-
-static void
-RATEEST_print_time(unsigned int time)
-{
-       double tmp = time;
-
-       if (tmp >= TIME_UNITS_PER_SEC)
-               printf("%.1fs ", tmp/TIME_UNITS_PER_SEC);
-       else if (tmp >= TIME_UNITS_PER_SEC/1000)
-               printf("%.1fms ", tmp/(TIME_UNITS_PER_SEC/1000));
-       else
-               printf("%uus ", time);
-}
-
-static void
-RATEEST_init(struct xt_entry_target *target)
-{
-       interval = 0;
-       ewma_log = 0;
-}
-
-static int
-RATEEST_parse(int c, char **argv, int invert, unsigned int *flags,
-             const void *entry, struct xt_entry_target **target)
-{
-       struct xt_rateest_target_info *info = (void *)(*target)->data;
-
-       RATEEST_info = info;
-
-       switch (c) {
-       case RATEEST_OPT_NAME:
-               if (*flags & (1 << c))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "RATEEST: can't specify --rateest-name twice");
-               *flags |= 1 << c;
-
-               strncpy(info->name, optarg, sizeof(info->name) - 1);
-               break;
-
-       case RATEEST_OPT_INTERVAL:
-               if (*flags & (1 << c))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "RATEEST: can't specify --rateest-interval twice");
-               *flags |= 1 << c;
-
-               if (RATEEST_get_time(&interval, optarg) < 0)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "RATEEST: bad interval value `%s'", optarg);
-
-               break;
-
-       case RATEEST_OPT_EWMALOG:
-               if (*flags & (1 << c))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "RATEEST: can't specify --rateest-ewmalog twice");
-               *flags |= 1 << c;
-
-               if (RATEEST_get_time(&ewma_log, optarg) < 0)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "RATEEST: bad ewmalog value `%s'", optarg);
-
-               break;
-
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static void
-RATEEST_final_check(unsigned int flags)
-{
-       struct xt_rateest_target_info *info = RATEEST_info;
-
-       if (!(flags & (1 << RATEEST_OPT_NAME)))
-               exit_error(PARAMETER_PROBLEM, "RATEEST: no name specified");
-       if (!(flags & (1 << RATEEST_OPT_INTERVAL)))
-               exit_error(PARAMETER_PROBLEM, "RATEEST: no interval specified");
-       if (!(flags & (1 << RATEEST_OPT_EWMALOG)))
-               exit_error(PARAMETER_PROBLEM, "RATEEST: no ewmalog specified");
-
-       for (info->interval = 0; info->interval <= 5; info->interval++) {
-               if (interval <= (1 << info->interval) * (TIME_UNITS_PER_SEC / 4))
-                       break;
-       }
-
-       if (info->interval > 5)
-               exit_error(PARAMETER_PROBLEM,
-                          "RATEEST: interval value is too large");
-       info->interval -= 2;
-
-       for (info->ewma_log = 1; info->ewma_log < 32; info->ewma_log++) {
-               double w = 1.0 - 1.0 / (1 << info->ewma_log);
-               if (interval / (-log(w)) > ewma_log)
-                       break;
-       }
-       info->ewma_log--;
-
-       if (info->ewma_log == 0 || info->ewma_log >= 31)
-               exit_error(PARAMETER_PROBLEM,
-                          "RATEEST: ewmalog value is out of range");
-}
-
-static void
-__RATEEST_print(const struct xt_entry_target *target, const char *prefix)
-{
-       struct xt_rateest_target_info *info = (void *)target->data;
-       unsigned int local_interval;
-       unsigned int local_ewma_log;
-
-       local_interval = (TIME_UNITS_PER_SEC << (info->interval + 2)) / 4;
-       local_ewma_log = local_interval * (1 << (info->ewma_log));
-
-       printf("%sname %s ", prefix, info->name);
-       printf("%sinterval ", prefix);
-       RATEEST_print_time(local_interval);
-       printf("%sewmalog ", prefix);
-       RATEEST_print_time(local_ewma_log);
-}
-
-static void
-RATEEST_print(const void *ip, const struct xt_entry_target *target,
-             int numeric)
-{
-       __RATEEST_print(target, "");
-}
-
-static void
-RATEEST_save(const void *ip, const struct xt_entry_target *target)
-{
-       __RATEEST_print(target, "--rateest-");
-}
-
-static struct xtables_target rateest_tg_reg = {
-       .family         = AF_UNSPEC,
-       .name           = "RATEEST",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_rateest_target_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_rateest_target_info)),
-       .help           = RATEEST_help,
-       .init           = RATEEST_init,
-       .parse          = RATEEST_parse,
-       .final_check    = RATEEST_final_check,
-       .print          = RATEEST_print,
-       .save           = RATEEST_save,
-       .extra_opts     = RATEEST_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&rateest_tg_reg);
-}
diff --git a/extensions/libxt_RATEEST.man b/extensions/libxt_RATEEST.man
deleted file mode 100644 (file)
index 6ad802c..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-The RATEEST target collects statistics, performs rate estimation calculation
-and saves the results for later evaluation using the \fBrateest\fP match.
-.TP
-\fB--rateest-name\fP \fIname\fP
-Count matched packets into the pool referred to by \fIname\fP, which is freely
-choosable.
-.TP
-\fB--rateest-interval\fP \fIamount\fP{\fBs\fP|\fBms\fP|\fBus\fP}
-Rate measurement interval, in seconds, milliseconds or microseconds.
-.TP
-\fB--rateest-ewmalog\fP \fIvalue\fP
diff --git a/extensions/libxt_SECMARK.c b/extensions/libxt_SECMARK.c
deleted file mode 100644 (file)
index 7d3dbfa..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Shared library add-on to iptables to add SECMARK target support.
- *
- * Based on the MARK target.
- *
- * Copyright (C) 2006 Red Hat, Inc., James Morris <jmorris@redhat.com>
- */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <xtables.h>
-#include <linux/netfilter/xt_SECMARK.h>
-
-#define PFX "SECMARK target: "
-
-static void SECMARK_help(void)
-{
-       printf(
-"SECMARK target options:\n"
-"  --selctx value                     Set the SELinux security context\n");
-}
-
-static const struct option SECMARK_opts[] = {
-       { "selctx", 1, NULL, '1' },
-       { .name = NULL }
-};
-
-/*
- * Function which parses command options; returns true if it
- * ate an option.
- */
-static int SECMARK_parse(int c, char **argv, int invert, unsigned int *flags,
-                         const void *entry, struct xt_entry_target **target)
-{
-       struct xt_secmark_target_info *info =
-               (struct xt_secmark_target_info*)(*target)->data;
-
-       switch (c) {
-       case '1':
-               if (*flags & SECMARK_MODE_SEL)
-                       exit_error(PARAMETER_PROBLEM, PFX
-                                  "Can't specify --selctx twice");
-               info->mode = SECMARK_MODE_SEL;
-
-               if (strlen(optarg) > SECMARK_SELCTX_MAX-1)
-                       exit_error(PARAMETER_PROBLEM, PFX
-                                  "Maximum length %u exceeded by --selctx"
-                                  " parameter (%zu)",
-                                  SECMARK_SELCTX_MAX-1, strlen(optarg));
-
-               strcpy(info->u.sel.selctx, optarg);
-               *flags |= SECMARK_MODE_SEL;
-               break;
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static void SECMARK_check(unsigned int flags)
-{
-       if (!flags)
-               exit_error(PARAMETER_PROBLEM, PFX "parameter required");
-}
-
-static void print_secmark(struct xt_secmark_target_info *info)
-{
-       switch (info->mode) {
-       case SECMARK_MODE_SEL:
-               printf("selctx %s ", info->u.sel.selctx);\
-               break;
-       
-       default:
-               exit_error(OTHER_PROBLEM, PFX "invalid mode %hhu\n", info->mode);
-       }
-}
-
-static void SECMARK_print(const void *ip, const struct xt_entry_target *target,
-                          int numeric)
-{
-       struct xt_secmark_target_info *info =
-               (struct xt_secmark_target_info*)(target)->data;
-
-       printf("SECMARK ");
-       print_secmark(info);
-}
-
-/* Saves the target info in parsable form to stdout. */
-static void SECMARK_save(const void *ip, const struct xt_entry_target *target)
-{
-       struct xt_secmark_target_info *info =
-               (struct xt_secmark_target_info*)target->data;
-
-       printf("--");
-       print_secmark(info);
-}
-
-static struct xtables_target secmark_target = {
-       .family         = AF_UNSPEC,
-       .name           = "SECMARK",
-       .version        = XTABLES_VERSION,
-       .revision       = 0,
-       .size           = XT_ALIGN(sizeof(struct xt_secmark_target_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_secmark_target_info)),
-       .help           = SECMARK_help,
-       .parse          = SECMARK_parse,
-       .final_check    = SECMARK_check,
-       .print          = SECMARK_print,
-       .save           = SECMARK_save,
-       .extra_opts     = SECMARK_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&secmark_target);
-}
diff --git a/extensions/libxt_SECMARK.man b/extensions/libxt_SECMARK.man
deleted file mode 100644 (file)
index f892de9..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-This is used to set the security mark value associated with the
-packet for use by security subsystems such as SELinux.  It is only
-valid in the
-.B mangle
-table.
-.TP
-.BI "--selctx " "security_context"
diff --git a/extensions/libxt_TCPMSS.c b/extensions/libxt_TCPMSS.c
deleted file mode 100644 (file)
index fbf73c9..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-/* Shared library add-on to iptables to add TCPMSS target support.
- *
- * Copyright (c) 2000 Marc Boucher
-*/
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-
-#include <xtables.h>
-#include <linux/netfilter/x_tables.h>
-#include <linux/netfilter/xt_TCPMSS.h>
-
-struct mssinfo {
-       struct xt_entry_target t;
-       struct xt_tcpmss_info mss;
-};
-
-/* Function which prints out usage message. */
-static void __TCPMSS_help(int hdrsize)
-{
-       printf(
-"TCPMSS target mutually-exclusive options:\n"
-"  --set-mss value               explicitly set MSS option to specified value\n"
-"  --clamp-mss-to-pmtu           automatically clamp MSS value to (path_MTU - %d)\n",
-hdrsize);
-}
-
-static void TCPMSS_help(void)
-{
-       __TCPMSS_help(40);
-}
-
-static void TCPMSS_help6(void)
-{
-       __TCPMSS_help(60);
-}
-
-static const struct option TCPMSS_opts[] = {
-       { "set-mss", 1, NULL, '1' },
-       { "clamp-mss-to-pmtu", 0, NULL, '2' },
-       { .name = NULL }
-};
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int __TCPMSS_parse(int c, char **argv, int invert, unsigned int *flags,
-                          const void *entry, struct xt_entry_target **target,
-                          int hdrsize)
-{
-       struct xt_tcpmss_info *mssinfo
-               = (struct xt_tcpmss_info *)(*target)->data;
-
-       switch (c) {
-               unsigned int mssval;
-
-       case '1':
-               if (*flags)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "TCPMSS target: Only one option may be specified");
-               if (string_to_number(optarg, 0, 65535 - hdrsize, &mssval) == -1)
-                       exit_error(PARAMETER_PROBLEM, "Bad TCPMSS value `%s'", optarg);
-               
-               mssinfo->mss = mssval;
-               *flags = 1;
-               break;
-
-       case '2':
-               if (*flags)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "TCPMSS target: Only one option may be specified");
-               mssinfo->mss = XT_TCPMSS_CLAMP_PMTU;
-               *flags = 1;
-               break;
-
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static int TCPMSS_parse(int c, char **argv, int invert, unsigned int *flags,
-                        const void *entry, struct xt_entry_target **target)
-{
-       return __TCPMSS_parse(c, argv, invert, flags, entry, target, 40);
-}
-
-static int TCPMSS_parse6(int c, char **argv, int invert, unsigned int *flags,
-                         const void *entry, struct xt_entry_target **target)
-{
-       return __TCPMSS_parse(c, argv, invert, flags, entry, target, 60);
-}
-
-static void TCPMSS_check(unsigned int flags)
-{
-       if (!flags)
-               exit_error(PARAMETER_PROBLEM,
-                          "TCPMSS target: At least one parameter is required");
-}
-
-/* Prints out the targinfo. */
-static void TCPMSS_print(const void *ip, const struct xt_entry_target *target,
-                         int numeric)
-{
-       const struct xt_tcpmss_info *mssinfo =
-               (const struct xt_tcpmss_info *)target->data;
-       if(mssinfo->mss == XT_TCPMSS_CLAMP_PMTU)
-               printf("TCPMSS clamp to PMTU ");
-       else
-               printf("TCPMSS set %u ", mssinfo->mss);
-}
-
-/* Saves the union ipt_targinfo in parsable form to stdout. */
-static void TCPMSS_save(const void *ip, const struct xt_entry_target *target)
-{
-       const struct xt_tcpmss_info *mssinfo =
-               (const struct xt_tcpmss_info *)target->data;
-
-       if(mssinfo->mss == XT_TCPMSS_CLAMP_PMTU)
-               printf("--clamp-mss-to-pmtu ");
-       else
-               printf("--set-mss %u ", mssinfo->mss);
-}
-
-static struct xtables_target tcpmss_target = {
-       .family         = AF_INET,
-       .name           = "TCPMSS",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_tcpmss_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_tcpmss_info)),
-       .help           = TCPMSS_help,
-       .parse          = TCPMSS_parse,
-       .final_check    = TCPMSS_check,
-       .print          = TCPMSS_print,
-       .save           = TCPMSS_save,
-       .extra_opts     = TCPMSS_opts,
-};
-
-static struct xtables_target tcpmss_target6 = {
-       .family         = AF_INET6,
-       .name           = "TCPMSS",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_tcpmss_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_tcpmss_info)),
-       .help           = TCPMSS_help6,
-       .parse          = TCPMSS_parse6,
-       .final_check    = TCPMSS_check,
-       .print          = TCPMSS_print,
-       .save           = TCPMSS_save,
-       .extra_opts     = TCPMSS_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&tcpmss_target);
-       xtables_register_target(&tcpmss_target6);
-}
diff --git a/extensions/libxt_TCPMSS.man b/extensions/libxt_TCPMSS.man
deleted file mode 100644 (file)
index 82f93e0..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-This target allows to alter the MSS value of TCP SYN packets, to control
-the maximum size for that connection (usually limiting it to your
-outgoing interface's MTU minus 40 for IPv4 or 60 for IPv6, respectively).
-Of course, it can only be used
-in conjunction with
-.BR "-p tcp" .
-It is only valid in the
-.BR mangle
-table.
-.br
-This target is used to overcome criminally braindead ISPs or servers
-which block "ICMP Fragmentation Needed" or "ICMPv6 Packet Too Big"
-packets.  The symptoms of this
-problem are that everything works fine from your Linux
-firewall/router, but machines behind it can never exchange large
-packets:
-.PD 0
-.RS 0.1i
-.TP 0.3i
-1)
-Web browsers connect, then hang with no data received.
-.TP
-2)
-Small mail works fine, but large emails hang.
-.TP
-3)
-ssh works fine, but scp hangs after initial handshaking.
-.RE
-.PD
-Workaround: activate this option and add a rule to your firewall
-configuration like:
-.nf
- iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN \\
-             -j TCPMSS --clamp-mss-to-pmtu
-.fi
-.TP
-.BI "--set-mss " "value"
-Explicitly set MSS option to specified value.
-.TP
-.B "--clamp-mss-to-pmtu"
-Automatically clamp MSS value to (path_MTU - 40 for IPv4; -60 for IPv6).
-.TP
-These options are mutually exclusive.
diff --git a/extensions/libxt_TCPOPTSTRIP.c b/extensions/libxt_TCPOPTSTRIP.c
deleted file mode 100644 (file)
index bd74e37..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Shared library add-on to iptables to add TCPOPTSTRIP target support.
- * Copyright (c) 2007 Sven Schnelle <svens@bitebene.org>
- * Copyright © CC Computer Consultants GmbH, 2007
- * Jan Engelhardt <jengelh@computergmbh.de>
- */
-#include <getopt.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <xtables.h>
-#include <linux/netfilter/x_tables.h>
-#include <linux/netfilter/xt_TCPOPTSTRIP.h>
-#ifndef TCPOPT_MD5SIG
-#      define TCPOPT_MD5SIG 19
-#endif
-
-enum {
-       FLAG_STRIP = 1 << 0,
-};
-
-struct tcp_optionmap {
-       const char *name, *desc;
-       const unsigned int option;
-};
-
-static const struct option tcpoptstrip_tg_opts[] = {
-       {.name = "strip-options", .has_arg = true, .val = 's'},
-       { .name = NULL }
-};
-
-static const struct tcp_optionmap tcp_optionmap[] = {
-       {"wscale",         "Window scale",         TCPOPT_WINDOW},
-       {"mss",            "Maximum Segment Size", TCPOPT_MAXSEG},
-       {"sack-permitted", "SACK permitted",       TCPOPT_SACK_PERMITTED},
-       {"sack",           "Selective ACK",        TCPOPT_SACK},
-       {"timestamp",      "Timestamp",            TCPOPT_TIMESTAMP},
-       {"md5",            "MD5 signature",        TCPOPT_MD5SIG},
-       { .name = NULL }
-};
-
-static void tcpoptstrip_tg_help(void)
-{
-       const struct tcp_optionmap *w;
-
-       printf(
-"TCPOPTSTRIP target options:\n"
-"  --strip-options value     strip specified TCP options denoted by value\n"
-"                            (separated by comma) from TCP header\n"
-"  Instead of the numeric value, you can also use the following names:\n"
-       );
-
-       for (w = tcp_optionmap; w->name != NULL; ++w)
-               printf("    %-14s    strip \"%s\" option\n", w->name, w->desc);
-}
-
-static void tcpoptstrip_tg_init(struct xt_entry_target *t)
-{
-       struct xt_tcpoptstrip_target_info *info = (void *)t->data;
-
-       /* strictly necessary? play safe for now. */
-       memset(info->strip_bmap, 0, sizeof(info->strip_bmap));
-}
-
-static void parse_list(struct xt_tcpoptstrip_target_info *info, char *arg)
-{
-       unsigned int option;
-       char *p;
-       int i;
-
-       while (true) {
-               p = strchr(arg, ',');
-               if (p != NULL)
-                       *p = '\0';
-
-               option = 0;
-               for (i = 0; tcp_optionmap[i].name != NULL; ++i)
-                       if (strcmp(tcp_optionmap[i].name, arg) == 0) {
-                               option = tcp_optionmap[i].option;
-                               break;
-                       }
-
-               if (option == 0 && string_to_number(arg, 0, 255, &option) == -1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Bad TCP option value \"%s\"", arg);
-
-               if (option < 2)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Option value may not be 0 or 1");
-
-               if (tcpoptstrip_test_bit(info->strip_bmap, option))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Option \"%s\" already specified", arg);
-
-               tcpoptstrip_set_bit(info->strip_bmap, option);
-               if (p == NULL)
-                       break;
-               arg = p + 1;
-       }
-}
-
-static int tcpoptstrip_tg_parse(int c, char **argv, int invert,
-                                unsigned int *flags, const void *entry,
-                                struct xt_entry_target **target)
-{
-       struct xt_tcpoptstrip_target_info *info = (void *)(*target)->data;
-
-       switch (c) {
-       case 's':
-               if (*flags & FLAG_STRIP)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "You can specify --strip-options only once");
-               parse_list(info, optarg);
-               *flags |= FLAG_STRIP;
-               return true;
-       }
-
-       return false;
-}
-
-static void tcpoptstrip_tg_check(unsigned int flags)
-{
-       if (flags == 0)
-               exit_error(PARAMETER_PROBLEM,
-                          "TCPOPTSTRIP: --strip-options parameter required");
-}
-
-static void
-tcpoptstrip_print_list(const struct xt_tcpoptstrip_target_info *info,
-                       bool numeric)
-{
-       unsigned int i, j;
-       const char *name;
-       bool first = true;
-
-       for (i = 0; i < 256; ++i) {
-               if (!tcpoptstrip_test_bit(info->strip_bmap, i))
-                       continue;
-               if (!first)
-                       printf(",");
-
-               first = false;
-               name  = NULL;
-               if (!numeric)
-                       for (j = 0; tcp_optionmap[j].name != NULL; ++j)
-                               if (tcp_optionmap[j].option == i)
-                                       name = tcp_optionmap[j].name;
-
-               if (name != NULL)
-                       printf("%s", name);
-               else
-                       printf("%u", i);
-       }
-}
-
-static void
-tcpoptstrip_tg_print(const void *ip, const struct xt_entry_target *target,
-                     int numeric)
-{
-       const struct xt_tcpoptstrip_target_info *info =
-               (const void *)target->data;
-
-       printf("TCPOPTSTRIP options ");
-       tcpoptstrip_print_list(info, numeric);
-}
-
-static void
-tcpoptstrip_tg_save(const void *ip, const struct xt_entry_target *target)
-{
-       const struct xt_tcpoptstrip_target_info *info =
-               (const void *)target->data;
-
-       printf("--strip-options ");
-       tcpoptstrip_print_list(info, true);
-}
-
-static struct xtables_target tcpoptstrip_tg_reg = {
-       .version       = XTABLES_VERSION,
-       .name          = "TCPOPTSTRIP",
-       .family        = AF_INET,
-       .size          = XT_ALIGN(sizeof(struct xt_tcpoptstrip_target_info)),
-       .userspacesize = XT_ALIGN(sizeof(struct xt_tcpoptstrip_target_info)),
-       .help          = tcpoptstrip_tg_help,
-       .init          = tcpoptstrip_tg_init,
-       .parse         = tcpoptstrip_tg_parse,
-       .final_check   = tcpoptstrip_tg_check,
-       .print         = tcpoptstrip_tg_print,
-       .save          = tcpoptstrip_tg_save,
-       .extra_opts    = tcpoptstrip_tg_opts,
-};
-
-static struct xtables_target tcpoptstrip_tg6_reg = {
-       .version       = XTABLES_VERSION,
-       .name          = "TCPOPTSTRIP",
-       .family        = AF_INET6,
-       .size          = XT_ALIGN(sizeof(struct xt_tcpoptstrip_target_info)),
-       .userspacesize = XT_ALIGN(sizeof(struct xt_tcpoptstrip_target_info)),
-       .help          = tcpoptstrip_tg_help,
-       .init          = tcpoptstrip_tg_init,
-       .parse         = tcpoptstrip_tg_parse,
-       .final_check   = tcpoptstrip_tg_check,
-       .print         = tcpoptstrip_tg_print,
-       .save          = tcpoptstrip_tg_save,
-       .extra_opts    = tcpoptstrip_tg_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&tcpoptstrip_tg_reg);
-       xtables_register_target(&tcpoptstrip_tg6_reg);
-}
diff --git a/extensions/libxt_TCPOPTSTRIP.man b/extensions/libxt_TCPOPTSTRIP.man
deleted file mode 100644 (file)
index cd000f9..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-This target will strip TCP options off a TCP packet. (It will actually replace
-them by NO-OPs.) As such, you will need to add the \fB-p tcp\fR parameters.
-.TP
-\fB--strip-options\fP \fIoption\fP[\fB,\fP\fIoption\fP...]
-Strip the given option(s). The options may be specified by TCP option number or
-by symbolic name. The list of recognized options can be obtained by calling
-iptables with \fB-j TCPOPTSTRIP -h\fR.
diff --git a/extensions/libxt_TOS.c b/extensions/libxt_TOS.c
deleted file mode 100644 (file)
index 9ce8473..0000000
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- * Shared library add-on to iptables to add TOS target support
- *
- * Copyright © CC Computer Consultants GmbH, 2007
- * Contact: Jan Engelhardt <jengelh@computergmbh.de>
- */
-#include <getopt.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <xtables.h>
-#include <linux/netfilter/xt_DSCP.h>
-#include <linux/netfilter_ipv4/ipt_TOS.h>
-#include "tos_values.c"
-
-enum {
-       FLAG_TOS = 1 << 0,
-};
-
-static const struct option tos_tg_opts_v0[] = {
-       {.name = "set-tos", .has_arg = true, .val = '='},
-       { .name = NULL }
-};
-
-static const struct option tos_tg_opts[] = {
-       {.name = "set-tos", .has_arg = true, .val = '='},
-       {.name = "and-tos", .has_arg = true, .val = '&'},
-       {.name = "or-tos",  .has_arg = true, .val = '|'},
-       {.name = "xor-tos", .has_arg = true, .val = '^'},
-       { .name = NULL }
-};
-
-static void tos_tg_help_v0(void)
-{
-       const struct tos_symbol_info *symbol;
-
-       printf(
-"TOS target options:\n"
-"  --set-tos value     Set Type of Service/Priority field to value\n"
-"  --set-tos symbol    Set TOS field (IPv4 only) by symbol\n"
-"                      Accepted symbolic names for value are:\n");
-
-       for (symbol = tos_symbol_names; symbol->name != NULL; ++symbol)
-               printf("                        (0x%02x) %2u %s\n",
-                      symbol->value, symbol->value, symbol->name);
-
-       printf("\n");
-}
-
-static void tos_tg_help(void)
-{
-       const struct tos_symbol_info *symbol;
-
-       printf(
-"TOS target v%s options:\n"
-"  --set-tos value[/mask]  Set Type of Service/Priority field to value\n"
-"                          (Zero out bits in mask and XOR value into TOS)\n"
-"  --set-tos symbol        Set TOS field (IPv4 only) by symbol\n"
-"                          (this zeroes the 4-bit Precedence part!)\n"
-"                          Accepted symbolic names for value are:\n",
-XTABLES_VERSION);
-
-       for (symbol = tos_symbol_names; symbol->name != NULL; ++symbol)
-               printf("                            (0x%02x) %2u %s\n",
-                      symbol->value, symbol->value, symbol->name);
-
-       printf(
-"\n"
-"  --and-tos bits          Binary AND the TOS value with bits\n"
-"  --or-tos  bits          Binary OR the TOS value with bits\n"
-"  --xor-tos bits          Binary XOR the TOS value with bits\n"
-);
-}
-
-static int tos_tg_parse_v0(int c, char **argv, int invert, unsigned int *flags,
-                           const void *entry, struct xt_entry_target **target)
-{
-       struct ipt_tos_target_info *info = (void *)(*target)->data;
-       struct tos_value_mask tvm;
-
-       switch (c) {
-       case '=':
-               param_act(P_ONLY_ONCE, "TOS", "--set-tos", *flags & FLAG_TOS);
-               param_act(P_NO_INVERT, "TOS", "--set-tos", invert);
-               if (!tos_parse_symbolic(optarg, &tvm, 0xFF))
-                       param_act(P_BAD_VALUE, "TOS", "--set-tos", optarg);
-               if (tvm.mask != 0xFF)
-                       exit_error(PARAMETER_PROBLEM, "tos match: Your kernel "
-                                  "is too old to support anything besides "
-                                  "/0xFF as a mask.");
-               info->tos = tvm.value;
-               *flags |= FLAG_TOS;
-               return true;
-       }
-
-       return false;
-}
-
-static int tos_tg_parse(int c, char **argv, int invert, unsigned int *flags,
-                         const void *entry, struct xt_entry_target **target)
-{
-       struct xt_tos_target_info *info = (void *)(*target)->data;
-       struct tos_value_mask tvm;
-       unsigned int bits;
-
-       switch (c) {
-       case '=': /* --set-tos */
-               param_act(P_ONLY_ONCE, "TOS", "--set-tos", *flags & FLAG_TOS);
-               param_act(P_NO_INVERT, "TOS", "--set-tos", invert);
-               if (!tos_parse_symbolic(optarg, &tvm, 0x3F))
-                       param_act(P_BAD_VALUE, "TOS", "--set-tos", optarg);
-               info->tos_value = tvm.value;
-               info->tos_mask  = tvm.mask;
-               break;
-
-       case '&': /* --and-tos */
-               param_act(P_ONLY_ONCE, "TOS", "--and-tos", *flags & FLAG_TOS);
-               param_act(P_NO_INVERT, "TOS", "--and-tos", invert);
-               if (!strtonum(optarg, NULL, &bits, 0, 0xFF))
-                       param_act(P_BAD_VALUE, "TOS", "--and-tos", optarg);
-               info->tos_value = 0;
-               info->tos_mask  = ~bits;
-               break;
-
-       case '|': /* --or-tos */
-               param_act(P_ONLY_ONCE, "TOS", "--or-tos", *flags & FLAG_TOS);
-               param_act(P_NO_INVERT, "TOS", "--or-tos", invert);
-               if (!strtonum(optarg, NULL, &bits, 0, 0xFF))
-                       param_act(P_BAD_VALUE, "TOS", "--or-tos", optarg);
-               info->tos_value = bits;
-               info->tos_mask  = bits;
-               break;
-
-       case '^': /* --xor-tos */
-               param_act(P_ONLY_ONCE, "TOS", "--xor-tos", *flags & FLAG_TOS);
-               param_act(P_NO_INVERT, "TOS", "--xor-tos", invert);
-               if (!strtonum(optarg, NULL, &bits, 0, 0xFF))
-                       param_act(P_BAD_VALUE, "TOS", "--xor-tos", optarg);
-               info->tos_value = bits;
-               info->tos_mask  = 0;
-               break;
-
-       default:
-               return false;
-       }
-
-       *flags |= FLAG_TOS;
-       return true;
-}
-
-static void tos_tg_check(unsigned int flags)
-{
-       if (flags == 0)
-               exit_error(PARAMETER_PROBLEM,
-                          "TOS: The --set-tos parameter is required");
-}
-
-static void tos_tg_print_v0(const void *ip,
-                            const struct xt_entry_target *target, int numeric)
-{
-       const struct ipt_tos_target_info *info = (const void *)target->data;
-
-       printf("TOS set ");
-       if (numeric || !tos_try_print_symbolic("", info->tos, 0xFF))
-               printf("0x%02x ", info->tos);
-}
-
-static void tos_tg_print(const void *ip, const struct xt_entry_target *target,
-                         int numeric)
-{
-       const struct xt_tos_target_info *info = (const void *)target->data;
-
-       if (numeric)
-               printf("TOS set 0x%02x/0x%02x ",
-                      info->tos_value, info->tos_mask);
-       else if (tos_try_print_symbolic("TOS set ",
-           info->tos_value, info->tos_mask))
-               /* already printed by call */
-               return;
-       else if (info->tos_value == 0)
-               printf("TOS and 0x%02x ",
-                      (unsigned int)(u_int8_t)~info->tos_mask);
-       else if (info->tos_value == info->tos_mask)
-               printf("TOS or 0x%02x ", info->tos_value);
-       else if (info->tos_mask == 0)
-               printf("TOS xor 0x%02x ", info->tos_value);
-       else
-               printf("TOS set 0x%02x/0x%02x ",
-                      info->tos_value, info->tos_mask);
-}
-
-static void tos_tg_save_v0(const void *ip, const struct xt_entry_target *target)
-{
-       const struct ipt_tos_target_info *info = (const void *)target->data;
-
-       printf("--set-tos 0x%02x ", info->tos);
-}
-
-static void tos_tg_save(const void *ip, const struct xt_entry_target *target)
-{
-       const struct xt_tos_target_info *info = (const void *)target->data;
-
-       printf("--set-tos 0x%02x/0x%02x ", info->tos_value, info->tos_mask);
-}
-
-static struct xtables_target tos_tg_reg_v0 = {
-       .version       = XTABLES_VERSION,
-       .name          = "TOS",
-       .revision      = 0,
-       .family        = AF_INET,
-       .size          = XT_ALIGN(sizeof(struct xt_tos_target_info)),
-       .userspacesize = XT_ALIGN(sizeof(struct xt_tos_target_info)),
-       .help          = tos_tg_help_v0,
-       .parse         = tos_tg_parse_v0,
-       .final_check   = tos_tg_check,
-       .print         = tos_tg_print_v0,
-       .save          = tos_tg_save_v0,
-       .extra_opts    = tos_tg_opts_v0,
-};
-
-static struct xtables_target tos_tg_reg = {
-       .version       = XTABLES_VERSION,
-       .name          = "TOS",
-       .revision      = 1,
-       .family        = AF_INET,
-       .size          = XT_ALIGN(sizeof(struct xt_tos_target_info)),
-       .userspacesize = XT_ALIGN(sizeof(struct xt_tos_target_info)),
-       .help          = tos_tg_help,
-       .parse         = tos_tg_parse,
-       .final_check   = tos_tg_check,
-       .print         = tos_tg_print,
-       .save          = tos_tg_save,
-       .extra_opts    = tos_tg_opts,
-};
-
-static struct xtables_target tos_tg6_reg = {
-       .version       = XTABLES_VERSION,
-       .name          = "TOS",
-       .family        = AF_INET6,
-       .revision      = 1,
-       .size          = XT_ALIGN(sizeof(struct xt_tos_target_info)),
-       .userspacesize = XT_ALIGN(sizeof(struct xt_tos_target_info)),
-       .help          = tos_tg_help,
-       .parse         = tos_tg_parse,
-       .final_check   = tos_tg_check,
-       .print         = tos_tg_print,
-       .save          = tos_tg_save,
-       .extra_opts    = tos_tg_opts,
-};
-
-void _init(void)
-{
-       xtables_register_target(&tos_tg_reg_v0);
-       xtables_register_target(&tos_tg_reg);
-       xtables_register_target(&tos_tg6_reg);
-}
diff --git a/extensions/libxt_TOS.man b/extensions/libxt_TOS.man
deleted file mode 100644 (file)
index d9b774a..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-This module sets the Type of Service field in the IPv4 header (including the
-'precedence' bits) or the Priority field in the IPv6 header. Note that TOS
-shares the same bits as DSCP and ECN. The TOS target is only valid in the
-\fBmangle\fR table.
-.TP
-\fB--set-tos\fR \fIvalue\fR[\fB/\fR\fImask\fR]
-Zeroes out the bits given by \fImask\fR and XORs \fIvalue\fR into the
-TOS/Priority field. If \fImask\fR is omitted, 0xFF is assumed.
-.TP
-\fB--set-tos\fR \fIsymbol\fR
-You can specify a symbolic name when using the TOS target for IPv4. It implies
-a mask of 0xFF. The list of recognized TOS names can be obtained by calling
-iptables with \fB-j TOS -h\fR.
-.PP
-The following mnemonics are available:
-.TP
-\fB--and-tos\fR \fIbits\fR
-Binary AND the TOS value with \fIbits\fR. (Mnemonic for \fB--set-tos
-0/\fR\fIinvbits\fR, where \fIinvbits\fR is the binary negation of \fIbits\fR.)
-.TP
-\fB--or-tos\fR \fIbits\fR
-Binary OR the TOS value with \fIbits\fR. (Mnemonic for \fB--set-tos\fR
-\fIbits\fR\fB/\fR\fIbits\fR.)
-.TP
-\fB--xor-tos\fR \fIbits\fR
-Binary XOR the TOS value with \fIbits\fR. (Mnemonic for \fB--set-tos\fR
-\fIbits\fR\fB/0\fR.)
diff --git a/extensions/libxt_TRACE.c b/extensions/libxt_TRACE.c
deleted file mode 100644 (file)
index 4b0bac8..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Shared library add-on to iptables to add TRACE target support. */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-
-#include <xtables.h>
-#include <linux/netfilter/x_tables.h>
-
-/* Function which prints out usage message. */
-static void TRACE_help(void)
-{
-       printf("TRACE target takes no options\n");
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int TRACE_parse(int c, char **argv, int invert, unsigned int *flags,
-                       const void *entry, struct xt_entry_target **target)
-{
-       return 0;
-}
-
-static struct xtables_target trace_target = {
-       .family         = AF_UNSPEC,
-       .name           = "TRACE",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(0),
-       .userspacesize  = XT_ALIGN(0),
-       .help           = TRACE_help,
-       .parse          = TRACE_parse,
-};
-
-void _init(void)
-{
-       xtables_register_target(&trace_target);
-}
diff --git a/extensions/libxt_TRACE.man b/extensions/libxt_TRACE.man
deleted file mode 100644 (file)
index d28c3a0..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-This target marks packes so that the kernel will log every rule which match 
-the packets as those traverse the tables, chains, rules. (The ipt_LOG or
-ip6t_LOG module 
-is required for the logging.) The packets are logged with the string prefix: 
-"TRACE: tablename:chainname:type:rulenum " where type can be "rule" for 
-plain rule, "return" for implicit rule at the end of a user defined chain 
-and "policy" for the policy of the built in chains. 
-.br
-It can only be used in the
-.BR raw
-table.
diff --git a/extensions/libxt_comment.c b/extensions/libxt_comment.c
deleted file mode 100644 (file)
index abbb6cb..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-/* Shared library add-on to iptables to add comment match support.
- *
- * ChangeLog
- *     2003-05-13: Brad Fisher <brad@info-link.net>
- *         Initial comment match
- *     2004-05-12: Brad Fisher <brad@info-link.net>
- *         Port to patch-o-matic-ng
- */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-
-#include <xtables.h>
-#include <linux/netfilter/xt_comment.h>
-
-/* Function which prints out usage message. */
-static void comment_help(void)
-{
-       printf(
-               "comment match options:\n"
-               "--comment COMMENT             Attach a comment to a rule\n");
-}
-
-static const struct option comment_opts[] = {
-       { "comment", 1, NULL, '1' },
-       { .name = NULL }
-};
-
-static void
-parse_comment(const char *s, struct xt_comment_info *info)
-{      
-       int slen = strlen(s);
-
-       if (slen >= XT_MAX_COMMENT_LEN) {
-               exit_error(PARAMETER_PROBLEM,
-                       "COMMENT must be shorter than %i characters", XT_MAX_COMMENT_LEN);
-       }
-       strcpy((char *)info->comment, s);
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int
-comment_parse(int c, char **argv, int invert, unsigned int *flags,
-              const void *entry, struct xt_entry_match **match)
-{
-       struct xt_comment_info *commentinfo = (struct xt_comment_info *)(*match)->data;
-
-       switch (c) {
-       case '1':
-               check_inverse(argv[optind-1], &invert, &optind, 0);
-               if (invert) {
-                       exit_error(PARAMETER_PROBLEM,
-                                       "Sorry, you can't have an inverted comment");
-               }
-               parse_comment(argv[optind-1], commentinfo);
-               *flags = 1;
-               break;
-
-       default:
-               return 0;
-       }
-       return 1;
-}
-
-/* Final check; must have specified --comment. */
-static void comment_check(unsigned int flags)
-{
-       if (!flags)
-               exit_error(PARAMETER_PROBLEM,
-                          "COMMENT match: You must specify `--comment'");
-}
-
-/* Prints out the matchinfo. */
-static void
-comment_print(const void *ip, const struct xt_entry_match *match, int numeric)
-{
-       struct xt_comment_info *commentinfo = (struct xt_comment_info *)match->data;
-
-       commentinfo->comment[XT_MAX_COMMENT_LEN-1] = '\0';
-       printf("/* %s */ ", commentinfo->comment);
-}
-
-/* Saves the union ipt_matchinfo in parsable form to stdout. */
-static void
-comment_save(const void *ip, const struct xt_entry_match *match)
-{
-       struct xt_comment_info *commentinfo = (struct xt_comment_info *)match->data;
-
-       commentinfo->comment[XT_MAX_COMMENT_LEN-1] = '\0';
-       printf("--comment \"%s\" ", commentinfo->comment);
-}
-
-static struct xtables_match comment_match = {
-       .family         = AF_INET,
-       .name           = "comment",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_comment_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_comment_info)),
-       .help           = comment_help,
-       .parse          = comment_parse,
-       .final_check    = comment_check,
-       .print          = comment_print,
-       .save           = comment_save,
-       .extra_opts     = comment_opts,
-};
-
-static struct xtables_match comment_match6 = {
-       .family         = AF_INET6,
-       .name           = "comment",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_comment_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_comment_info)),
-       .help           = comment_help,
-       .parse          = comment_parse,
-       .final_check    = comment_check,
-       .print          = comment_print,
-       .save           = comment_save,
-       .extra_opts     = comment_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&comment_match);
-       xtables_register_match(&comment_match6);
-}
diff --git a/extensions/libxt_comment.man b/extensions/libxt_comment.man
deleted file mode 100644 (file)
index 2f4ce55..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Allows you to add comments (up to 256 characters) to any rule.
-.TP
-.BI "--comment " "comment"
-.TP
-Example:
-iptables -A INPUT -s 192.168.0.0/16 -m comment --comment "A privatized IP block"
diff --git a/extensions/libxt_connbytes.c b/extensions/libxt_connbytes.c
deleted file mode 100644 (file)
index 64faa8f..0000000
+++ /dev/null
@@ -1,219 +0,0 @@
-/* Shared library add-on to iptables to add byte tracking support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <xtables.h>
-#include <linux/netfilter/nf_conntrack_common.h>
-#include <linux/netfilter/xt_connbytes.h>
-
-/* Function which prints out usage message. */
-static void connbytes_help(void)
-{
-       printf(
-"connbytes match options:\n"
-" [!] --connbytes from:[to]\n"
-"     --connbytes-dir [original, reply, both]\n"
-"     --connbytes-mode [packets, bytes, avgpkt]\n");
-}
-
-static const struct option connbytes_opts[] = {
-       { "connbytes", 1, NULL, '1' },
-       { "connbytes-dir", 1, NULL, '2' },
-       { "connbytes-mode", 1, NULL, '3' },
-       { .name = NULL }
-};
-
-static void
-parse_range(const char *arg, struct xt_connbytes_info *si)
-{
-       char *colon,*p;
-
-       si->count.from = strtoul(arg,&colon,10);
-       if (*colon != ':') 
-               exit_error(PARAMETER_PROBLEM, "Bad range `%s'", arg);
-       si->count.to = strtoul(colon+1,&p,10);
-       if (p == colon+1) {
-               /* second number omited */
-               si->count.to = 0xffffffff;
-       }
-       if (si->count.from > si->count.to)
-               exit_error(PARAMETER_PROBLEM, "%llu should be less than %llu",
-                          (unsigned long long)si->count.from,
-                          (unsigned long long)si->count.to);
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int
-connbytes_parse(int c, char **argv, int invert, unsigned int *flags,
-                const void *entry, struct xt_entry_match **match)
-{
-       struct xt_connbytes_info *sinfo = (struct xt_connbytes_info *)(*match)->data;
-       unsigned long i;
-
-       switch (c) {
-       case '1':
-               if (check_inverse(optarg, &invert, &optind, 0))
-                       optind++;
-
-               parse_range(argv[optind-1], sinfo);
-               if (invert) {
-                       i = sinfo->count.from;
-                       sinfo->count.from = sinfo->count.to;
-                       sinfo->count.to = i;
-               }
-               *flags |= 1;
-               break;
-       case '2':
-               if (!strcmp(optarg, "original"))
-                       sinfo->direction = XT_CONNBYTES_DIR_ORIGINAL;
-               else if (!strcmp(optarg, "reply"))
-                       sinfo->direction = XT_CONNBYTES_DIR_REPLY;
-               else if (!strcmp(optarg, "both"))
-                       sinfo->direction = XT_CONNBYTES_DIR_BOTH;
-               else
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Unknown --connbytes-dir `%s'", optarg);
-
-               *flags |= 2;
-               break;
-       case '3':
-               if (!strcmp(optarg, "packets"))
-                       sinfo->what = XT_CONNBYTES_PKTS;
-               else if (!strcmp(optarg, "bytes"))
-                       sinfo->what = XT_CONNBYTES_BYTES;
-               else if (!strcmp(optarg, "avgpkt"))
-                       sinfo->what = XT_CONNBYTES_AVGPKT;
-               else
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Unknown --connbytes-mode `%s'", optarg);
-               *flags |= 4;
-               break;
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static void connbytes_check(unsigned int flags)
-{
-       if (flags != 7)
-               exit_error(PARAMETER_PROBLEM, "You must specify `--connbytes'"
-                          "`--connbytes-dir' and `--connbytes-mode'");
-}
-
-static void print_mode(struct xt_connbytes_info *sinfo)
-{
-       switch (sinfo->what) {
-               case XT_CONNBYTES_PKTS:
-                       fputs("packets ", stdout);
-                       break;
-               case XT_CONNBYTES_BYTES:
-                       fputs("bytes ", stdout);
-                       break;
-               case XT_CONNBYTES_AVGPKT:
-                       fputs("avgpkt ", stdout);
-                       break;
-               default:
-                       fputs("unknown ", stdout);
-                       break;
-       }
-}
-
-static void print_direction(struct xt_connbytes_info *sinfo)
-{
-       switch (sinfo->direction) {
-               case XT_CONNBYTES_DIR_ORIGINAL:
-                       fputs("original ", stdout);
-                       break;
-               case XT_CONNBYTES_DIR_REPLY:
-                       fputs("reply ", stdout);
-                       break;
-               case XT_CONNBYTES_DIR_BOTH:
-                       fputs("both ", stdout);
-                       break;
-               default:
-                       fputs("unknown ", stdout);
-                       break;
-       }
-}
-
-/* Prints out the matchinfo. */
-static void
-connbytes_print(const void *ip, const struct xt_entry_match *match, int numeric)
-{
-       struct xt_connbytes_info *sinfo = (struct xt_connbytes_info *)match->data;
-
-       if (sinfo->count.from > sinfo->count.to) 
-               printf("connbytes ! %llu:%llu ",
-                       (unsigned long long)sinfo->count.to,
-                       (unsigned long long)sinfo->count.from);
-       else
-               printf("connbytes %llu:%llu ",
-                       (unsigned long long)sinfo->count.from,
-                       (unsigned long long)sinfo->count.to);
-
-       fputs("connbytes mode ", stdout);
-       print_mode(sinfo);
-
-       fputs("connbytes direction ", stdout);
-       print_direction(sinfo);
-}
-
-/* Saves the matchinfo in parsable form to stdout. */
-static void connbytes_save(const void *ip, const struct xt_entry_match *match)
-{
-       struct xt_connbytes_info *sinfo = (struct xt_connbytes_info *)match->data;
-
-       if (sinfo->count.from > sinfo->count.to) 
-               printf("! --connbytes %llu:%llu ",
-                       (unsigned long long)sinfo->count.to,
-                       (unsigned long long)sinfo->count.from);
-       else
-               printf("--connbytes %llu:%llu ",
-                       (unsigned long long)sinfo->count.from,
-                       (unsigned long long)sinfo->count.to);
-
-       fputs("--connbytes-mode ", stdout);
-       print_mode(sinfo);
-
-       fputs("--connbytes-dir ", stdout);
-       print_direction(sinfo);
-}
-
-static struct xtables_match connbytes_match = {
-       .family         = AF_INET,
-       .name           = "connbytes",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_connbytes_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_connbytes_info)),
-       .help           = connbytes_help,
-       .parse          = connbytes_parse,
-       .final_check    = connbytes_check,
-       .print          = connbytes_print,
-       .save           = connbytes_save,
-       .extra_opts     = connbytes_opts,
-};
-
-static struct xtables_match connbytes_match6 = {
-       .family         = AF_INET6,
-       .name           = "connbytes",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_connbytes_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_connbytes_info)),
-       .help           = connbytes_help,
-       .parse          = connbytes_parse,
-       .final_check    = connbytes_check,
-       .print          = connbytes_print,
-       .save           = connbytes_save,
-       .extra_opts     = connbytes_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&connbytes_match);
-       xtables_register_match(&connbytes_match6);
-}
diff --git a/extensions/libxt_connbytes.man b/extensions/libxt_connbytes.man
deleted file mode 100644 (file)
index f547968..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-Match by how many bytes or packets a connection (or one of the two
-flows constituting the connection) has transferred so far, or by
-average bytes per packet.
-
-The counters are 64bit and are thus not expected to overflow ;)
-
-The primary use is to detect long-lived downloads and mark them to be
-scheduled using a lower priority band in traffic control.
-
-The transferred bytes per connection can also be viewed through
-/proc/net/ip_conntrack and accessed via ctnetlink
-.TP
-[\fB!\fP] \fB--connbytes\fP \fIfrom\fP[\fB:\fR\fIto\fP]
-match packets from a connection whose packets/bytes/average packet
-size is more than FROM and less than TO bytes/packets. if TO is
-omitted only FROM check is done. "!" is used to match packets not
-falling in the range.
-.TP
-\fB--connbytes-dir\fR {\fBoriginal\fR|\fBreply\fR|\fBboth\fR}
-which packets to consider
-.TP
-\fB--connbytes-mode\fR {\fBpackets\fR|\fBbytes\fR|\fBavgpkt\fR}
-whether to check the amount of packets, number of bytes transferred or
-the average size (in bytes) of all packets received so far. Note that
-when "both" is used together with "avgpkt", and data is going (mainly)
-only in one direction (for example HTTP), the average packet size will
-be about half of the actual data packets.
-.TP
-Example:
-iptables .. -m connbytes --connbytes 10000:100000 --connbytes-dir both --connbytes-mode bytes ...
diff --git a/extensions/libxt_connlimit.c b/extensions/libxt_connlimit.c
deleted file mode 100644 (file)
index 3474ce5..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-/* Shared library add-on to iptables to add connection limit support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <getopt.h>
-#include <iptables.h>
-#include "../include/linux/netfilter/xt_connlimit.h"
-
-static void connlimit_help(void)
-{
-       printf(
-"connlimit match options:\n"
-"[!] --connlimit-above n        match if the number of existing "
-"                               connections is (not) above n\n"
-"    --connlimit-mask n         group hosts using mask\n");
-}
-
-static const struct option connlimit_opts[] = {
-       {"connlimit-above", 1, NULL, 'A'},
-       {"connlimit-mask",  1, NULL, 'M'},
-       { .name = NULL }
-};
-
-static void connlimit_init(struct xt_entry_match *match)
-{
-       struct xt_connlimit_info *info = (void *)match->data;
-       info->v4_mask = 0xFFFFFFFFUL;
-}
-
-static void prefix_to_netmask(u_int32_t *mask, unsigned int prefix_len)
-{
-       if (prefix_len == 0) {
-               mask[0] = mask[1] = mask[2] = mask[3] = 0;
-       } else if (prefix_len <= 32) {
-               mask[0] <<= 32 - prefix_len;
-               mask[1] = mask[2] = mask[3] = 0;
-       } else if (prefix_len <= 64) {
-               mask[1] <<= 32 - (prefix_len - 32);
-               mask[2] = mask[3] = 0;
-       } else if (prefix_len <= 96) {
-               mask[2] <<= 32 - (prefix_len - 64);
-               mask[3] = 0;
-       } else if (prefix_len <= 128) {
-               mask[3] <<= 32 - (prefix_len - 96);
-       }
-       mask[0] = htonl(mask[0]);
-       mask[1] = htonl(mask[1]);
-       mask[2] = htonl(mask[2]);
-       mask[3] = htonl(mask[3]);
-}
-
-static int connlimit_parse(int c, char **argv, int invert, unsigned int *flags,
-                           struct xt_connlimit_info *info, unsigned int family)
-{
-       char *err;
-       int i;
-
-       switch (c) {
-       case 'A':
-               if (*flags & 0x1)
-                       exit_error(PARAMETER_PROBLEM,
-                               "--connlimit-above may be given only once");
-               *flags |= 0x1;
-               check_inverse(optarg, &invert, &optind, 0);
-               info->limit   = strtoul(argv[optind-1], NULL, 0);
-               info->inverse = invert;
-               break;
-       case 'M':
-               if (*flags & 0x2)
-                       exit_error(PARAMETER_PROBLEM,
-                               "--connlimit-mask may be given only once");
-
-               *flags |= 0x2;
-               i = strtoul(argv[optind-1], &err, 0);
-               if (family == AF_INET6) {
-                       if (i > 128 || *err != '\0')
-                               exit_error(PARAMETER_PROBLEM,
-                                       "--connlimit-mask must be between "
-                                       "0 and 128");
-                       prefix_to_netmask(info->v6_mask, i);
-               } else {
-                       if (i > 32 || *err != '\0')
-                               exit_error(PARAMETER_PROBLEM,
-                                       "--connlimit-mask must be between "
-                                       "0 and 32");
-                       if (i == 0)
-                               info->v4_mask = 0;
-                       else
-                               info->v4_mask = htonl(0xFFFFFFFF << (32 - i));
-               }
-               break;
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static int connlimit_parse4(int c, char **argv, int invert,
-                            unsigned int *flags, const void *entry,
-                            struct xt_entry_match **match)
-{
-       return connlimit_parse(c, argv, invert, flags,
-              (void *)(*match)->data, AF_INET);
-}
-
-static int connlimit_parse6(int c, char **argv, int invert,
-                            unsigned int *flags, const void *entry,
-                            struct xt_entry_match **match)
-{
-       return connlimit_parse(c, argv, invert, flags,
-              (void *)(*match)->data, AF_INET6);
-}
-
-static void connlimit_check(unsigned int flags)
-{
-       if (!(flags & 0x1))
-               exit_error(PARAMETER_PROBLEM,
-                       "You must specify \"--connlimit-above\"");
-}
-
-static unsigned int count_bits4(u_int32_t mask)
-{
-       unsigned int bits = 0;
-
-       for (mask = ~ntohl(mask); mask != 0; mask >>= 1)
-               ++bits;
-
-       return 32 - bits;
-}
-
-static unsigned int count_bits6(const u_int32_t *mask)
-{
-       unsigned int bits = 0, i;
-       u_int32_t tmp[4];
-
-       for (i = 0; i < 4; ++i)
-               for (tmp[i] = ~ntohl(mask[i]); tmp[i] != 0; tmp[i] >>= 1)
-                       ++bits;
-       return 128 - bits;
-}
-
-static void connlimit_print4(const void *ip,
-                             const struct xt_entry_match *match, int numeric)
-{
-       const struct xt_connlimit_info *info = (const void *)match->data;
-
-       printf("#conn/%u %s %u ", count_bits4(info->v4_mask),
-              info->inverse ? "<=" : ">", info->limit);
-}
-
-static void connlimit_print6(const void *ip,
-                             const struct xt_entry_match *match, int numeric)
-{
-       const struct xt_connlimit_info *info = (const void *)match->data;
-       printf("#conn/%u %s %u ", count_bits6(info->v6_mask),
-              info->inverse ? "<=" : ">", info->limit);
-}
-
-static void connlimit_save4(const void *ip, const struct xt_entry_match *match)
-{
-       const struct xt_connlimit_info *info = (const void *)match->data;
-
-       printf("%s--connlimit-above %u --connlimit-mask %u ",
-              info->inverse ? "! " : "", info->limit,
-              count_bits4(info->v4_mask));
-}
-
-static void connlimit_save6(const void *ip, const struct xt_entry_match *match)
-{
-       const struct xt_connlimit_info *info = (const void *)match->data;
-
-       printf("%s--connlimit-above %u --connlimit-mask %u ",
-              info->inverse ? "! " : "", info->limit,
-              count_bits6(info->v6_mask));
-}
-
-static struct xtables_match connlimit_match = {
-       .name          = "connlimit",
-       .family        = AF_INET,
-       .version       = XTABLES_VERSION,
-       .size          = XT_ALIGN(sizeof(struct xt_connlimit_info)),
-       .userspacesize = offsetof(struct xt_connlimit_info, data),
-       .help          = connlimit_help,
-       .init          = connlimit_init,
-       .parse         = connlimit_parse4,
-       .final_check   = connlimit_check,
-       .print         = connlimit_print4,
-       .save          = connlimit_save4,
-       .extra_opts    = connlimit_opts,
-};
-
-static struct xtables_match connlimit_match6 = {
-       .name          = "connlimit",
-       .family        = AF_INET6,
-       .version       = XTABLES_VERSION,
-       .size          = XT_ALIGN(sizeof(struct xt_connlimit_info)),
-       .userspacesize = offsetof(struct xt_connlimit_info, data),
-       .help          = connlimit_help,
-       .init          = connlimit_init,
-       .parse         = connlimit_parse6,
-       .final_check   = connlimit_check,
-       .print         = connlimit_print6,
-       .save          = connlimit_save6,
-       .extra_opts    = connlimit_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&connlimit_match);
-       xtables_register_match(&connlimit_match6);
-}
diff --git a/extensions/libxt_connlimit.man b/extensions/libxt_connlimit.man
deleted file mode 100644 (file)
index dd6a155..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-Allows you to restrict the number of parallel connections to a server per
-client IP address (or client address block).
-.TP
-[\fB!\fP] \fB--connlimit-above\fP \fIn\fP
-Match if the number of existing connections is (not) above \fIn\fR.
-.TP
-\fB--connlimit-mask\fR \fIprefix_length\fR
-Group hosts using the prefix length. For IPv4, this must be a number between
-(including) 0 and 32. For IPv6, between 0 and 128.
-.P
-Examples:
-.TP
-# allow 2 telnet connections per client host
-iptables -A INPUT -p tcp --syn --dport 23 -m connlimit --connlimit-above 2 -j REJECT
-.TP
-# you can also match the other way around:
-iptables -A INPUT -p tcp --syn --dport 23 -m connlimit ! --connlimit-above 2 -j ACCEPT
-.TP
-# limit the number of parallel HTTP requests to 16 per class C sized \
-network (24 bit netmask)
-iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 16
---connlimit-mask 24 -j REJECT
-.TP
-# limit the number of parallel HTTP requests to 16 for the link local network \
-(ipv6)
-ip6tables -p tcp --syn --dport 80 -s fe80::/64 -m connlimit --connlimit-above
-16 --connlimit-mask 64 -j REJECT
diff --git a/extensions/libxt_connmark.c b/extensions/libxt_connmark.c
deleted file mode 100644 (file)
index eb4060e..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-/* Shared library add-on to iptables to add connmark matching support.
- *
- * (C) 2002,2004 MARA Systems AB <http://www.marasystems.com>
- * by Henrik Nordstrom <hno@marasystems.com>
- *
- * Version 1.1
- *
- * 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 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, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-
-#include <xtables.h>
-#include <linux/netfilter/xt_connmark.h>
-
-enum {
-       F_MARK = 1 << 0,
-};
-
-static void connmark_mt_help(void)
-{
-       printf(
-"connmark match options:\n"
-"[!] --mark value[/mask]    Match ctmark value with optional mask\n");
-}
-
-static const struct option connmark_mt_opts[] = {
-       {.name = "mark", .has_arg = true, .val = '1'},
-       { .name = NULL }
-};
-
-static int
-connmark_mt_parse(int c, char **argv, int invert, unsigned int *flags,
-                  const void *entry, struct xt_entry_match **match)
-{
-       struct xt_connmark_mtinfo1 *info = (void *)(*match)->data;
-       unsigned int mark, mask = ~0U;
-       char *end;
-
-       switch (c) {
-       case '1': /* --mark */
-               param_act(P_ONLY_ONCE, "connmark", "--mark", *flags & F_MARK);
-               if (!strtonum(optarg, &end, &mark, 0, ~0U))
-                       param_act(P_BAD_VALUE, "connmark", "--mark", optarg);
-               if (*end == '/')
-                       if (!strtonum(end + 1, &end, &mask, 0, ~0U))
-                               param_act(P_BAD_VALUE, "connmark", "--mark", optarg);
-               if (*end != '\0')
-                       param_act(P_BAD_VALUE, "connmark", "--mark", optarg);
-
-               if (invert)
-                       info->invert = true;
-               info->mark = mark;
-               info->mask = mask;
-               *flags    |= F_MARK;
-               return true;
-       }
-       return false;
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int
-connmark_parse(int c, char **argv, int invert, unsigned int *flags,
-               const void *entry, struct xt_entry_match **match)
-{
-       struct xt_connmark_info *markinfo = (struct xt_connmark_info *)(*match)->data;
-
-       switch (c) {
-               char *end;
-       case '1':
-               check_inverse(optarg, &invert, &optind, 0);
-
-               markinfo->mark = strtoul(optarg, &end, 0);
-               markinfo->mask = 0xffffffffUL;
-               
-               if (*end == '/')
-                       markinfo->mask = strtoul(end+1, &end, 0);
-
-               if (*end != '\0' || end == optarg)
-                       exit_error(PARAMETER_PROBLEM, "Bad MARK value `%s'", optarg);
-               if (invert)
-                       markinfo->invert = 1;
-               *flags = 1;
-               break;
-
-       default:
-               return 0;
-       }
-       return 1;
-}
-
-static void print_mark(unsigned int mark, unsigned int mask)
-{
-       if (mask != 0xffffffffU)
-               printf("0x%x/0x%x ", mark, mask);
-       else
-               printf("0x%x ", mark);
-}
-
-static void connmark_mt_check(unsigned int flags)
-{
-       if (flags == 0)
-               exit_error(PARAMETER_PROBLEM,
-                          "connmark: The --mark option is required");
-}
-
-/* Prints out the matchinfo. */
-static void
-connmark_print(const void *ip, const struct xt_entry_match *match, int numeric)
-{
-       struct xt_connmark_info *info = (struct xt_connmark_info *)match->data;
-
-       printf("CONNMARK match ");
-       if (info->invert)
-               printf("!");
-       print_mark(info->mark, info->mask);
-}
-
-static void
-connmark_mt_print(const void *ip, const struct xt_entry_match *match, int numeric)
-{
-       const struct xt_connmark_mtinfo1 *info = (const void *)match->data;
-
-       printf("connmark match ");
-       if (info->invert)
-               printf("!");
-       print_mark(info->mark, info->mask);
-}
-
-/* Saves the matchinfo in parsable form to stdout. */
-static void connmark_save(const void *ip, const struct xt_entry_match *match)
-{
-       struct xt_connmark_info *info = (struct xt_connmark_info *)match->data;
-
-       if (info->invert)
-               printf("! ");
-
-       printf("--mark ");
-       print_mark(info->mark, info->mask);
-}
-
-static void
-connmark_mt_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct xt_connmark_mtinfo1 *info = (const void *)match->data;
-
-       if (info->invert)
-               printf("! ");
-
-       printf("--mark ");
-       print_mark(info->mark, info->mask);
-}
-
-static struct xtables_match connmark_mt_reg_v0 = {
-       .family         = AF_INET,
-       .name           = "connmark",
-       .revision       = 0,
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_connmark_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_connmark_info)),
-       .help           = connmark_mt_help,
-       .parse          = connmark_parse,
-       .final_check    = connmark_mt_check,
-       .print          = connmark_print,
-       .save           = connmark_save,
-       .extra_opts     = connmark_mt_opts,
-};
-
-static struct xtables_match connmark_mt6_reg_v0 = {
-       .family         = AF_INET6,
-       .name           = "connmark",
-       .revision       = 0,
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_connmark_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_connmark_info)),
-       .help           = connmark_mt_help,
-       .parse          = connmark_parse,
-       .final_check    = connmark_mt_check,
-       .print          = connmark_print,
-       .save           = connmark_save,
-       .extra_opts     = connmark_mt_opts,
-};
-
-static struct xtables_match connmark_mt_reg = {
-       .version        = XTABLES_VERSION,
-       .name           = "connmark",
-       .revision       = 1,
-       .family         = AF_INET,
-       .size           = XT_ALIGN(sizeof(struct xt_connmark_mtinfo1)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_connmark_mtinfo1)),
-       .help           = connmark_mt_help,
-       .parse          = connmark_mt_parse,
-       .final_check    = connmark_mt_check,
-       .print          = connmark_mt_print,
-       .save           = connmark_mt_save,
-       .extra_opts     = connmark_mt_opts,
-};
-
-static struct xtables_match connmark_mt6_reg = {
-       .version        = XTABLES_VERSION,
-       .name           = "connmark",
-       .revision       = 1,
-       .family         = AF_INET6,
-       .size           = XT_ALIGN(sizeof(struct xt_connmark_mtinfo1)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_connmark_mtinfo1)),
-       .help           = connmark_mt_help,
-       .parse          = connmark_mt_parse,
-       .final_check    = connmark_mt_check,
-       .print          = connmark_mt_print,
-       .save           = connmark_mt_save,
-       .extra_opts     = connmark_mt_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&connmark_mt_reg_v0);
-       xtables_register_match(&connmark_mt6_reg_v0);
-       xtables_register_match(&connmark_mt_reg);
-       xtables_register_match(&connmark_mt6_reg);
-}
diff --git a/extensions/libxt_connmark.man b/extensions/libxt_connmark.man
deleted file mode 100644 (file)
index a50c537..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-This module matches the netfilter mark field associated with a connection
-(which can be set using the \fBCONNMARK\fR target below).
-.TP
-[\fB!\fP] \fB--mark\fR \fIvalue\fR[\fB/\fR\fImask\fR]
-Matches packets in connections with the given mark value (if a mask is
-specified, this is logically ANDed with the mark before the comparison).
diff --git a/extensions/libxt_conntrack.c b/extensions/libxt_conntrack.c
deleted file mode 100644 (file)
index 1d339a0..0000000
+++ /dev/null
@@ -1,1068 +0,0 @@
-/*
- *     libxt_conntrack
- *     Shared library add-on to iptables for conntrack matching support.
- *
- *     GPL (C) 2001  Marc Boucher (marc@mbsi.ca).
- *     Copyright © CC Computer Consultants GmbH, 2007 - 2008
- *     Jan Engelhardt <jengelh@computergmbh.de>
- */
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <ctype.h>
-#include <getopt.h>
-#include <netdb.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <iptables.h>
-#include <xtables.h>
-#include <linux/netfilter.h>
-#include <linux/netfilter/xt_conntrack.h>
-#include <linux/netfilter/nf_conntrack_common.h>
-#include <arpa/inet.h>
-
-/* Function which prints out usage message. */
-static void conntrack_mt_help(void)
-{
-       printf(
-"conntrack match options:\n"
-"[!] --ctstate {INVALID|ESTABLISHED|NEW|RELATED|UNTRACKED|SNAT|DNAT}[,...]\n"
-"                               State(s) to match\n"
-"[!] --ctproto proto            Protocol to match; by number or name, e.g. \"tcp\"\n"
-"[!] --ctorigsrc address[/mask]\n"
-"[!] --ctorigdst address[/mask]\n"
-"[!] --ctreplsrc address[/mask]\n"
-"[!] --ctrepldst address[/mask]\n"
-"                               Original/Reply source/destination address\n"
-"[!] --ctorigsrcport port\n"
-"[!] --ctorigdstport port\n"
-"[!] --ctreplsrcport port\n"
-"[!] --ctrepldstport port\n"
-"                               TCP/UDP/SCTP orig./reply source/destination port\n"
-"[!] --ctstatus {NONE|EXPECTED|SEEN_REPLY|ASSURED|CONFIRMED}[,...]\n"
-"                               Status(es) to match\n"
-"[!] --ctexpire time[:time]     Match remaining lifetime in seconds against\n"
-"                               value or range of values (inclusive)\n"
-"    --ctdir {ORIGINAL|REPLY}   Flow direction of packet\n");
-}
-
-static const struct option conntrack_mt_opts_v0[] = {
-       {.name = "ctstate",   .has_arg = true, .val = '1'},
-       {.name = "ctproto",   .has_arg = true, .val = '2'},
-       {.name = "ctorigsrc", .has_arg = true, .val = '3'},
-       {.name = "ctorigdst", .has_arg = true, .val = '4'},
-       {.name = "ctreplsrc", .has_arg = true, .val = '5'},
-       {.name = "ctrepldst", .has_arg = true, .val = '6'},
-       {.name = "ctstatus",  .has_arg = true, .val = '7'},
-       {.name = "ctexpire",  .has_arg = true, .val = '8'},
-       { .name = NULL }
-};
-
-static const struct option conntrack_mt_opts[] = {
-       {.name = "ctstate",       .has_arg = true, .val = '1'},
-       {.name = "ctproto",       .has_arg = true, .val = '2'},
-       {.name = "ctorigsrc",     .has_arg = true, .val = '3'},
-       {.name = "ctorigdst",     .has_arg = true, .val = '4'},
-       {.name = "ctreplsrc",     .has_arg = true, .val = '5'},
-       {.name = "ctrepldst",     .has_arg = true, .val = '6'},
-       {.name = "ctstatus",      .has_arg = true, .val = '7'},
-       {.name = "ctexpire",      .has_arg = true, .val = '8'},
-       {.name = "ctorigsrcport", .has_arg = true, .val = 'a'},
-       {.name = "ctorigdstport", .has_arg = true, .val = 'b'},
-       {.name = "ctreplsrcport", .has_arg = true, .val = 'c'},
-       {.name = "ctrepldstport", .has_arg = true, .val = 'd'},
-       {.name = "ctdir",         .has_arg = true, .val = 'e'},
-       {.name = NULL},
-};
-
-static int
-parse_state(const char *state, size_t len, struct xt_conntrack_info *sinfo)
-{
-       if (strncasecmp(state, "INVALID", len) == 0)
-               sinfo->statemask |= XT_CONNTRACK_STATE_INVALID;
-       else if (strncasecmp(state, "NEW", len) == 0)
-               sinfo->statemask |= XT_CONNTRACK_STATE_BIT(IP_CT_NEW);
-       else if (strncasecmp(state, "ESTABLISHED", len) == 0)
-               sinfo->statemask |= XT_CONNTRACK_STATE_BIT(IP_CT_ESTABLISHED);
-       else if (strncasecmp(state, "RELATED", len) == 0)
-               sinfo->statemask |= XT_CONNTRACK_STATE_BIT(IP_CT_RELATED);
-       else if (strncasecmp(state, "UNTRACKED", len) == 0)
-               sinfo->statemask |= XT_CONNTRACK_STATE_UNTRACKED;
-       else if (strncasecmp(state, "SNAT", len) == 0)
-               sinfo->statemask |= XT_CONNTRACK_STATE_SNAT;
-       else if (strncasecmp(state, "DNAT", len) == 0)
-               sinfo->statemask |= XT_CONNTRACK_STATE_DNAT;
-       else
-               return 0;
-       return 1;
-}
-
-static void
-parse_states(const char *arg, struct xt_conntrack_info *sinfo)
-{
-       const char *comma;
-
-       while ((comma = strchr(arg, ',')) != NULL) {
-               if (comma == arg || !parse_state(arg, comma-arg, sinfo))
-                       exit_error(PARAMETER_PROBLEM, "Bad ctstate `%s'", arg);
-               arg = comma+1;
-       }
-
-       if (strlen(arg) == 0 || !parse_state(arg, strlen(arg), sinfo))
-               exit_error(PARAMETER_PROBLEM, "Bad ctstate `%s'", arg);
-}
-
-static bool
-conntrack_ps_state(struct xt_conntrack_mtinfo1 *info, const char *state,
-                   size_t z)
-{
-       if (strncasecmp(state, "INVALID", z) == 0)
-               info->state_mask |= XT_CONNTRACK_STATE_INVALID;
-       else if (strncasecmp(state, "NEW", z) == 0)
-               info->state_mask |= XT_CONNTRACK_STATE_BIT(IP_CT_NEW);
-       else if (strncasecmp(state, "ESTABLISHED", z) == 0)
-               info->state_mask |= XT_CONNTRACK_STATE_BIT(IP_CT_ESTABLISHED);
-       else if (strncasecmp(state, "RELATED", z) == 0)
-               info->state_mask |= XT_CONNTRACK_STATE_BIT(IP_CT_RELATED);
-       else if (strncasecmp(state, "UNTRACKED", z) == 0)
-               info->state_mask |= XT_CONNTRACK_STATE_UNTRACKED;
-       else if (strncasecmp(state, "SNAT", z) == 0)
-               info->state_mask |= XT_CONNTRACK_STATE_SNAT;
-       else if (strncasecmp(state, "DNAT", z) == 0)
-               info->state_mask |= XT_CONNTRACK_STATE_DNAT;
-       else
-               return false;
-       return true;
-}
-
-static void
-conntrack_ps_states(struct xt_conntrack_mtinfo1 *info, const char *arg)
-{
-       const char *comma;
-
-       while ((comma = strchr(arg, ',')) != NULL) {
-               if (comma == arg || !conntrack_ps_state(info, arg, comma - arg))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Bad ctstate \"%s\"", arg);
-               arg = comma + 1;
-       }
-
-       if (strlen(arg) == 0 || !conntrack_ps_state(info, arg, strlen(arg)))
-               exit_error(PARAMETER_PROBLEM, "Bad ctstate \"%s\"", arg);
-}
-
-static int
-parse_status(const char *status, size_t len, struct xt_conntrack_info *sinfo)
-{
-       if (strncasecmp(status, "NONE", len) == 0)
-               sinfo->statusmask |= 0;
-       else if (strncasecmp(status, "EXPECTED", len) == 0)
-               sinfo->statusmask |= IPS_EXPECTED;
-       else if (strncasecmp(status, "SEEN_REPLY", len) == 0)
-               sinfo->statusmask |= IPS_SEEN_REPLY;
-       else if (strncasecmp(status, "ASSURED", len) == 0)
-               sinfo->statusmask |= IPS_ASSURED;
-#ifdef IPS_CONFIRMED
-       else if (strncasecmp(status, "CONFIRMED", len) == 0)
-               sinfo->statusmask |= IPS_CONFIRMED;
-#endif
-       else
-               return 0;
-       return 1;
-}
-
-static void
-parse_statuses(const char *arg, struct xt_conntrack_info *sinfo)
-{
-       const char *comma;
-
-       while ((comma = strchr(arg, ',')) != NULL) {
-               if (comma == arg || !parse_status(arg, comma-arg, sinfo))
-                       exit_error(PARAMETER_PROBLEM, "Bad ctstatus `%s'", arg);
-               arg = comma+1;
-       }
-
-       if (strlen(arg) == 0 || !parse_status(arg, strlen(arg), sinfo))
-               exit_error(PARAMETER_PROBLEM, "Bad ctstatus `%s'", arg);
-}
-
-static bool
-conntrack_ps_status(struct xt_conntrack_mtinfo1 *info, const char *status,
-                    size_t z)
-{
-       if (strncasecmp(status, "NONE", z) == 0)
-               info->status_mask |= 0;
-       else if (strncasecmp(status, "EXPECTED", z) == 0)
-               info->status_mask |= IPS_EXPECTED;
-       else if (strncasecmp(status, "SEEN_REPLY", z) == 0)
-               info->status_mask |= IPS_SEEN_REPLY;
-       else if (strncasecmp(status, "ASSURED", z) == 0)
-               info->status_mask |= IPS_ASSURED;
-       else if (strncasecmp(status, "CONFIRMED", z) == 0)
-               info->status_mask |= IPS_CONFIRMED;
-       else
-               return false;
-       return true;
-}
-
-static void
-conntrack_ps_statuses(struct xt_conntrack_mtinfo1 *info, const char *arg)
-{
-       const char *comma;
-
-       while ((comma = strchr(arg, ',')) != NULL) {
-               if (comma == arg || !conntrack_ps_status(info, arg, comma - arg))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Bad ctstatus \"%s\"", arg);
-               arg = comma + 1;
-       }
-
-       if (strlen(arg) == 0 || !conntrack_ps_status(info, arg, strlen(arg)))
-               exit_error(PARAMETER_PROBLEM, "Bad ctstatus \"%s\"", arg);
-}
-
-static unsigned long
-parse_expire(const char *s)
-{
-       unsigned int len;
-
-       if (string_to_number(s, 0, 0, &len) == -1)
-               exit_error(PARAMETER_PROBLEM, "expire value invalid: `%s'\n", s);
-       else
-               return len;
-}
-
-/* If a single value is provided, min and max are both set to the value */
-static void
-parse_expires(const char *s, struct xt_conntrack_info *sinfo)
-{
-       char *buffer;
-       char *cp;
-
-       buffer = strdup(s);
-       if ((cp = strchr(buffer, ':')) == NULL)
-               sinfo->expires_min = sinfo->expires_max =
-                       parse_expire(buffer);
-       else {
-               *cp = '\0';
-               cp++;
-
-               sinfo->expires_min = buffer[0] ? parse_expire(buffer) : 0;
-               sinfo->expires_max = cp[0]
-                       ? parse_expire(cp)
-                       : (unsigned long)-1;
-       }
-       free(buffer);
-
-       if (sinfo->expires_min > sinfo->expires_max)
-               exit_error(PARAMETER_PROBLEM,
-                          "expire min. range value `%lu' greater than max. "
-                          "range value `%lu'", sinfo->expires_min, sinfo->expires_max);
-}
-
-static void
-conntrack_ps_expires(struct xt_conntrack_mtinfo1 *info, const char *s)
-{
-       unsigned int min, max;
-       char *end;
-
-       if (!strtonum(s, &end, &min, 0, ~0))
-               param_act(P_BAD_VALUE, "conntrack", "--expires", s);
-       max = min;
-       if (*end == ':')
-               if (!strtonum(s, &end, &max, 0, ~0U))
-                       param_act(P_BAD_VALUE, "conntrack", "--expires", s);
-       if (*end != '\0')
-               param_act(P_BAD_VALUE, "conntrack", "--expires", s);
-
-       if (min > max)
-               exit_error(PARAMETER_PROBLEM,
-                          "expire min. range value \"%u\" greater than max. "
-                          "range value \"%u\"", min, max);
-
-       info->expires_min = min;
-       info->expires_max = max;
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int conntrack_parse(int c, char **argv, int invert, unsigned int *flags,
-                           const void *entry, struct xt_entry_match **match)
-{
-       struct xt_conntrack_info *sinfo = (void *)(*match)->data;
-       char *protocol = NULL;
-       unsigned int naddrs = 0;
-       struct in_addr *addrs = NULL;
-
-
-       switch (c) {
-       case '1':
-               check_inverse(optarg, &invert, &optind, 0);
-
-               parse_states(argv[optind-1], sinfo);
-               if (invert) {
-                       sinfo->invflags |= XT_CONNTRACK_STATE;
-               }
-               sinfo->flags |= XT_CONNTRACK_STATE;
-               break;
-
-       case '2':
-               check_inverse(optarg, &invert, &optind, 0);
-
-               if(invert)
-                       sinfo->invflags |= XT_CONNTRACK_PROTO;
-
-               /* Canonicalize into lower case */
-               for (protocol = argv[optind-1]; *protocol; protocol++)
-                       *protocol = tolower(*protocol);
-
-               protocol = argv[optind-1];
-               sinfo->tuple[IP_CT_DIR_ORIGINAL].dst.protonum = parse_protocol(protocol);
-
-               if (sinfo->tuple[IP_CT_DIR_ORIGINAL].dst.protonum == 0
-                   && (sinfo->invflags & XT_INV_PROTO))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "rule would never match protocol");
-
-               sinfo->flags |= XT_CONNTRACK_PROTO;
-               break;
-
-       case '3':
-               check_inverse(optarg, &invert, &optind, 0);
-
-               if (invert)
-                       sinfo->invflags |= XT_CONNTRACK_ORIGSRC;
-
-               ipparse_hostnetworkmask(argv[optind-1], &addrs,
-                                       &sinfo->sipmsk[IP_CT_DIR_ORIGINAL],
-                                       &naddrs);
-               if(naddrs > 1)
-                       exit_error(PARAMETER_PROBLEM,
-                               "multiple IP addresses not allowed");
-
-               if(naddrs == 1) {
-                       sinfo->tuple[IP_CT_DIR_ORIGINAL].src.ip = addrs[0].s_addr;
-               }
-
-               sinfo->flags |= XT_CONNTRACK_ORIGSRC;
-               break;
-
-       case '4':
-               check_inverse(optarg, &invert, &optind, 0);
-
-               if (invert)
-                       sinfo->invflags |= XT_CONNTRACK_ORIGDST;
-
-               ipparse_hostnetworkmask(argv[optind-1], &addrs,
-                                       &sinfo->dipmsk[IP_CT_DIR_ORIGINAL],
-                                       &naddrs);
-               if(naddrs > 1)
-                       exit_error(PARAMETER_PROBLEM,
-                               "multiple IP addresses not allowed");
-
-               if(naddrs == 1) {
-                       sinfo->tuple[IP_CT_DIR_ORIGINAL].dst.ip = addrs[0].s_addr;
-               }
-
-               sinfo->flags |= XT_CONNTRACK_ORIGDST;
-               break;
-
-       case '5':
-               check_inverse(optarg, &invert, &optind, 0);
-
-               if (invert)
-                       sinfo->invflags |= XT_CONNTRACK_REPLSRC;
-
-               ipparse_hostnetworkmask(argv[optind-1], &addrs,
-                                       &sinfo->sipmsk[IP_CT_DIR_REPLY],
-                                       &naddrs);
-               if(naddrs > 1)
-                       exit_error(PARAMETER_PROBLEM,
-                               "multiple IP addresses not allowed");
-
-               if(naddrs == 1) {
-                       sinfo->tuple[IP_CT_DIR_REPLY].src.ip = addrs[0].s_addr;
-               }
-
-               sinfo->flags |= XT_CONNTRACK_REPLSRC;
-               break;
-
-       case '6':
-               check_inverse(optarg, &invert, &optind, 0);
-
-               if (invert)
-                       sinfo->invflags |= XT_CONNTRACK_REPLDST;
-
-               ipparse_hostnetworkmask(argv[optind-1], &addrs,
-                                       &sinfo->dipmsk[IP_CT_DIR_REPLY],
-                                       &naddrs);
-               if(naddrs > 1)
-                       exit_error(PARAMETER_PROBLEM,
-                               "multiple IP addresses not allowed");
-
-               if(naddrs == 1) {
-                       sinfo->tuple[IP_CT_DIR_REPLY].dst.ip = addrs[0].s_addr;
-               }
-
-               sinfo->flags |= XT_CONNTRACK_REPLDST;
-               break;
-
-       case '7':
-               check_inverse(optarg, &invert, &optind, 0);
-
-               parse_statuses(argv[optind-1], sinfo);
-               if (invert) {
-                       sinfo->invflags |= XT_CONNTRACK_STATUS;
-               }
-               sinfo->flags |= XT_CONNTRACK_STATUS;
-               break;
-
-       case '8':
-               check_inverse(optarg, &invert, &optind, 0);
-
-               parse_expires(argv[optind-1], sinfo);
-               if (invert) {
-                       sinfo->invflags |= XT_CONNTRACK_EXPIRES;
-               }
-               sinfo->flags |= XT_CONNTRACK_EXPIRES;
-               break;
-
-       default:
-               return 0;
-       }
-
-       *flags = sinfo->flags;
-       return 1;
-}
-
-static int
-conntrack_mt_parse(int c, char **argv, int invert, unsigned int *flags,
-                   struct xt_entry_match **match)
-{
-       struct xt_conntrack_mtinfo1 *info = (void *)(*match)->data;
-       unsigned int port;
-       char *p;
-
-       switch (c) {
-       case '1': /* --ctstate */
-               conntrack_ps_states(info, optarg);
-               info->match_flags |= XT_CONNTRACK_STATE;
-               if (invert)
-                       info->invert_flags |= XT_CONNTRACK_STATE;
-               break;
-
-       case '2': /* --ctproto */
-               /* Canonicalize into lower case */
-               for (p = optarg; *p != '\0'; ++p)
-                       *p = tolower(*p);
-               info->l4proto = parse_protocol(optarg);
-
-               if (info->l4proto == 0 && (info->invert_flags & XT_INV_PROTO))
-                       exit_error(PARAMETER_PROBLEM, "conntrack: rule would "
-                                  "never match protocol");
-
-               info->match_flags |= XT_CONNTRACK_PROTO;
-               if (invert)
-                       info->invert_flags |= XT_CONNTRACK_PROTO;
-               break;
-
-       case '7': /* --ctstatus */
-               conntrack_ps_statuses(info, optarg);
-               info->match_flags |= XT_CONNTRACK_STATUS;
-               if (invert)
-                       info->invert_flags |= XT_CONNTRACK_STATUS;
-               break;
-
-       case '8': /* --ctexpire */
-               conntrack_ps_expires(info, optarg);
-               info->match_flags |= XT_CONNTRACK_EXPIRES;
-               if (invert)
-                       info->invert_flags |= XT_CONNTRACK_EXPIRES;
-               break;
-
-       case 'a': /* --ctorigsrcport */
-               if (!strtonum(optarg, NULL, &port, 0, ~(u_int16_t)0))
-                       param_act(P_BAD_VALUE, "conntrack",
-                                 "--ctorigsrcport", optarg);
-               info->match_flags |= XT_CONNTRACK_ORIGSRC_PORT;
-               info->origsrc_port = htons(port);
-               if (invert)
-                       info->invert_flags |= XT_CONNTRACK_ORIGSRC_PORT;
-               break;
-
-       case 'b': /* --ctorigdstport */
-               if (!strtonum(optarg, NULL, &port, 0, ~(u_int16_t)0))
-                       param_act(P_BAD_VALUE, "conntrack",
-                                 "--ctorigdstport", optarg);
-               info->match_flags |= XT_CONNTRACK_ORIGDST_PORT;
-               info->origdst_port = htons(port);
-               if (invert)
-                       info->invert_flags |= XT_CONNTRACK_ORIGDST_PORT;
-               break;
-
-       case 'c': /* --ctreplsrcport */
-               if (!strtonum(optarg, NULL, &port, 0, ~(u_int16_t)0))
-                       param_act(P_BAD_VALUE, "conntrack",
-                                 "--ctreplsrcport", optarg);
-               info->match_flags |= XT_CONNTRACK_REPLSRC_PORT;
-               info->replsrc_port = htons(port);
-               if (invert)
-                       info->invert_flags |= XT_CONNTRACK_REPLSRC_PORT;
-               break;
-
-       case 'd': /* --ctrepldstport */
-               if (!strtonum(optarg, NULL, &port, 0, ~(u_int16_t)0))
-                       param_act(P_BAD_VALUE, "conntrack",
-                                 "--ctrepldstport", optarg);
-               info->match_flags |= XT_CONNTRACK_REPLDST_PORT;
-               info->repldst_port = htons(port);
-               if (invert)
-                       info->invert_flags |= XT_CONNTRACK_REPLDST_PORT;
-               break;
-
-       case 'e': /* --ctdir */
-               param_act(P_NO_INVERT, "conntrack", "--ctdir", invert);
-               if (strcasecmp(optarg, "ORIGINAL") == 0) {
-                       info->match_flags  |= XT_CONNTRACK_DIRECTION;
-                       info->invert_flags &= ~XT_CONNTRACK_DIRECTION;
-               } else if (strcasecmp(optarg, "REPLY") == 0) {
-                       info->match_flags  |= XT_CONNTRACK_DIRECTION;
-                       info->invert_flags |= XT_CONNTRACK_DIRECTION;
-               } else {
-                       param_act(P_BAD_VALUE, "conntrack", "--ctdir", optarg);
-               }
-               break;
-
-       default:
-               return false;
-       }
-
-       *flags = info->match_flags;
-       return true;
-}
-
-static int
-conntrack_mt4_parse(int c, char **argv, int invert, unsigned int *flags,
-                    const void *entry, struct xt_entry_match **match)
-{
-       struct xt_conntrack_mtinfo1 *info = (void *)(*match)->data;
-       struct in_addr *addr = NULL;
-       unsigned int naddrs = 0;
-
-       switch (c) {
-       case '3': /* --ctorigsrc */
-               ipparse_hostnetworkmask(optarg, &addr, &info->origsrc_mask.in,
-                                       &naddrs);
-               if (naddrs > 1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "multiple IP addresses not allowed");
-               if (naddrs == 1)
-                       memcpy(&info->origsrc_addr.in, addr, sizeof(*addr));
-               info->match_flags |= XT_CONNTRACK_ORIGSRC;
-               if (invert)
-                       info->invert_flags |= XT_CONNTRACK_ORIGSRC;
-               break;
-
-       case '4': /* --ctorigdst */
-               ipparse_hostnetworkmask(optarg, &addr, &info->origdst_mask.in,
-                                       &naddrs);
-               if (naddrs > 1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "multiple IP addresses not allowed");
-               if (naddrs == 1)
-                       memcpy(&info->origdst_addr.in, addr, sizeof(*addr));
-               info->match_flags |= XT_CONNTRACK_ORIGDST;
-               if (invert)
-                       info->invert_flags |= XT_CONNTRACK_ORIGDST;
-               break;
-
-       case '5': /* --ctreplsrc */
-               ipparse_hostnetworkmask(optarg, &addr, &info->replsrc_mask.in,
-                                       &naddrs);
-               if (naddrs > 1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "multiple IP addresses not allowed");
-               if (naddrs == 1)
-                       memcpy(&info->replsrc_addr.in, addr, sizeof(*addr));
-               info->match_flags |= XT_CONNTRACK_REPLSRC;
-               if (invert)
-                       info->invert_flags |= XT_CONNTRACK_REPLSRC;
-               break;
-
-       case '6': /* --ctrepldst */
-               ipparse_hostnetworkmask(optarg, &addr, &info->repldst_mask.in,
-                                       &naddrs);
-               if (naddrs > 1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "multiple IP addresses not allowed");
-               if (naddrs == 1)
-                       memcpy(&info->repldst_addr.in, addr, sizeof(*addr));
-               info->match_flags |= XT_CONNTRACK_REPLDST;
-               if (invert)
-                       info->invert_flags |= XT_CONNTRACK_REPLDST;
-               break;
-
-
-       default:
-               return conntrack_mt_parse(c, argv, invert, flags, match);
-       }
-
-       *flags = info->match_flags;
-       return true;
-}
-
-static int
-conntrack_mt6_parse(int c, char **argv, int invert, unsigned int *flags,
-                    const void *entry, struct xt_entry_match **match)
-{
-       struct xt_conntrack_mtinfo1 *info = (void *)(*match)->data;
-       struct in6_addr *addr = NULL;
-       unsigned int naddrs = 0;
-
-       switch (c) {
-       case '3': /* --ctorigsrc */
-               ip6parse_hostnetworkmask(optarg, &addr,
-                                        &info->origsrc_mask.in6, &naddrs);
-               if (naddrs > 1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "multiple IP addresses not allowed");
-               if (naddrs == 1)
-                       memcpy(&info->origsrc_addr.in6, addr, sizeof(*addr));
-               info->match_flags |= XT_CONNTRACK_ORIGSRC;
-               if (invert)
-                       info->invert_flags |= XT_CONNTRACK_ORIGSRC;
-               break;
-
-       case '4': /* --ctorigdst */
-               ip6parse_hostnetworkmask(optarg, &addr,
-                                        &info->origdst_mask.in6, &naddrs);
-               if (naddrs > 1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "multiple IP addresses not allowed");
-               if (naddrs == 1)
-                       memcpy(&info->origdst_addr.in, addr, sizeof(*addr));
-               info->match_flags |= XT_CONNTRACK_ORIGDST;
-               if (invert)
-                       info->invert_flags |= XT_CONNTRACK_ORIGDST;
-               break;
-
-       case '5': /* --ctreplsrc */
-               ip6parse_hostnetworkmask(optarg, &addr,
-                                        &info->replsrc_mask.in6, &naddrs);
-               if (naddrs > 1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "multiple IP addresses not allowed");
-               if (naddrs == 1)
-                       memcpy(&info->replsrc_addr.in, addr, sizeof(*addr));
-               info->match_flags |= XT_CONNTRACK_REPLSRC;
-               if (invert)
-                       info->invert_flags |= XT_CONNTRACK_REPLSRC;
-               break;
-
-       case '6': /* --ctrepldst */
-               ip6parse_hostnetworkmask(optarg, &addr,
-                                        &info->repldst_mask.in6, &naddrs);
-               if (naddrs > 1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "multiple IP addresses not allowed");
-               if (naddrs == 1)
-                       memcpy(&info->repldst_addr.in, addr, sizeof(*addr));
-               info->match_flags |= XT_CONNTRACK_REPLDST;
-               if (invert)
-                       info->invert_flags |= XT_CONNTRACK_REPLDST;
-               break;
-
-
-       default:
-               return conntrack_mt_parse(c, argv, invert, flags, match);
-       }
-
-       *flags = info->match_flags;
-       return true;
-}
-
-static void conntrack_mt_check(unsigned int flags)
-{
-       if (flags == 0)
-               exit_error(PARAMETER_PROBLEM, "conntrack: At least one option "
-                          "is required");
-}
-
-static void
-print_state(unsigned int statemask)
-{
-       const char *sep = "";
-
-       if (statemask & XT_CONNTRACK_STATE_INVALID) {
-               printf("%sINVALID", sep);
-               sep = ",";
-       }
-       if (statemask & XT_CONNTRACK_STATE_BIT(IP_CT_NEW)) {
-               printf("%sNEW", sep);
-               sep = ",";
-       }
-       if (statemask & XT_CONNTRACK_STATE_BIT(IP_CT_RELATED)) {
-               printf("%sRELATED", sep);
-               sep = ",";
-       }
-       if (statemask & XT_CONNTRACK_STATE_BIT(IP_CT_ESTABLISHED)) {
-               printf("%sESTABLISHED", sep);
-               sep = ",";
-       }
-       if (statemask & XT_CONNTRACK_STATE_UNTRACKED) {
-               printf("%sUNTRACKED", sep);
-               sep = ",";
-       }
-       if (statemask & XT_CONNTRACK_STATE_SNAT) {
-               printf("%sSNAT", sep);
-               sep = ",";
-       }
-       if (statemask & XT_CONNTRACK_STATE_DNAT) {
-               printf("%sDNAT", sep);
-               sep = ",";
-       }
-       printf(" ");
-}
-
-static void
-print_status(unsigned int statusmask)
-{
-       const char *sep = "";
-
-       if (statusmask & IPS_EXPECTED) {
-               printf("%sEXPECTED", sep);
-               sep = ",";
-       }
-       if (statusmask & IPS_SEEN_REPLY) {
-               printf("%sSEEN_REPLY", sep);
-               sep = ",";
-       }
-       if (statusmask & IPS_ASSURED) {
-               printf("%sASSURED", sep);
-               sep = ",";
-       }
-       if (statusmask & IPS_CONFIRMED) {
-               printf("%sCONFIRMED", sep);
-               sep = ",";
-       }
-       if (statusmask == 0)
-               printf("%sNONE", sep);
-       printf(" ");
-}
-
-static void
-conntrack_dump_addr(const union nf_inet_addr *addr,
-                    const union nf_inet_addr *mask,
-                    unsigned int family, bool numeric)
-{
-       if (family == AF_INET) {
-               if (!numeric && addr->ip == 0) {
-                       printf("anywhere ");
-                       return;
-               }
-               printf("%s ", ipaddr_to_anyname(&addr->in));
-       } else if (family == AF_INET6) {
-               if (!numeric && addr->ip6[0] == 0 && addr->ip6[1] == 0 &&
-                   addr->ip6[2] == 0 && addr->ip6[3] == 0) {
-                       printf("anywhere ");
-                       return;
-               }
-               printf("%s ", ip6addr_to_anyname(&addr->in6));
-       }
-}
-
-static void
-print_addr(struct in_addr *addr, struct in_addr *mask, int inv, int numeric)
-{
-       char buf[BUFSIZ];
-
-       if (inv)
-               printf("! ");
-
-       if (mask->s_addr == 0L && !numeric)
-               printf("%s ", "anywhere");
-       else {
-               if (numeric)
-                       sprintf(buf, "%s", ipaddr_to_numeric(addr));
-               else
-                       sprintf(buf, "%s", ipaddr_to_anyname(addr));
-               strcat(buf, ipmask_to_numeric(mask));
-               printf("%s ", buf);
-       }
-}
-
-/* Saves the matchinfo in parsable form to stdout. */
-static void
-matchinfo_print(const void *ip, const struct xt_entry_match *match, int numeric, const char *optpfx)
-{
-       struct xt_conntrack_info *sinfo = (void *)match->data;
-
-       if(sinfo->flags & XT_CONNTRACK_STATE) {
-               if (sinfo->invflags & XT_CONNTRACK_STATE)
-                       printf("! ");
-               printf("%sctstate ", optpfx);
-               print_state(sinfo->statemask);
-       }
-
-       if(sinfo->flags & XT_CONNTRACK_PROTO) {
-               if (sinfo->invflags & XT_CONNTRACK_PROTO)
-                       printf("! ");
-               printf("%sctproto ", optpfx);
-               printf("%u ", sinfo->tuple[IP_CT_DIR_ORIGINAL].dst.protonum);
-       }
-
-       if(sinfo->flags & XT_CONNTRACK_ORIGSRC) {
-               if (sinfo->invflags & XT_CONNTRACK_ORIGSRC)
-                       printf("! ");
-               printf("%sctorigsrc ", optpfx);
-
-               print_addr(
-                   (struct in_addr *)&sinfo->tuple[IP_CT_DIR_ORIGINAL].src.ip,
-                   &sinfo->sipmsk[IP_CT_DIR_ORIGINAL],
-                   false,
-                   numeric);
-       }
-
-       if(sinfo->flags & XT_CONNTRACK_ORIGDST) {
-               if (sinfo->invflags & XT_CONNTRACK_ORIGDST)
-                       printf("! ");
-               printf("%sctorigdst ", optpfx);
-
-               print_addr(
-                   (struct in_addr *)&sinfo->tuple[IP_CT_DIR_ORIGINAL].dst.ip,
-                   &sinfo->dipmsk[IP_CT_DIR_ORIGINAL],
-                   false,
-                   numeric);
-       }
-
-       if(sinfo->flags & XT_CONNTRACK_REPLSRC) {
-               if (sinfo->invflags & XT_CONNTRACK_REPLSRC)
-                       printf("! ");
-               printf("%sctreplsrc ", optpfx);
-
-               print_addr(
-                   (struct in_addr *)&sinfo->tuple[IP_CT_DIR_REPLY].src.ip,
-                   &sinfo->sipmsk[IP_CT_DIR_REPLY],
-                   false,
-                   numeric);
-       }
-
-       if(sinfo->flags & XT_CONNTRACK_REPLDST) {
-               if (sinfo->invflags & XT_CONNTRACK_REPLDST)
-                       printf("! ");
-               printf("%sctrepldst ", optpfx);
-
-               print_addr(
-                   (struct in_addr *)&sinfo->tuple[IP_CT_DIR_REPLY].dst.ip,
-                   &sinfo->dipmsk[IP_CT_DIR_REPLY],
-                   false,
-                   numeric);
-       }
-
-       if(sinfo->flags & XT_CONNTRACK_STATUS) {
-               if (sinfo->invflags & XT_CONNTRACK_STATUS)
-                       printf("! ");
-               printf("%sctstatus ", optpfx);
-               print_status(sinfo->statusmask);
-       }
-
-       if(sinfo->flags & XT_CONNTRACK_EXPIRES) {
-               if (sinfo->invflags & XT_CONNTRACK_EXPIRES)
-                       printf("! ");
-               printf("%sctexpire ", optpfx);
-
-               if (sinfo->expires_max == sinfo->expires_min)
-                       printf("%lu ", sinfo->expires_min);
-               else
-                       printf("%lu:%lu ", sinfo->expires_min, sinfo->expires_max);
-       }
-}
-
-static void
-conntrack_dump(const struct xt_conntrack_mtinfo1 *info, const char *prefix,
-               unsigned int family, bool numeric)
-{
-       if (info->match_flags & XT_CONNTRACK_STATE) {
-               if (info->invert_flags & XT_CONNTRACK_STATE)
-                       printf("! ");
-               printf("%sctstate ", prefix);
-               print_state(info->state_mask);
-       }
-
-       if (info->match_flags & XT_CONNTRACK_PROTO) {
-               if (info->invert_flags & XT_CONNTRACK_PROTO)
-                       printf("! ");
-               printf("%sctproto %u ", prefix, info->l4proto);
-       }
-
-       if (info->match_flags & XT_CONNTRACK_ORIGSRC) {
-               if (info->invert_flags & XT_CONNTRACK_PROTO)
-                       printf("! ");
-               printf("%sctorigsrc ", prefix);
-               conntrack_dump_addr(&info->origsrc_addr, &info->origsrc_mask,
-                                   family, numeric);
-       }
-
-       if (info->match_flags & XT_CONNTRACK_ORIGDST) {
-               if (info->invert_flags & XT_CONNTRACK_PROTO)
-                       printf("! ");
-               printf("%sctorigdst ", prefix);
-               conntrack_dump_addr(&info->origdst_addr, &info->origdst_mask,
-                                   family, numeric);
-       }
-
-       if (info->match_flags & XT_CONNTRACK_REPLSRC) {
-               if (info->invert_flags & XT_CONNTRACK_PROTO)
-                       printf("! ");
-               printf("%sctreplsrc ", prefix);
-               conntrack_dump_addr(&info->replsrc_addr, &info->replsrc_mask,
-                                   family, numeric);
-       }
-
-       if (info->match_flags & XT_CONNTRACK_REPLDST) {
-               if (info->invert_flags & XT_CONNTRACK_PROTO)
-                       printf("! ");
-               printf("%sctrepldst ", prefix);
-               conntrack_dump_addr(&info->repldst_addr, &info->repldst_mask,
-                                   family, numeric);
-       }
-
-       if (info->match_flags & XT_CONNTRACK_ORIGSRC_PORT) {
-               if (info->invert_flags & XT_CONNTRACK_ORIGSRC_PORT)
-                       printf("! ");
-               printf("%sctorigsrcport %u ", prefix,
-                      ntohs(info->origsrc_port));
-       }
-
-       if (info->match_flags & XT_CONNTRACK_ORIGDST_PORT) {
-               if (info->invert_flags & XT_CONNTRACK_ORIGDST_PORT)
-                       printf("! ");
-               printf("%sctorigdstport %u ", prefix,
-                      ntohs(info->origdst_port));
-       }
-
-       if (info->match_flags & XT_CONNTRACK_REPLSRC_PORT) {
-               if (info->invert_flags & XT_CONNTRACK_REPLSRC_PORT)
-                       printf("! ");
-               printf("%sctreplsrcport %u ", prefix,
-                      ntohs(info->replsrc_port));
-       }
-
-       if (info->match_flags & XT_CONNTRACK_REPLDST_PORT) {
-               if (info->invert_flags & XT_CONNTRACK_REPLDST_PORT)
-                       printf("! ");
-               printf("%sctrepldstport %u ", prefix,
-                      ntohs(info->repldst_port));
-       }
-
-       if (info->match_flags & XT_CONNTRACK_STATUS) {
-               if (info->invert_flags & XT_CONNTRACK_STATUS)
-                       printf("! ");
-               printf("%sctstatus ", prefix);
-               print_status(info->status_mask);
-       }
-
-       if (info->match_flags & XT_CONNTRACK_EXPIRES) {
-               if (info->invert_flags & XT_CONNTRACK_EXPIRES)
-                       printf("! ");
-               printf("%sctexpire ", prefix);
-
-               if (info->expires_max == info->expires_min)
-                       printf("%u ", (unsigned int)info->expires_min);
-               else
-                       printf("%u:%u ", (unsigned int)info->expires_min,
-                              (unsigned int)info->expires_max);
-       }
-}
-
-/* Prints out the matchinfo. */
-static void conntrack_print(const void *ip, const struct xt_entry_match *match,
-                            int numeric)
-{
-       matchinfo_print(ip, match, numeric, "");
-}
-
-static void
-conntrack_mt_print(const void *ip, const struct xt_entry_match *match,
-                   int numeric)
-{
-       conntrack_dump((const void *)match->data, "", AF_INET, numeric);
-}
-
-static void
-conntrack_mt6_print(const void *ip, const struct xt_entry_match *match,
-                    int numeric)
-{
-       conntrack_dump((const void *)match->data, "", AF_INET6, numeric);
-}
-
-/* Saves the matchinfo in parsable form to stdout. */
-static void conntrack_save(const void *ip, const struct xt_entry_match *match)
-{
-       matchinfo_print(ip, match, 1, "--");
-}
-
-static void conntrack_mt_save(const void *ip,
-                              const struct xt_entry_match *match)
-{
-       conntrack_dump((const void *)match->data, "--", AF_INET, true);
-}
-
-static void conntrack_mt6_save(const void *ip,
-                               const struct xt_entry_match *match)
-{
-       conntrack_dump((const void *)match->data, "--", AF_INET6, true);
-}
-
-static struct xtables_match conntrack_match = {
-       .version       = XTABLES_VERSION,
-       .name          = "conntrack",
-       .revision      = 0,
-       .family        = AF_INET,
-       .size          = XT_ALIGN(sizeof(struct xt_conntrack_info)),
-       .userspacesize = XT_ALIGN(sizeof(struct xt_conntrack_info)),
-       .help          = conntrack_mt_help,
-       .parse         = conntrack_parse,
-       .final_check   = conntrack_mt_check,
-       .print         = conntrack_print,
-       .save          = conntrack_save,
-       .extra_opts    = conntrack_mt_opts_v0,
-};
-
-static struct xtables_match conntrack_mt_reg = {
-       .version       = XTABLES_VERSION,
-       .name          = "conntrack",
-       .revision      = 1,
-       .family        = AF_INET,
-       .size          = XT_ALIGN(sizeof(struct xt_conntrack_mtinfo1)),
-       .userspacesize = XT_ALIGN(sizeof(struct xt_conntrack_mtinfo1)),
-       .help          = conntrack_mt_help,
-       .parse         = conntrack_mt4_parse,
-       .final_check   = conntrack_mt_check,
-       .print         = conntrack_mt_print,
-       .save          = conntrack_mt_save,
-       .extra_opts    = conntrack_mt_opts,
-};
-
-static struct xtables_match conntrack_mt6_reg = {
-       .version       = XTABLES_VERSION,
-       .name          = "conntrack",
-       .revision      = 1,
-       .family        = AF_INET6,
-       .size          = XT_ALIGN(sizeof(struct xt_conntrack_mtinfo1)),
-       .userspacesize = XT_ALIGN(sizeof(struct xt_conntrack_mtinfo1)),
-       .help          = conntrack_mt_help,
-       .parse         = conntrack_mt6_parse,
-       .final_check   = conntrack_mt_check,
-       .print         = conntrack_mt6_print,
-       .save          = conntrack_mt6_save,
-       .extra_opts    = conntrack_mt_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&conntrack_match);
-       xtables_register_match(&conntrack_mt_reg);
-       xtables_register_match(&conntrack_mt6_reg);
-}
diff --git a/extensions/libxt_conntrack.man b/extensions/libxt_conntrack.man
deleted file mode 100644 (file)
index 17c6dd2..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-This module, when combined with connection tracking, allows access to the
-connection tracking state for this packet/connection.
-.TP
-[\fB!\fR] \fB--ctstate\fR \fIstatelist\fR
-\fIstatelist\fR is a comma separated list of the connection states to match.
-Possible states are listed below.
-.TP
-[\fB!\fR] \fB--ctproto\fR \fIl4proto\fR
-Layer-4 protocol to match (by number or name)
-.TP
-[\fB!\fR] \fB--ctorigsrc\fR \fIaddress\fR[\fB/\fR\fImask\fR]
-.TP
-[\fB!\fR] \fB--ctorigdst\fR \fIaddress\fR[\fB/\fR\fImask\fR]
-.TP
-[\fB!\fR] \fB--ctreplsrc\fR \fIaddress\fR[\fB/\fR\fImask\fR]
-.TP
-[\fB!\fR] \fB--ctrepldst\fR \fIaddress\fR[\fB/\fR\fImask\fR]
-Match against original/reply source/destination address
-.TP
-[\fB!\fR] \fB--ctorigsrcport\fR \fIport\fR
-.TP
-[\fB!\fR] \fB--ctorigdstport\fR \fIport\fR
-.TP
-[\fB!\fR] \fB--ctreplsrcport\fR \fIport\fR
-.TP
-[\fB!\fR] \fB--ctrepldstport\fR \fIport\fR
-Match against original/reply source/destination port (TCP/UDP/etc.) or GRE key.
-.TP
-[\fB!\fR] \fB--ctstatus\fR \fIstatelist\fR
-\fIstatuslist\fR is a comma separated list of the connection statuses to match.
-Possible statuses are listed below.
-.TP
-[\fB!\fR] \fB--ctexpire\fR \fItime\fR[\fB:\fR\fItime\fR]
-Match remaining lifetime in seconds against given value or range of values
-(inclusive)
-.TP
-\fB--ctdir\fR {\fBORIGINAL\fR|\fBREPLY\fR}
-Match packets that are flowing in the specified direction. If this flag is not
-specified at all, matches packets in both directions.
-.PP
-States for \fB--ctstate\fR:
-.TP
-\fBINVALID\fR
-meaning that the packet is associated with no known connection
-.TP
-\fBNEW\fR
-meaning that the packet has started a new connection, or otherwise associated
-with a connection which has not seen packets in both directions, and
-.TP
-\fBESTABLISHED\fR
-meaning that the packet is associated with a connection which has seen packets
-in both directions,
-.TP
-\fBRELATED\fR
-meaning that the packet is starting a new connection, but is associated with an
-existing connection, such as an FTP data transfer, or an ICMP error.
-.TP
-\fBSNAT\fR
-A virtual state, matching if the original source address differs from the reply
-destination.
-.TP
-\fBDNAT\fR
-A virtual state, matching if the original destination differs from the reply
-source.
-.PP
-Statuses for \fB--ctstatus\fR:
-.TP
-\fBNONE\fR
-None of the below.
-.TP
-\fBEXPECTED\fR
-This is an expected connection (i.e. a conntrack helper set it up)
-.TP
-\fBSEEN_REPLY\fR
-Conntrack has seen packets in both directions.
-.TP
-\fBASSURED\fR
-Conntrack entry should never be early-expired.
-.TP
-\fBCONFIRMED\fR
-Connection is confirmed: originating packet has left box.
diff --git a/extensions/libxt_dccp.c b/extensions/libxt_dccp.c
deleted file mode 100644 (file)
index c368ba4..0000000
+++ /dev/null
@@ -1,373 +0,0 @@
-/* Shared library add-on to iptables for DCCP matching
- *
- * (C) 2005 by Harald Welte <laforge@netfilter.org>
- *
- * This program is distributed under the terms of GNU GPL v2, 1991
- *
- */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <netdb.h>
-#include <ctype.h>
-
-#include <xtables.h>
-#include <linux/dccp.h>
-#include <linux/netfilter/x_tables.h>
-#include <linux/netfilter/xt_dccp.h>
-
-#if 0
-#define DEBUGP(format, first...) printf(format, ##first)
-#define static
-#else
-#define DEBUGP(format, fist...) 
-#endif
-
-/* Initialize the match. */
-static void dccp_init(struct xt_entry_match *m)
-{
-       struct xt_dccp_info *einfo = (struct xt_dccp_info *)m->data;
-
-       memset(einfo, 0, sizeof(struct xt_dccp_info));
-}
-
-static void dccp_help(void)
-{
-       printf(
-"dccp match options\n"
-" --source-port [!] port[:port]                          match source port(s)\n"
-" --sport ...\n"
-" --destination-port [!] port[:port]                     match destination port(s)\n"
-" --dport ...\n");
-}
-
-static const struct option dccp_opts[] = {
-       { .name = "source-port", .has_arg = 1, .val = '1' },
-       { .name = "sport", .has_arg = 1, .val = '1' },
-       { .name = "destination-port", .has_arg = 1, .val = '2' },
-       { .name = "dport", .has_arg = 1, .val = '2' },
-       { .name = "dccp-types", .has_arg = 1, .val = '3' },
-       { .name = "dccp-option", .has_arg = 1, .val = '4' },
-       { .name = NULL }
-};
-
-static void
-parse_dccp_ports(const char *portstring, 
-                u_int16_t *ports)
-{
-       char *buffer;
-       char *cp;
-
-       buffer = strdup(portstring);
-       DEBUGP("%s\n", portstring);
-       if ((cp = strchr(buffer, ':')) == NULL) {
-               ports[0] = ports[1] = parse_port(buffer, "dccp");
-       }
-       else {
-               *cp = '\0';
-               cp++;
-
-               ports[0] = buffer[0] ? parse_port(buffer, "dccp") : 0;
-               ports[1] = cp[0] ? parse_port(cp, "dccp") : 0xFFFF;
-
-               if (ports[0] > ports[1])
-                       exit_error(PARAMETER_PROBLEM,
-                                  "invalid portrange (min > max)");
-       }
-       free(buffer);
-}
-
-static const char *const dccp_pkt_types[] = {
-       [DCCP_PKT_REQUEST]      = "REQUEST",
-       [DCCP_PKT_RESPONSE]     = "RESPONSE",
-       [DCCP_PKT_DATA]         = "DATA",
-       [DCCP_PKT_ACK]          = "ACK",
-       [DCCP_PKT_DATAACK]      = "DATAACK",
-       [DCCP_PKT_CLOSEREQ]     = "CLOSEREQ",
-       [DCCP_PKT_CLOSE]        = "CLOSE",
-       [DCCP_PKT_RESET]        = "RESET",
-       [DCCP_PKT_SYNC]         = "SYNC",
-       [DCCP_PKT_SYNCACK]      = "SYNCACK",
-       [DCCP_PKT_INVALID]      = "INVALID",
-};
-
-static u_int16_t
-parse_dccp_types(const char *typestring)
-{
-       u_int16_t typemask = 0;
-       char *ptr, *buffer;
-
-       buffer = strdup(typestring);
-
-       for (ptr = strtok(buffer, ","); ptr; ptr = strtok(NULL, ",")) {
-               unsigned int i;
-               for (i = 0; i < sizeof(dccp_pkt_types)/sizeof(char *); i++) {
-                       if (!strcasecmp(dccp_pkt_types[i], ptr)) {
-                               typemask |= (1 << i);
-                               break;
-                       }
-               }
-               if (i == sizeof(dccp_pkt_types)/sizeof(char *))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Unknown DCCP type `%s'", ptr);
-       }
-
-       free(buffer);
-       return typemask;
-}
-
-static u_int8_t parse_dccp_option(char *optstring)
-{
-       unsigned int ret;
-
-       if (string_to_number(optstring, 1, 255, &ret) == -1)
-               exit_error(PARAMETER_PROBLEM, "Bad DCCP option `%s'",
-                          optstring);
-
-       return (u_int8_t)ret;
-}
-
-static int
-dccp_parse(int c, char **argv, int invert, unsigned int *flags,
-           const void *entry, struct xt_entry_match **match)
-{
-       struct xt_dccp_info *einfo
-               = (struct xt_dccp_info *)(*match)->data;
-
-       switch (c) {
-       case '1':
-               if (*flags & XT_DCCP_SRC_PORTS)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--source-port' allowed");
-               einfo->flags |= XT_DCCP_SRC_PORTS;
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_dccp_ports(argv[optind-1], einfo->spts);
-               if (invert)
-                       einfo->invflags |= XT_DCCP_SRC_PORTS;
-               *flags |= XT_DCCP_SRC_PORTS;
-               break;
-
-       case '2':
-               if (*flags & XT_DCCP_DEST_PORTS)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--destination-port' allowed");
-               einfo->flags |= XT_DCCP_DEST_PORTS;
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_dccp_ports(argv[optind-1], einfo->dpts);
-               if (invert)
-                       einfo->invflags |= XT_DCCP_DEST_PORTS;
-               *flags |= XT_DCCP_DEST_PORTS;
-               break;
-
-       case '3':
-               if (*flags & XT_DCCP_TYPE)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--dccp-types' allowed");
-               einfo->flags |= XT_DCCP_TYPE;
-               check_inverse(optarg, &invert, &optind, 0);
-               einfo->typemask = parse_dccp_types(argv[optind-1]);
-               if (invert)
-                       einfo->invflags |= XT_DCCP_TYPE;
-               *flags |= XT_DCCP_TYPE;
-               break;
-
-       case '4':
-               if (*flags & XT_DCCP_OPTION)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--dccp-option' allowed");
-               einfo->flags |= XT_DCCP_OPTION;
-               check_inverse(optarg, &invert, &optind, 0);
-               einfo->option = parse_dccp_option(argv[optind-1]);
-               if (invert)
-                       einfo->invflags |= XT_DCCP_OPTION;
-               *flags |= XT_DCCP_OPTION;
-               break;
-       default:
-               return 0;
-       }
-       return 1;
-}
-
-static char *
-port_to_service(int port)
-{
-       struct servent *service;
-
-       if ((service = getservbyport(htons(port), "dccp")))
-               return service->s_name;
-
-       return NULL;
-}
-
-static void
-print_port(u_int16_t port, int numeric)
-{
-       char *service;
-
-       if (numeric || (service = port_to_service(port)) == NULL)
-               printf("%u", port);
-       else
-               printf("%s", service);
-}
-
-static void
-print_ports(const char *name, u_int16_t min, u_int16_t max,
-           int invert, int numeric)
-{
-       const char *inv = invert ? "!" : "";
-
-       if (min != 0 || max != 0xFFFF || invert) {
-               printf("%s", name);
-               if (min == max) {
-                       printf(":%s", inv);
-                       print_port(min, numeric);
-               } else {
-                       printf("s:%s", inv);
-                       print_port(min, numeric);
-                       printf(":");
-                       print_port(max, numeric);
-               }
-               printf(" ");
-       }
-}
-
-static void
-print_types(u_int16_t types, int inverted, int numeric)
-{
-       int have_type = 0;
-
-       if (inverted)
-               printf("! ");
-
-       while (types) {
-               unsigned int i;
-
-               for (i = 0; !(types & (1 << i)); i++);
-
-               if (have_type)
-                       printf(",");
-               else
-                       have_type = 1;
-
-               if (numeric)
-                       printf("%u", i);
-               else
-                       printf("%s", dccp_pkt_types[i]);
-
-               types &= ~(1 << i);
-       }
-}
-
-static void
-print_option(u_int8_t option, int invert, int numeric)
-{
-       if (option || invert)
-               printf("option=%s%u ", invert ? "!" : "", option);
-}
-
-/* Prints out the matchinfo. */
-static void
-dccp_print(const void *ip, const struct xt_entry_match *match, int numeric)
-{
-       const struct xt_dccp_info *einfo =
-               (const struct xt_dccp_info *)match->data;
-
-       printf("dccp ");
-
-       if (einfo->flags & XT_DCCP_SRC_PORTS) {
-               print_ports("spt", einfo->spts[0], einfo->spts[1],
-                       einfo->invflags & XT_DCCP_SRC_PORTS,
-                       numeric);
-       }
-
-       if (einfo->flags & XT_DCCP_DEST_PORTS) {
-               print_ports("dpt", einfo->dpts[0], einfo->dpts[1],
-                       einfo->invflags & XT_DCCP_DEST_PORTS,
-                       numeric);
-       }
-
-       if (einfo->flags & XT_DCCP_TYPE) {
-               print_types(einfo->typemask,
-                          einfo->invflags & XT_DCCP_TYPE,
-                          numeric);
-       }
-
-       if (einfo->flags & XT_DCCP_OPTION) {
-               print_option(einfo->option,
-                            einfo->invflags & XT_DCCP_OPTION, numeric);
-       }
-}
-
-/* Saves the union ipt_matchinfo in parsable form to stdout. */
-static void dccp_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct xt_dccp_info *einfo =
-               (const struct xt_dccp_info *)match->data;
-
-       if (einfo->flags & XT_DCCP_SRC_PORTS) {
-               if (einfo->invflags & XT_DCCP_SRC_PORTS)
-                       printf("! ");
-               if (einfo->spts[0] != einfo->spts[1])
-                       printf("--sport %u:%u ", 
-                              einfo->spts[0], einfo->spts[1]);
-               else
-                       printf("--sport %u ", einfo->spts[0]);
-       }
-
-       if (einfo->flags & XT_DCCP_DEST_PORTS) {
-               if (einfo->invflags & XT_DCCP_DEST_PORTS)
-                       printf("! ");
-               if (einfo->dpts[0] != einfo->dpts[1])
-                       printf("--dport %u:%u ",
-                              einfo->dpts[0], einfo->dpts[1]);
-               else
-                       printf("--dport %u ", einfo->dpts[0]);
-       }
-
-       if (einfo->flags & XT_DCCP_TYPE) {
-               printf("--dccp-type ");
-               print_types(einfo->typemask, einfo->invflags & XT_DCCP_TYPE,0);
-       }
-
-       if (einfo->flags & XT_DCCP_OPTION) {
-               printf("--dccp-option %s%u ", 
-                       einfo->typemask & XT_DCCP_OPTION ? "! " : "",
-                       einfo->option);
-       }
-}
-
-static struct xtables_match dccp_match = {
-       .name           = "dccp",
-       .family         = AF_INET,
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_dccp_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_dccp_info)),
-       .help           = dccp_help,
-       .init           = dccp_init,
-       .parse          = dccp_parse,
-       .print          = dccp_print,
-       .save           = dccp_save,
-       .extra_opts     = dccp_opts,
-};
-
-static struct xtables_match dccp_match6 = {
-       .name           = "dccp",
-       .family         = AF_INET6,
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_dccp_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_dccp_info)),
-       .help           = dccp_help,
-       .init           = dccp_init,
-       .parse          = dccp_parse,
-       .print          = dccp_print,
-       .save           = dccp_save,
-       .extra_opts     = dccp_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&dccp_match);
-       xtables_register_match(&dccp_match6);
-}
-
diff --git a/extensions/libxt_dccp.man b/extensions/libxt_dccp.man
deleted file mode 100644 (file)
index 0320af4..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-.TP
-[\fB!\fP] \fB--source-port\fP,\fB--sport\fP \fIport\fP[\fB:\fP\fIport\fP]
-.TP
-[\fB!\fP] \fB--destination-port\fP,\fB--dport\fP \fIport\fP[\fB:\fP\fIport\fP]
-.TP
-[\fB!\fP] \fB--dccp-types\fR \fImask\fP
-Match when the DCCP packet type is one of 'mask'. 'mask' is a comma-separated
-list of packet types.  Packet types are: 
-.BR "REQUEST RESPONSE DATA ACK DATAACK CLOSEREQ CLOSE RESET SYNC SYNCACK INVALID" .
-.TP
-[\fB!\fP] \fB--dccp-option\fR \fInumber\fP
-Match if DCP option set.
diff --git a/extensions/libxt_dscp.c b/extensions/libxt_dscp.c
deleted file mode 100644 (file)
index 6aed499..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-/* Shared library add-on to iptables for DSCP
- *
- * (C) 2002 by Harald Welte <laforge@gnumonks.org>
- *
- * This program is distributed under the terms of GNU GPL v2, 1991
- *
- * libipt_dscp.c borrowed heavily from libipt_tos.c
- *
- * --class support added by Iain Barnes
- * 
- * For a list of DSCP codepoints see 
- * http://www.iana.org/assignments/dscp-registry
- *
- */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-
-#include <xtables.h>
-#include <linux/netfilter/x_tables.h>
-#include <linux/netfilter/xt_dscp.h>
-
-/* This is evil, but it's my code - HW*/
-#include "dscp_helper.c"
-
-static void dscp_help(void)
-{
-       printf(
-"dscp match options\n"
-"[!] --dscp value              Match DSCP codepoint with numerical value\n"
-"                              This value can be in decimal (ex: 32)\n"
-"                              or in hex (ex: 0x20)\n"
-"[!] --dscp-class name         Match the DiffServ class. This value may\n"
-"                              be any of the BE,EF, AFxx or CSx classes\n"
-"\n"
-"                              These two options are mutually exclusive !\n");
-}
-
-static const struct option dscp_opts[] = {
-       { "dscp", 1, NULL, 'F' },
-       { "dscp-class", 1, NULL, 'G' },
-       { .name = NULL }
-};
-
-static void
-parse_dscp(const char *s, struct xt_dscp_info *dinfo)
-{
-       unsigned int dscp;
-       
-       if (string_to_number(s, 0, 255, &dscp) == -1)
-               exit_error(PARAMETER_PROBLEM,
-                          "Invalid dscp `%s'\n", s);
-
-       if (dscp > XT_DSCP_MAX)
-               exit_error(PARAMETER_PROBLEM,
-                          "DSCP `%d` out of range\n", dscp);
-
-       dinfo->dscp = (u_int8_t )dscp;
-       return;
-}
-
-
-static void
-parse_class(const char *s, struct xt_dscp_info *dinfo)
-{
-       unsigned int dscp = class_to_dscp(s);
-
-       /* Assign the value */
-       dinfo->dscp = (u_int8_t)dscp;
-}
-
-
-static int
-dscp_parse(int c, char **argv, int invert, unsigned int *flags,
-           const void *entry, struct xt_entry_match **match)
-{
-       struct xt_dscp_info *dinfo
-               = (struct xt_dscp_info *)(*match)->data;
-
-       switch (c) {
-       case 'F':
-               if (*flags)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "DSCP match: Only use --dscp ONCE!");
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_dscp(argv[optind-1], dinfo);
-               if (invert)
-                       dinfo->invert = 1;
-               *flags = 1;
-               break;
-
-       case 'G':
-               if (*flags)
-                       exit_error(PARAMETER_PROBLEM,
-                                       "DSCP match: Only use --dscp-class ONCE!");
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_class(argv[optind - 1], dinfo);
-               if (invert)
-                       dinfo->invert = 1;
-               *flags = 1;
-               break;
-
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static void dscp_check(unsigned int flags)
-{
-       if (!flags)
-               exit_error(PARAMETER_PROBLEM,
-                          "DSCP match: Parameter --dscp is required");
-}
-
-static void
-print_dscp(u_int8_t dscp, int invert, int numeric)
-{
-       if (invert)
-               fputc('!', stdout);
-
-       printf("0x%02x ", dscp);
-}
-
-/* Prints out the matchinfo. */
-static void
-dscp_print(const void *ip, const struct xt_entry_match *match, int numeric)
-{
-       const struct xt_dscp_info *dinfo =
-               (const struct xt_dscp_info *)match->data;
-       printf("DSCP match ");
-       print_dscp(dinfo->dscp, dinfo->invert, numeric);
-}
-
-/* Saves the union ipt_matchinfo in parsable form to stdout. */
-static void dscp_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct xt_dscp_info *dinfo =
-               (const struct xt_dscp_info *)match->data;
-
-       printf("--dscp ");
-       print_dscp(dinfo->dscp, dinfo->invert, 1);
-}
-
-static struct xtables_match dscp_match = {
-       .family         = AF_INET,
-       .name           = "dscp",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_dscp_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_dscp_info)),
-       .help           = dscp_help,
-       .parse          = dscp_parse,
-       .final_check    = dscp_check,
-       .print          = dscp_print,
-       .save           = dscp_save,
-       .extra_opts     = dscp_opts,
-};
-
-static struct xtables_match dscp_match6 = {
-       .family         = AF_INET6,
-       .name           = "dscp",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_dscp_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_dscp_info)),
-       .help           = dscp_help,
-       .parse          = dscp_parse,
-       .final_check    = dscp_check,
-       .print          = dscp_print,
-       .save           = dscp_save,
-       .extra_opts     = dscp_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&dscp_match);
-       xtables_register_match(&dscp_match6);
-}
diff --git a/extensions/libxt_dscp.man b/extensions/libxt_dscp.man
deleted file mode 100644 (file)
index e2357db..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-This module matches the 6 bit DSCP field within the TOS field in the
-IP header.  DSCP has superseded TOS within the IETF.
-.TP
-[\fB!\fP] \fB--dscp\fP \fIvalue\fP
-Match against a numeric (decimal or hex) value [0-63].
-.TP
-[\fB!\fP] \fB--dscp-class\fP \fIclass\fP
-Match the DiffServ class. This value may be any of the
-BE, EF, AFxx or CSx classes.  It will then be converted
-into its according numeric value.
diff --git a/extensions/libxt_esp.c b/extensions/libxt_esp.c
deleted file mode 100644 (file)
index 82749f5..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-/* Shared library add-on to iptables to add ESP support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <errno.h>
-#include <xtables.h>
-#include <linux/netfilter/xt_esp.h>
-
-/* Function which prints out usage message. */
-static void esp_help(void)
-{
-       printf(
-"esp match options:\n"
-" --espspi [!] spi[:spi]\n"
-"                              match spi (range)\n");
-}
-
-static const struct option esp_opts[] = {
-       { "espspi", 1, NULL, '1' },
-       { .name = NULL }
-};
-
-static u_int32_t
-parse_esp_spi(const char *spistr)
-{
-       unsigned long int spi;
-       char* ep;
-
-       spi =  strtoul(spistr,&ep,0) ;
-
-       if ( spistr == ep ) {
-               exit_error(PARAMETER_PROBLEM,
-                          "ESP no valid digits in spi `%s'", spistr);
-       }
-       if ( spi == ULONG_MAX  && errno == ERANGE ) {
-               exit_error(PARAMETER_PROBLEM,
-                          "spi `%s' specified too big: would overflow", spistr);
-       }       
-       if ( *spistr != '\0'  && *ep != '\0' ) {
-               exit_error(PARAMETER_PROBLEM,
-                          "ESP error parsing spi `%s'", spistr);
-       }
-       return (u_int32_t) spi;
-}
-
-static void
-parse_esp_spis(const char *spistring, u_int32_t *spis)
-{
-       char *buffer;
-       char *cp;
-
-       buffer = strdup(spistring);
-       if ((cp = strchr(buffer, ':')) == NULL)
-               spis[0] = spis[1] = parse_esp_spi(buffer);
-       else {
-               *cp = '\0';
-               cp++;
-
-               spis[0] = buffer[0] ? parse_esp_spi(buffer) : 0;
-               spis[1] = cp[0] ? parse_esp_spi(cp) : 0xFFFFFFFF;
-               if (spis[0] > spis[1])
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Invalid ESP spi range: %s", spistring);
-       }
-       free(buffer);
-}
-
-/* Initialize the match. */
-static void esp_init(struct xt_entry_match *m)
-{
-       struct xt_esp *espinfo = (struct xt_esp *)m->data;
-
-       espinfo->spis[1] = 0xFFFFFFFF;
-}
-
-#define ESP_SPI 0x01
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int
-esp_parse(int c, char **argv, int invert, unsigned int *flags,
-          const void *entry, struct xt_entry_match **match)
-{
-       struct xt_esp *espinfo = (struct xt_esp *)(*match)->data;
-
-       switch (c) {
-       case '1':
-               if (*flags & ESP_SPI)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--espspi' allowed");
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_esp_spis(argv[optind-1], espinfo->spis);
-               if (invert)
-                       espinfo->invflags |= XT_ESP_INV_SPI;
-               *flags |= ESP_SPI;
-               break;
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static void
-print_spis(const char *name, u_int32_t min, u_int32_t max,
-           int invert)
-{
-       const char *inv = invert ? "!" : "";
-
-       if (min != 0 || max != 0xFFFFFFFF || invert) {
-               if (min == max)
-                       printf("%s:%s%u ", name, inv, min);
-               else
-                       printf("%ss:%s%u:%u ", name, inv, min, max);
-       }
-}
-
-/* Prints out the union ipt_matchinfo. */
-static void
-esp_print(const void *ip, const struct xt_entry_match *match, int numeric)
-{
-       const struct xt_esp *esp = (struct xt_esp *)match->data;
-
-       printf("esp ");
-       print_spis("spi", esp->spis[0], esp->spis[1],
-                   esp->invflags & XT_ESP_INV_SPI);
-       if (esp->invflags & ~XT_ESP_INV_MASK)
-               printf("Unknown invflags: 0x%X ",
-                      esp->invflags & ~XT_ESP_INV_MASK);
-}
-
-/* Saves the union ipt_matchinfo in parsable form to stdout. */
-static void esp_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct xt_esp *espinfo = (struct xt_esp *)match->data;
-
-       if (!(espinfo->spis[0] == 0
-           && espinfo->spis[1] == 0xFFFFFFFF)) {
-               printf("--espspi %s", 
-                       (espinfo->invflags & XT_ESP_INV_SPI) ? "! " : "");
-               if (espinfo->spis[0]
-                   != espinfo->spis[1])
-                       printf("%u:%u ",
-                              espinfo->spis[0],
-                              espinfo->spis[1]);
-               else
-                       printf("%u ",
-                              espinfo->spis[0]);
-       }
-
-}
-
-static struct xtables_match esp_match = {
-       .family         = AF_INET,
-       .name           = "esp",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_esp)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_esp)),
-       .help           = esp_help,
-       .init           = esp_init,
-       .parse          = esp_parse,
-       .print          = esp_print,
-       .save           = esp_save,
-       .extra_opts     = esp_opts,
-};
-
-static struct xtables_match esp_match6 = {
-       .family         = AF_INET6,
-       .name           = "esp",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_esp)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_esp)),
-       .help           = esp_help,
-       .init           = esp_init,
-       .parse          = esp_parse,
-       .print          = esp_print,
-       .save           = esp_save,
-       .extra_opts     = esp_opts,
-};
-
-void
-_init(void)
-{
-       xtables_register_match(&esp_match);
-       xtables_register_match(&esp_match6);
-}
diff --git a/extensions/libxt_esp.man b/extensions/libxt_esp.man
deleted file mode 100644 (file)
index 6a7cdea..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-This module matches the SPIs in ESP header of IPsec packets.
-.TP
-[\fB!\fP] \fB--espspi\fP \fIspi\fP[\fB:\fP\fIspi\fP]
diff --git a/extensions/libxt_hashlimit.c b/extensions/libxt_hashlimit.c
deleted file mode 100644 (file)
index 2f6b3fc..0000000
+++ /dev/null
@@ -1,741 +0,0 @@
-/* ip6tables match extension for limiting packets per destination
- *
- * (C) 2003-2004 by Harald Welte <laforge@netfilter.org>
- *
- * Development of this code was funded by Astaro AG, http://www.astaro.com/
- *
- * Based on ipt_limit.c by
- * Jérôme de Vivie   <devivie@info.enserb.u-bordeaux.fr>
- * Hervé Eychenne    <rv@wallfire.org>
- * 
- * Error corections by nmalykh@bilim.com (22.01.2005)
- */
-#include <stdbool.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <xtables.h>
-#include <stddef.h>
-#include <linux/netfilter/x_tables.h>
-#include <linux/netfilter/xt_hashlimit.h>
-
-#define XT_HASHLIMIT_BURST     5
-
-/* miliseconds */
-#define XT_HASHLIMIT_GCINTERVAL        1000
-#define XT_HASHLIMIT_EXPIRE    10000
-
-/* Function which prints out usage message. */
-static void hashlimit_help(void)
-{
-       printf(
-"hashlimit match options:\n"
-"--hashlimit <avg>             max average match rate\n"
-"                                [Packets per second unless followed by \n"
-"                                /sec /minute /hour /day postfixes]\n"
-"--hashlimit-mode <mode>               mode is a comma-separated list of\n"
-"                                      dstip,srcip,dstport,srcport\n"
-"--hashlimit-name <name>               name for /proc/net/ipt_hashlimit/\n"
-"[--hashlimit-burst <num>]     number to match in a burst, default %u\n"
-"[--hashlimit-htable-size <num>]       number of hashtable buckets\n"
-"[--hashlimit-htable-max <num>]        number of hashtable entries\n"
-"[--hashlimit-htable-gcinterval]       interval between garbage collection runs\n"
-"[--hashlimit-htable-expire]   after which time are idle entries expired?\n",
-XT_HASHLIMIT_BURST);
-}
-
-static void hashlimit_mt_help(void)
-{
-       printf(
-"hashlimit match options:\n"
-"  --hashlimit-upto <avg>           max average match rate\n"
-"                                   [Packets per second unless followed by \n"
-"                                   /sec /minute /hour /day postfixes]\n"
-"  --hashlimit-above <avg>          min average match rate\n"
-"  --hashlimit-mode <mode>          mode is a comma-separated list of\n"
-"                                   dstip,srcip,dstport,srcport (or none)\n"
-"  --hashlimit-srcmask <length>     source address grouping prefix length\n"
-"  --hashlimit-dstmask <length>     destination address grouping prefix length\n"
-"  --hashlimit-name <name>          name for /proc/net/ipt_hashlimit\n"
-"  --hashlimit-burst <num>         number to match in a burst, default %u\n"
-"  --hashlimit-htable-size <num>    number of hashtable buckets\n"
-"  --hashlimit-htable-max <num>     number of hashtable entries\n"
-"  --hashlimit-htable-gcinterval    interval between garbage collection runs\n"
-"  --hashlimit-htable-expire        after which time are idle entries expired?\n"
-"\n", XT_HASHLIMIT_BURST);
-}
-
-static const struct option hashlimit_opts[] = {
-       { "hashlimit", 1, NULL, '%' },
-       { "hashlimit-burst", 1, NULL, '$' },
-       { "hashlimit-htable-size", 1, NULL, '&' },
-       { "hashlimit-htable-max", 1, NULL, '*' },
-       { "hashlimit-htable-gcinterval", 1, NULL, '(' },
-       { "hashlimit-htable-expire", 1, NULL, ')' },
-       { "hashlimit-mode", 1, NULL, '_' },
-       { "hashlimit-name", 1, NULL, '"' },
-       { .name = NULL }
-};
-
-static const struct option hashlimit_mt_opts[] = {
-       {.name = "hashlimit-upto",              .has_arg = true, .val = '%'},
-       {.name = "hashlimit-above",             .has_arg = true, .val = '^'},
-       {.name = "hashlimit",                   .has_arg = true, .val = '%'},
-       {.name = "hashlimit-srcmask",           .has_arg = true, .val = '<'},
-       {.name = "hashlimit-dstmask",           .has_arg = true, .val = '>'},
-       {.name = "hashlimit-burst",             .has_arg = true, .val = '$'},
-       {.name = "hashlimit-htable-size",       .has_arg = true, .val = '&'},
-       {.name = "hashlimit-htable-max",        .has_arg = true, .val = '*'},
-       {.name = "hashlimit-htable-gcinterval", .has_arg = true, .val = '('},
-       {.name = "hashlimit-htable-expire",     .has_arg = true, .val = ')'},
-       {.name = "hashlimit-mode",              .has_arg = true, .val = '_'},
-       {.name = "hashlimit-name",              .has_arg = true, .val = '"'},
-       {},
-};
-
-static
-int parse_rate(const char *rate, u_int32_t *val)
-{
-       const char *delim;
-       u_int32_t r;
-       u_int32_t mult = 1;  /* Seconds by default. */
-
-       delim = strchr(rate, '/');
-       if (delim) {
-               if (strlen(delim+1) == 0)
-                       return 0;
-
-               if (strncasecmp(delim+1, "second", strlen(delim+1)) == 0)
-                       mult = 1;
-               else if (strncasecmp(delim+1, "minute", strlen(delim+1)) == 0)
-                       mult = 60;
-               else if (strncasecmp(delim+1, "hour", strlen(delim+1)) == 0)
-                       mult = 60*60;
-               else if (strncasecmp(delim+1, "day", strlen(delim+1)) == 0)
-                       mult = 24*60*60;
-               else
-                       return 0;
-       }
-       r = atoi(rate);
-       if (!r)
-               return 0;
-
-       /* This would get mapped to infinite (1/day is minimum they
-           can specify, so we're ok at that end). */
-       if (r / mult > XT_HASHLIMIT_SCALE)
-               exit_error(PARAMETER_PROBLEM, "Rate too fast `%s'\n", rate);
-
-       *val = XT_HASHLIMIT_SCALE * mult / r;
-       return 1;
-}
-
-/* Initialize the match. */
-static void hashlimit_init(struct xt_entry_match *m)
-{
-       struct xt_hashlimit_info *r = (struct xt_hashlimit_info *)m->data;
-
-       r->cfg.mode = 0;
-       r->cfg.burst = XT_HASHLIMIT_BURST;
-       r->cfg.gc_interval = XT_HASHLIMIT_GCINTERVAL;
-       r->cfg.expire = XT_HASHLIMIT_EXPIRE;
-
-}
-
-static void hashlimit_mt4_init(struct xt_entry_match *match)
-{
-       struct xt_hashlimit_mtinfo1 *info = (void *)match->data;
-
-       info->cfg.mode        = 0;
-       info->cfg.burst       = XT_HASHLIMIT_BURST;
-       info->cfg.gc_interval = XT_HASHLIMIT_GCINTERVAL;
-       info->cfg.expire      = XT_HASHLIMIT_EXPIRE;
-       info->cfg.srcmask     = 32;
-       info->cfg.dstmask     = 32;
-}
-
-static void hashlimit_mt6_init(struct xt_entry_match *match)
-{
-       struct xt_hashlimit_mtinfo1 *info = (void *)match->data;
-
-       info->cfg.mode        = 0;
-       info->cfg.burst       = XT_HASHLIMIT_BURST;
-       info->cfg.gc_interval = XT_HASHLIMIT_GCINTERVAL;
-       info->cfg.expire      = XT_HASHLIMIT_EXPIRE;
-       info->cfg.srcmask     = 128;
-       info->cfg.dstmask     = 128;
-}
-
-/* Parse a 'mode' parameter into the required bitmask */
-static int parse_mode(uint32_t *mode, char *option_arg)
-{
-       char *tok;
-       char *arg = strdup(option_arg);
-
-       if (!arg)
-               return -1;
-
-       for (tok = strtok(arg, ",|");
-            tok;
-            tok = strtok(NULL, ",|")) {
-               if (!strcmp(tok, "dstip"))
-                       *mode |= XT_HASHLIMIT_HASH_DIP;
-               else if (!strcmp(tok, "srcip"))
-                       *mode |= XT_HASHLIMIT_HASH_SIP;
-               else if (!strcmp(tok, "srcport"))
-                       *mode |= XT_HASHLIMIT_HASH_SPT;
-               else if (!strcmp(tok, "dstport"))
-                       *mode |= XT_HASHLIMIT_HASH_DPT;
-               else {
-                       free(arg);
-                       return -1;
-               }
-       }
-       free(arg);
-       return 0;
-}
-
-enum {
-       PARAM_LIMIT      = 1 << 0,
-       PARAM_BURST      = 1 << 1,
-       PARAM_MODE       = 1 << 2,
-       PARAM_NAME       = 1 << 3,
-       PARAM_SIZE       = 1 << 4,
-       PARAM_MAX        = 1 << 5,
-       PARAM_GCINTERVAL = 1 << 6,
-       PARAM_EXPIRE     = 1 << 7,
-       PARAM_SRCMASK    = 1 << 8,
-       PARAM_DSTMASK    = 1 << 9,
-};
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int
-hashlimit_parse(int c, char **argv, int invert, unsigned int *flags,
-                const void *entry, struct xt_entry_match **match)
-{
-       struct xt_hashlimit_info *r = 
-                       (struct xt_hashlimit_info *)(*match)->data;
-       unsigned int num;
-
-       switch(c) {
-       case '%':
-               param_act(P_ONLY_ONCE, "hashlimit", "--hashlimit",
-                         *flags & PARAM_LIMIT);
-               if (check_inverse(argv[optind-1], &invert, &optind, 0)) break;
-               if (!parse_rate(optarg, &r->cfg.avg))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "bad rate `%s'", optarg);
-               *flags |= PARAM_LIMIT;
-               break;
-
-       case '$':
-               param_act(P_ONLY_ONCE, "hashlimit", "--hashlimit-burst",
-                         *flags & PARAM_BURST);
-               if (check_inverse(argv[optind-1], &invert, &optind, 0)) break;
-               if (string_to_number(optarg, 0, 10000, &num) == -1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "bad --hashlimit-burst `%s'", optarg);
-               r->cfg.burst = num;
-               *flags |= PARAM_BURST;
-               break;
-       case '&':
-               param_act(P_ONLY_ONCE, "hashlimit", "--hashlimit-htable-size",
-                         *flags & PARAM_SIZE);
-               if (check_inverse(argv[optind-1], &invert, &optind, 0)) break;
-               if (string_to_number(optarg, 0, 0xffffffff, &num) == -1)
-                       exit_error(PARAMETER_PROBLEM,
-                               "bad --hashlimit-htable-size: `%s'", optarg);
-               r->cfg.size = num;
-               *flags |= PARAM_SIZE;
-               break;
-       case '*':
-               param_act(P_ONLY_ONCE, "hashlimit", "--hashlimit-htable-max",
-                         *flags & PARAM_MAX);
-               if (check_inverse(argv[optind-1], &invert, &optind, 0)) break;
-               if (string_to_number(optarg, 0, 0xffffffff, &num) == -1)
-                       exit_error(PARAMETER_PROBLEM,
-                               "bad --hashlimit-htable-max: `%s'", optarg);
-               r->cfg.max = num;
-               *flags |= PARAM_MAX;
-               break;
-       case '(':
-               param_act(P_ONLY_ONCE, "hashlimit",
-                         "--hashlimit-htable-gcinterval",
-                         *flags & PARAM_GCINTERVAL);
-               if (check_inverse(argv[optind-1], &invert, &optind, 0)) break;
-               if (string_to_number(optarg, 0, 0xffffffff, &num) == -1)
-                       exit_error(PARAMETER_PROBLEM,
-                               "bad --hashlimit-htable-gcinterval: `%s'", 
-                               optarg);
-               /* FIXME: not HZ dependent!! */
-               r->cfg.gc_interval = num;
-               *flags |= PARAM_GCINTERVAL;
-               break;
-       case ')':
-               param_act(P_ONLY_ONCE, "hashlimit",
-                         "--hashlimit-htable-expire", *flags & PARAM_EXPIRE);
-               if (check_inverse(argv[optind-1], &invert, &optind, 0)) break;
-               if (string_to_number(optarg, 0, 0xffffffff, &num) == -1)
-                       exit_error(PARAMETER_PROBLEM,
-                               "bad --hashlimit-htable-expire: `%s'", optarg);
-               /* FIXME: not HZ dependent */
-               r->cfg.expire = num;
-               *flags |= PARAM_EXPIRE;
-               break;
-       case '_':
-               param_act(P_ONLY_ONCE, "hashlimit", "--hashlimit-mode",
-                         *flags & PARAM_MODE);
-               if (check_inverse(argv[optind-1], &invert, &optind, 0)) break;
-               if (parse_mode(&r->cfg.mode, optarg) < 0)
-                       exit_error(PARAMETER_PROBLEM, 
-                                  "bad --hashlimit-mode: `%s'\n", optarg);
-               *flags |= PARAM_MODE;
-               break;
-       case '"':
-               param_act(P_ONLY_ONCE, "hashlimit", "--hashlimit-name",
-                         *flags & PARAM_NAME);
-               if (check_inverse(argv[optind-1], &invert, &optind, 0)) break;
-               if (strlen(optarg) == 0)
-                       exit_error(PARAMETER_PROBLEM, "Zero-length name?");
-               strncpy(r->name, optarg, sizeof(r->name));
-               *flags |= PARAM_NAME;
-               break;
-       default:
-               return 0;
-       }
-
-       if (invert)
-               exit_error(PARAMETER_PROBLEM,
-                          "hashlimit does not support invert");
-
-       return 1;
-}
-
-static int
-hashlimit_mt_parse(struct xt_hashlimit_mtinfo1 *info, unsigned int *flags,
-                   int c, int invert, unsigned int maxmask)
-{
-       unsigned int num;
-
-       switch(c) {
-       case '%': /* --hashlimit / --hashlimit-below */
-               param_act(P_ONLY_ONCE, "hashlimit", "--hashlimit-upto",
-                         *flags & PARAM_LIMIT);
-               if (invert)
-                       info->cfg.mode |= XT_HASHLIMIT_INVERT;
-               if (!parse_rate(optarg, &info->cfg.avg))
-                       param_act(P_BAD_VALUE, "hashlimit",
-                                 "--hashlimit-upto", optarg);
-               *flags |= PARAM_LIMIT;
-               return true;
-
-       case '^': /* --hashlimit-above == !--hashlimit-below */
-               param_act(P_ONLY_ONCE, "hashlimit", "--hashlimit-above",
-                         *flags & PARAM_LIMIT);
-               if (!invert)
-                       info->cfg.mode |= XT_HASHLIMIT_INVERT;
-               if (!parse_rate(optarg, &info->cfg.avg))
-                       param_act(P_BAD_VALUE, "hashlimit",
-                                 "--hashlimit-above", optarg);
-               *flags |= PARAM_LIMIT;
-               return true;
-
-       case '$': /* --hashlimit-burst */
-               param_act(P_ONLY_ONCE, "hashlimit", "--hashlimit-burst",
-                         *flags & PARAM_BURST);
-               if (!strtonum(optarg, NULL, &num, 0, 10000))
-                       param_act(P_BAD_VALUE, "hashlimit",
-                                 "--hashlimit-burst", optarg);
-               info->cfg.burst = num;
-               *flags |= PARAM_BURST;
-               return true;
-
-       case '&': /* --hashlimit-htable-size */
-               param_act(P_ONLY_ONCE, "hashlimit", "--hashlimit-htable-size",
-                         *flags & PARAM_SIZE);
-               if (!strtonum(optarg, NULL, &num, 0, 0xffffffff))
-                       param_act(P_BAD_VALUE, "hashlimit",
-                                 "--hashlimit-htable-size", optarg);
-               info->cfg.size = num;
-               *flags |= PARAM_SIZE;
-               return true;
-
-       case '*': /* --hashlimit-htable-max */
-               param_act(P_ONLY_ONCE, "hashlimit", "--hashlimit-htable-max",
-                         *flags & PARAM_MAX);
-               if (!strtonum(optarg, NULL, &num, 0, 0xffffffff))
-                       param_act(P_BAD_VALUE, "hashlimit",
-                                 "--hashlimit-htable-max", optarg);
-               info->cfg.max = num;
-               *flags |= PARAM_MAX;
-               return true;
-
-       case '(': /* --hashlimit-htable-gcinterval */
-               param_act(P_ONLY_ONCE, "hashlimit",
-                         "--hashlimit-htable-gcinterval",
-                         *flags & PARAM_GCINTERVAL);
-               if (!strtonum(optarg, NULL, &num, 0, 0xffffffff))
-                       param_act(P_BAD_VALUE, "hashlimit",
-                                 "--hashlimit-htable-gcinterval", optarg);
-               /* FIXME: not HZ dependent!! */
-               info->cfg.gc_interval = num;
-               *flags |= PARAM_GCINTERVAL;
-               return true;
-
-       case ')': /* --hashlimit-htable-expire */
-               param_act(P_ONLY_ONCE, "hashlimit",
-                         "--hashlimit-htable-expire", *flags & PARAM_EXPIRE);
-               if (!strtonum(optarg, NULL, &num, 0, 0xffffffff))
-                       param_act(P_BAD_VALUE, "hashlimit",
-                                 "--hashlimit-htable-expire", optarg);
-               /* FIXME: not HZ dependent */
-               info->cfg.expire = num;
-               *flags |= PARAM_EXPIRE;
-               return true;
-
-       case '_':
-               param_act(P_ONLY_ONCE, "hashlimit", "--hashlimit-mode",
-                         *flags & PARAM_MODE);
-               if (parse_mode(&info->cfg.mode, optarg) < 0)
-                       param_act(P_BAD_VALUE, "hashlimit",
-                                 "--hashlimit-mode", optarg);
-               *flags |= PARAM_MODE;
-               return true;
-
-       case '"': /* --hashlimit-name */
-               param_act(P_ONLY_ONCE, "hashlimit", "--hashlimit-name",
-                         *flags & PARAM_NAME);
-               if (strlen(optarg) == 0)
-                       exit_error(PARAMETER_PROBLEM, "Zero-length name?");
-               strncpy(info->name, optarg, sizeof(info->name));
-               info->name[sizeof(info->name)-1] = '\0';
-               *flags |= PARAM_NAME;
-               return true;
-
-       case '<': /* --hashlimit-srcmask */
-               param_act(P_ONLY_ONCE, "hashlimit", "--hashlimit-srcmask",
-                         *flags & PARAM_SRCMASK);
-               if (!strtonum(optarg, NULL, &num, 0, maxmask))
-                       param_act(P_BAD_VALUE, "hashlimit",
-                                 "--hashlimit-srcmask", optarg);
-               info->cfg.srcmask = num;
-               *flags |= PARAM_SRCMASK;
-               return true;
-
-       case '>': /* --hashlimit-dstmask */
-               param_act(P_ONLY_ONCE, "hashlimit", "--hashlimit-dstmask",
-                         *flags & PARAM_DSTMASK);
-               if (!strtonum(optarg, NULL, &num, 0, maxmask))
-                       param_act(P_BAD_VALUE, "hashlimit",
-                                 "--hashlimit-dstmask", optarg);
-               info->cfg.dstmask = num;
-               *flags |= PARAM_DSTMASK;
-               return true;
-       }
-       return false;
-}
-
-static int
-hashlimit_mt4_parse(int c, char **argv, int invert, unsigned int *flags,
-                    const void *entry, struct xt_entry_match **match)
-{
-       return hashlimit_mt_parse((void *)(*match)->data,
-              flags, c, invert, 32);
-}
-
-static int
-hashlimit_mt6_parse(int c, char **argv, int invert, unsigned int *flags,
-                    const void *entry, struct xt_entry_match **match)
-{
-       return hashlimit_mt_parse((void *)(*match)->data,
-              flags, c, invert, 128);
-}
-
-/* Final check; nothing. */
-static void hashlimit_check(unsigned int flags)
-{
-       if (!(flags & PARAM_LIMIT))
-               exit_error(PARAMETER_PROBLEM,
-                               "You have to specify --hashlimit");
-       if (!(flags & PARAM_MODE))
-               exit_error(PARAMETER_PROBLEM,
-                               "You have to specify --hashlimit-mode");
-       if (!(flags & PARAM_NAME))
-               exit_error(PARAMETER_PROBLEM,
-                               "You have to specify --hashlimit-name");
-}
-
-static void hashlimit_mt_check(unsigned int flags)
-{
-       if (!(flags & PARAM_LIMIT))
-               exit_error(PARAMETER_PROBLEM, "You have to specify "
-                          "--hashlimit-upto or --hashlimit-above");
-       if (!(flags & PARAM_NAME))
-               exit_error(PARAMETER_PROBLEM,
-                          "You have to specify --hashlimit-name");
-}
-
-static const struct rates
-{
-       const char *name;
-       u_int32_t mult;
-} rates[] = { { "day", XT_HASHLIMIT_SCALE*24*60*60 },
-             { "hour", XT_HASHLIMIT_SCALE*60*60 },
-             { "min", XT_HASHLIMIT_SCALE*60 },
-             { "sec", XT_HASHLIMIT_SCALE } };
-
-static void print_rate(u_int32_t period)
-{
-       unsigned int i;
-
-       for (i = 1; i < sizeof(rates)/sizeof(struct rates); i++) {
-               if (period > rates[i].mult
-            || rates[i].mult/period < rates[i].mult%period)
-                       break;
-       }
-
-       printf("%u/%s ", rates[i-1].mult / period, rates[i-1].name);
-}
-
-static void print_mode(unsigned int mode, char separator)
-{
-       bool prevmode = false;
-
-       if (mode & XT_HASHLIMIT_HASH_SIP) {
-               fputs("srcip", stdout);
-               prevmode = 1;
-       }
-       if (mode & XT_HASHLIMIT_HASH_SPT) {
-               if (prevmode)
-                       putchar(separator);
-               fputs("srcport", stdout);
-               prevmode = 1;
-       }
-       if (mode & XT_HASHLIMIT_HASH_DIP) {
-               if (prevmode)
-                       putchar(separator);
-               fputs("dstip", stdout);
-               prevmode = 1;
-       }
-       if (mode & XT_HASHLIMIT_HASH_DPT) {
-               if (prevmode)
-                       putchar(separator);
-               fputs("dstport", stdout);
-       }
-       putchar(' ');
-}
-
-/* Prints out the matchinfo. */
-static void hashlimit_print(const void *ip,
-                            const struct xt_entry_match *match, int numeric)
-{
-       struct xt_hashlimit_info *r = 
-               (struct xt_hashlimit_info *)match->data;
-       fputs("limit: avg ", stdout); print_rate(r->cfg.avg);
-       printf("burst %u ", r->cfg.burst);
-       fputs("mode ", stdout);
-       print_mode(r->cfg.mode, '-');
-       if (r->cfg.size)
-               printf("htable-size %u ", r->cfg.size);
-       if (r->cfg.max)
-               printf("htable-max %u ", r->cfg.max);
-       if (r->cfg.gc_interval != XT_HASHLIMIT_GCINTERVAL)
-               printf("htable-gcinterval %u ", r->cfg.gc_interval);
-       if (r->cfg.expire != XT_HASHLIMIT_EXPIRE)
-               printf("htable-expire %u ", r->cfg.expire);
-}
-
-static void
-hashlimit_mt_print(const struct xt_hashlimit_mtinfo1 *info, unsigned int dmask)
-{
-       if (info->cfg.mode & XT_HASHLIMIT_INVERT)
-               fputs("limit: above ", stdout);
-       else
-               fputs("limit: up to ", stdout);
-       print_rate(info->cfg.avg);
-       printf("burst %u ", info->cfg.burst);
-       if (info->cfg.mode & (XT_HASHLIMIT_HASH_SIP | XT_HASHLIMIT_HASH_SPT |
-           XT_HASHLIMIT_HASH_DIP | XT_HASHLIMIT_HASH_DPT)) {
-               fputs("mode ", stdout);
-               print_mode(info->cfg.mode, '-');
-       }
-       if (info->cfg.size != 0)
-               printf("htable-size %u ", info->cfg.size);
-       if (info->cfg.max != 0)
-               printf("htable-max %u ", info->cfg.max);
-       if (info->cfg.gc_interval != XT_HASHLIMIT_GCINTERVAL)
-               printf("htable-gcinterval %u ", info->cfg.gc_interval);
-       if (info->cfg.expire != XT_HASHLIMIT_EXPIRE)
-               printf("htable-expire %u ", info->cfg.expire);
-
-       if (info->cfg.srcmask != dmask)
-               printf("srcmask %u ", info->cfg.srcmask);
-       if (info->cfg.dstmask != dmask)
-               printf("dstmask %u ", info->cfg.dstmask);
-}
-
-static void
-hashlimit_mt4_print(const void *ip, const struct xt_entry_match *match,
-                   int numeric)
-{
-       const struct xt_hashlimit_mtinfo1 *info = (const void *)match->data;
-
-       hashlimit_mt_print(info, 32);
-}
-
-static void
-hashlimit_mt6_print(const void *ip, const struct xt_entry_match *match,
-                   int numeric)
-{
-       const struct xt_hashlimit_mtinfo1 *info = (const void *)match->data;
-
-       hashlimit_mt_print(info, 128);
-}
-
-/* FIXME: Make minimalist: only print rate if not default --RR */
-static void hashlimit_save(const void *ip, const struct xt_entry_match *match)
-{
-       struct xt_hashlimit_info *r = 
-               (struct xt_hashlimit_info *)match->data;
-
-       fputs("--hashlimit ", stdout); print_rate(r->cfg.avg);
-       if (r->cfg.burst != XT_HASHLIMIT_BURST)
-               printf("--hashlimit-burst %u ", r->cfg.burst);
-
-       fputs("--hashlimit-mode ", stdout);
-       print_mode(r->cfg.mode, ',');
-       
-       printf("--hashlimit-name %s ", r->name);
-
-       if (r->cfg.size)
-               printf("--hashlimit-htable-size %u ", r->cfg.size);
-       if (r->cfg.max)
-               printf("--hashlimit-htable-max %u ", r->cfg.max);
-       if (r->cfg.gc_interval != XT_HASHLIMIT_GCINTERVAL)
-               printf("--hashlimit-htable-gcinterval %u", r->cfg.gc_interval);
-       if (r->cfg.expire != XT_HASHLIMIT_EXPIRE)
-               printf("--hashlimit-htable-expire %u ", r->cfg.expire);
-}
-
-static void
-hashlimit_mt_save(const struct xt_hashlimit_mtinfo1 *info, unsigned int dmask)
-{
-       if (info->cfg.mode & XT_HASHLIMIT_INVERT)
-               fputs("--hashlimit-above ", stdout);
-       else
-               fputs("--hashlimit-upto ", stdout);
-       print_rate(info->cfg.avg);
-       if (info->cfg.burst != XT_HASHLIMIT_BURST)
-               printf("--hashlimit-burst %u ", info->cfg.burst);
-
-       if (info->cfg.mode & (XT_HASHLIMIT_HASH_SIP | XT_HASHLIMIT_HASH_SPT |
-           XT_HASHLIMIT_HASH_DIP | XT_HASHLIMIT_HASH_DPT)) {
-               fputs("--hashlimit-mode ", stdout);
-               print_mode(info->cfg.mode, ',');
-       }
-
-       printf("--hashlimit-name %s ", info->name);
-
-       if (info->cfg.size != 0)
-               printf("--hashlimit-htable-size %u ", info->cfg.size);
-       if (info->cfg.max != 0)
-               printf("--hashlimit-htable-max %u ", info->cfg.max);
-       if (info->cfg.gc_interval != XT_HASHLIMIT_GCINTERVAL)
-               printf("--hashlimit-htable-gcinterval %u", info->cfg.gc_interval);
-       if (info->cfg.expire != XT_HASHLIMIT_EXPIRE)
-               printf("--hashlimit-htable-expire %u ", info->cfg.expire);
-
-       if (info->cfg.srcmask != dmask)
-               printf("--hashlimit-srcmask %u ", info->cfg.srcmask);
-       if (info->cfg.dstmask != dmask)
-               printf("--hashlimit-dstmask %u ", info->cfg.dstmask);
-}
-
-static void
-hashlimit_mt4_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct xt_hashlimit_mtinfo1 *info = (const void *)match->data;
-
-       hashlimit_mt_save(info, 32);
-}
-
-static void
-hashlimit_mt6_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct xt_hashlimit_mtinfo1 *info = (const void *)match->data;
-
-       hashlimit_mt_save(info, 128);
-}
-
-static struct xtables_match hashlimit_match = {
-       .family         = AF_INET,
-       .name           = "hashlimit",
-       .version        = XTABLES_VERSION,
-       .revision       = 0,
-       .size           = XT_ALIGN(sizeof(struct xt_hashlimit_info)),
-       .userspacesize  = offsetof(struct xt_hashlimit_info, hinfo),
-       .help           = hashlimit_help,
-       .init           = hashlimit_init,
-       .parse          = hashlimit_parse,
-       .final_check    = hashlimit_check,
-       .print          = hashlimit_print,
-       .save           = hashlimit_save,
-       .extra_opts     = hashlimit_opts,
-};
-
-static struct xtables_match hashlimit_match6 = {
-       .family         = AF_INET6,
-       .name           = "hashlimit",
-       .version        = XTABLES_VERSION,
-       .revision       = 0,
-       .size           = XT_ALIGN(sizeof(struct xt_hashlimit_info)),
-       .userspacesize  = offsetof(struct xt_hashlimit_info, hinfo),
-       .help           = hashlimit_help,
-       .init           = hashlimit_init,
-       .parse          = hashlimit_parse,
-       .final_check    = hashlimit_check,
-       .print          = hashlimit_print,
-       .save           = hashlimit_save,
-       .extra_opts     = hashlimit_opts,
-};
-
-static struct xtables_match hashlimit_mt_reg = {
-       .version        = XTABLES_VERSION,
-       .name           = "hashlimit",
-       .revision       = 1,
-       .family         = AF_INET,
-       .size           = XT_ALIGN(sizeof(struct xt_hashlimit_mtinfo1)),
-       .userspacesize  = offsetof(struct xt_hashlimit_mtinfo1, hinfo),
-       .help           = hashlimit_mt_help,
-       .init           = hashlimit_mt4_init,
-       .parse          = hashlimit_mt4_parse,
-       .final_check    = hashlimit_mt_check,
-       .print          = hashlimit_mt4_print,
-       .save           = hashlimit_mt4_save,
-       .extra_opts     = hashlimit_mt_opts,
-};
-
-static struct xtables_match hashlimit_mt6_reg = {
-       .version        = XTABLES_VERSION,
-       .name           = "hashlimit",
-       .revision       = 1,
-       .family         = AF_INET6,
-       .size           = XT_ALIGN(sizeof(struct xt_hashlimit_mtinfo1)),
-       .userspacesize  = offsetof(struct xt_hashlimit_mtinfo1, hinfo),
-       .help           = hashlimit_mt_help,
-       .init           = hashlimit_mt6_init,
-       .parse          = hashlimit_mt6_parse,
-       .final_check    = hashlimit_mt_check,
-       .print          = hashlimit_mt6_print,
-       .save           = hashlimit_mt6_save,
-       .extra_opts     = hashlimit_mt_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&hashlimit_match);
-       xtables_register_match(&hashlimit_match6);
-       xtables_register_match(&hashlimit_mt_reg);
-       xtables_register_match(&hashlimit_mt6_reg);
-}
diff --git a/extensions/libxt_hashlimit.man b/extensions/libxt_hashlimit.man
deleted file mode 100644 (file)
index 84642ca..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-\fBhashlimit\fR uses hash buckets to express a rate limiting match (like the
-\fBlimit\fR match) for a group of connections using a \fBsingle\fR iptables
-rule. Grouping can be done per-hostgroup (source and/or destination address)
-and/or per-port. It gives you the ability to express "\fIN\fR packets per time
-quantum per group":
-.TP
-matching on source host
-"1000 packets per second for every host in 192.168.0.0/16"
-.TP
-matching on source prot
-"100 packets per second for every service of 192.168.1.1"
-.TP
-matching on subnet
-"10000 packets per minute for every /28 subnet in 10.0.0.0/8"
-.PP
-A hash limit option (\fB--hashlimit-upto\fR, \fB--hashlimit-above\fR) and
-\fB--hashlimit-name\fR are required.
-.TP
-\fB--hashlimit-upto\fR \fIamount\fR[\fB/second\fR|\fB/minute\fR|\fB/hour\fR|\fB/day\fR]
-Match if the rate is below or equal to \fIamount\fR/quantum. It is specified as
-a number, with an optional time quantum suffix; the default is 3/hour.
-.TP
-\fB--hashlimit-above\fR \fIamount\fR[\fB/second\fR|\fB/minute\fR|\fB/hour\fR|\fB/day\fR]
-Match if the rate is above \fIamount\fR/quantum.
-.TP
-\fB--hashlimit-burst\fR \fIamount\fR
-Maximum initial number of packets to match: this number gets recharged by one
-every time the limit specified above is not reached, up to this number; the
-default is 5.
-.TP
-\fB--hashlimit-mode\fR {\fBsrcip\fR|\fBsrcport\fR|\fBdstip\fR|\fBdstport\fR}\fB,\fP...
-A comma-separated list of objects to take into consideration. If no
---hashlimit-mode option is given, hashlimit acts like limit, but at the
-expensive of doing the hash housekeeping.
-.TP
-\fB--hashlimit-srcmask\fR \fIprefix\fR
-When --hashlimit-mode srcip is used, all source addresses encountered will be
-grouped according to the given prefix length and the so-created subnet will be
-subject to hashlimit. \fIprefix\fR must be between (inclusive) 0 and 32. Note
-that --hashlimit-srcmask 0 is basically doing the same thing as not specifying
-srcip for --hashlimit-mode, but is technically more expensive.
-.TP
-\fB--hashlimit-dstmask\fR \fIprefix\fR
-Like --hashlimit-srcmask, but for destination addresses.
-.TP
-\fB--hashlimit-name\fR \fIfoo\fR
-The name for the /proc/net/ipt_hashlimit/foo entry.
-.TP
-\fB--hashlimit-htable-size\fR \fIbuckets\fR
-The number of buckets of the hash table
-.TP
-\fB--hashlimit-htable-max\fR \fIentries\fR
-Maximum entries in the hash.
-.TP
-\fB--hashlimit-htable-expire\fR \fImsec\fR
-After how many milliseconds do hash entries expire.
-.TP
-\fB--hashlimit-htable-gcinterval\fR \fImsec\fR
-How many milliseconds between garbage collection intervals.
diff --git a/extensions/libxt_helper.c b/extensions/libxt_helper.c
deleted file mode 100644 (file)
index ba0b996..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/* Shared library add-on to iptables to add related packet matching support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-
-#include <xtables.h>
-#include <linux/netfilter/xt_helper.h>
-
-/* Function which prints out usage message. */
-static void helper_help(void)
-{
-       printf(
-"helper match options:\n"
-"[!] --helper string        Match helper identified by string\n");
-}
-
-static const struct option helper_opts[] = {
-       { "helper", 1, NULL, '1' },
-       { .name = NULL }
-};
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int
-helper_parse(int c, char **argv, int invert, unsigned int *flags,
-             const void *entry, struct xt_entry_match **match)
-{
-       struct xt_helper_info *info = (struct xt_helper_info *)(*match)->data;
-
-       switch (c) {
-       case '1':
-               if (*flags)
-                       exit_error(PARAMETER_PROBLEM,
-                                       "helper match: Only use --helper ONCE!");
-               check_inverse(optarg, &invert, &invert, 0);
-               strncpy(info->name, optarg, 29);
-               info->name[29] = '\0';
-               if (invert)
-                       info->invert = 1;
-               *flags = 1;
-               break;
-
-       default:
-               return 0;
-       }
-       return 1;
-}
-
-/* Final check; must have specified --helper. */
-static void helper_check(unsigned int flags)
-{
-       if (!flags)
-               exit_error(PARAMETER_PROBLEM,
-                          "helper match: You must specify `--helper'");
-}
-
-/* Prints out the info. */
-static void
-helper_print(const void *ip, const struct xt_entry_match *match, int numeric)
-{
-       struct xt_helper_info *info = (struct xt_helper_info *)match->data;
-
-       printf("helper match %s\"%s\" ", info->invert ? "! " : "", info->name);
-}
-
-/* Saves the union ipt_info in parsable form to stdout. */
-static void helper_save(const void *ip, const struct xt_entry_match *match)
-{
-       struct xt_helper_info *info = (struct xt_helper_info *)match->data;
-
-       printf("%s--helper ",info->invert ? "! " : "");
-       save_string(info->name);
-}
-
-static struct xtables_match helper_match = {
-       .family         = AF_INET,
-       .name           = "helper",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_helper_info)),
-       .help           = helper_help,
-       .parse          = helper_parse,
-       .final_check    = helper_check,
-       .print          = helper_print,
-       .save           = helper_save,
-       .extra_opts     = helper_opts,
-};
-
-static struct xtables_match helper_match6 = {
-       .family         = AF_INET6,
-       .name           = "helper",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_helper_info)),
-       .help           = helper_help,
-       .parse          = helper_parse,
-       .final_check    = helper_check,
-       .print          = helper_print,
-       .save           = helper_save,
-       .extra_opts     = helper_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&helper_match);
-       xtables_register_match(&helper_match6);
-}
diff --git a/extensions/libxt_helper.man b/extensions/libxt_helper.man
deleted file mode 100644 (file)
index 3df1d05..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-This module matches packets related to a specific conntrack-helper.
-.TP
-[\fB!\fP] \fB--helper\fP \fIstring\fP
-Matches packets related to the specified conntrack-helper.
-.RS
-.PP
-string can be "ftp" for packets related to a ftp-session on default port.
-For other ports append -portnr to the value, ie. "ftp-2121".
-.PP
-Same rules apply for other conntrack-helpers.
-.RE
diff --git a/extensions/libxt_iprange.c b/extensions/libxt_iprange.c
deleted file mode 100644 (file)
index 8c8521e..0000000
+++ /dev/null
@@ -1,396 +0,0 @@
-/* Shared library add-on to iptables to add IP range matching support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-
-#include <xtables.h>
-#include <linux/netfilter.h>
-#include <linux/netfilter/xt_iprange.h>
-#include <linux/netfilter_ipv4/ipt_iprange.h>
-
-enum {
-       F_SRCIP = 1 << 0,
-       F_DSTIP = 1 << 1,
-};
-
-static void iprange_mt_help(void)
-{
-       printf(
-"iprange match options:\n"
-"[!] --src-range ip-ip        Match source IP in the specified range\n"
-"[!] --dst-range ip-ip        Match destination IP in the specified range\n");
-}
-
-static const struct option iprange_mt_opts[] = {
-       {.name = "src-range", .has_arg = true, .val = '1'},
-       {.name = "dst-range", .has_arg = true, .val = '2'},
-       { .name = NULL }
-};
-
-static void
-parse_iprange(char *arg, struct ipt_iprange *range)
-{
-       char *dash;
-       const struct in_addr *ip;
-
-       dash = strchr(arg, '-');
-       if (dash != NULL)
-               *dash = '\0';
-
-       ip = numeric_to_ipaddr(arg);
-       if (!ip)
-               exit_error(PARAMETER_PROBLEM, "iprange match: Bad IP address `%s'\n",
-                          arg);
-       range->min_ip = ip->s_addr;
-
-       if (dash != NULL) {
-               ip = numeric_to_ipaddr(dash+1);
-               if (!ip)
-                       exit_error(PARAMETER_PROBLEM, "iprange match: Bad IP address `%s'\n",
-                                  dash+1);
-               range->max_ip = ip->s_addr;
-       } else {
-               range->max_ip = range->min_ip;
-       }
-}
-
-static int iprange_parse(int c, char **argv, int invert, unsigned int *flags,
-                         const void *entry, struct xt_entry_match **match)
-{
-       struct ipt_iprange_info *info = (struct ipt_iprange_info *)(*match)->data;
-
-       switch (c) {
-       case '1':
-               if (*flags & IPRANGE_SRC)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "iprange match: Only use --src-range ONCE!");
-               *flags |= IPRANGE_SRC;
-
-               info->flags |= IPRANGE_SRC;
-               check_inverse(optarg, &invert, &optind, 0);
-               if (invert)
-                       info->flags |= IPRANGE_SRC_INV;
-               parse_iprange(optarg, &info->src);
-
-               break;
-
-       case '2':
-               if (*flags & IPRANGE_DST)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "iprange match: Only use --dst-range ONCE!");
-               *flags |= IPRANGE_DST;
-
-               info->flags |= IPRANGE_DST;
-               check_inverse(optarg, &invert, &optind, 0);
-               if (invert)
-                       info->flags |= IPRANGE_DST_INV;
-
-               parse_iprange(optarg, &info->dst);
-
-               break;
-
-       default:
-               return 0;
-       }
-       return 1;
-}
-
-static int
-iprange_mt4_parse(int c, char **argv, int invert, unsigned int *flags,
-                  const void *entry, struct xt_entry_match **match)
-{
-       struct xt_iprange_mtinfo *info = (void *)(*match)->data;
-       const struct in_addr *ia;
-       char *end;
-
-       switch (c) {
-       case '1': /* --src-ip */
-               end = strchr(optarg, '-');
-               if (end == NULL)
-                       param_act(P_BAD_VALUE, "iprange", "--src-ip", optarg);
-               *end = '\0';
-               ia = numeric_to_ipaddr(optarg);
-               if (ia == NULL)
-                       param_act(P_BAD_VALUE, "iprange", "--src-ip", optarg);
-               memcpy(&info->src_min.in, ia, sizeof(*ia));
-               ia = numeric_to_ipaddr(end+1);
-               if (ia == NULL)
-                       param_act(P_BAD_VALUE, "iprange", "--src-ip", end + 1);
-               memcpy(&info->src_max.in, ia, sizeof(*ia));
-               info->flags |= IPRANGE_SRC;
-               if (invert)
-                       info->flags |= IPRANGE_SRC_INV;
-               *flags |= F_SRCIP;
-               return true;
-
-       case '2': /* --dst-ip */
-               end = strchr(optarg, '-');
-               if (end == NULL)
-                       param_act(P_BAD_VALUE, "iprange", "--dst-ip", optarg);
-               *end = '\0';
-               ia = numeric_to_ipaddr(optarg);
-               if (ia == NULL)
-                       param_act(P_BAD_VALUE, "iprange", "--dst-ip", optarg);
-               memcpy(&info->dst_min.in, ia, sizeof(*ia));
-               ia = numeric_to_ipaddr(end + 1);
-               if (ia == NULL)
-                       param_act(P_BAD_VALUE, "iprange", "--dst-ip", end + 1);
-               memcpy(&info->dst_max.in, ia, sizeof(*ia));
-               info->flags |= IPRANGE_DST;
-               if (invert)
-                       info->flags |= IPRANGE_DST_INV;
-               *flags |= F_DSTIP;
-               return true;
-       }
-       return false;
-}
-
-static int
-iprange_mt6_parse(int c, char **argv, int invert, unsigned int *flags,
-                  const void *entry, struct xt_entry_match **match)
-{
-       struct xt_iprange_mtinfo *info = (void *)(*match)->data;
-       const struct in6_addr *ia;
-       char *end;
-
-       switch (c) {
-       case '1': /* --src-ip */
-               end = strchr(optarg, '-');
-               if (end == NULL)
-                       param_act(P_BAD_VALUE, "iprange", "--src-ip", optarg);
-               *end = '\0';
-               ia = numeric_to_ip6addr(optarg);
-               if (ia == NULL)
-                       param_act(P_BAD_VALUE, "iprange", "--src-ip", optarg);
-               memcpy(&info->src_min.in, ia, sizeof(*ia));
-               ia = numeric_to_ip6addr(end+1);
-               if (ia == NULL)
-                       param_act(P_BAD_VALUE, "iprange", "--src-ip", end + 1);
-               memcpy(&info->src_max.in, ia, sizeof(*ia));
-               info->flags |= IPRANGE_SRC;
-               if (invert)
-                       info->flags |= IPRANGE_SRC_INV;
-               *flags |= F_SRCIP;
-               return true;
-
-       case '2': /* --dst-ip */
-               end = strchr(optarg, '-');
-               if (end == NULL)
-                       param_act(P_BAD_VALUE, "iprange", "--dst-ip", optarg);
-               *end = '\0';
-               ia = numeric_to_ip6addr(optarg);
-               if (ia == NULL)
-                       param_act(P_BAD_VALUE, "iprange", "--dst-ip", optarg);
-               memcpy(&info->dst_min.in, ia, sizeof(*ia));
-               ia = numeric_to_ip6addr(end + 1);
-               if (ia == NULL)
-                       param_act(P_BAD_VALUE, "iprange", "--dst-ip", end + 1);
-               memcpy(&info->dst_max.in, ia, sizeof(*ia));
-               info->flags |= IPRANGE_DST;
-               if (invert)
-                       info->flags |= IPRANGE_DST_INV;
-               *flags |= F_DSTIP;
-               return true;
-       }
-       return false;
-}
-
-static void iprange_mt_check(unsigned int flags)
-{
-       if (flags == 0)
-               exit_error(PARAMETER_PROBLEM,
-                          "iprange match: You must specify `--src-range' or `--dst-range'");
-}
-
-static void
-print_iprange(const struct ipt_iprange *range)
-{
-       const unsigned char *byte_min, *byte_max;
-
-       byte_min = (const unsigned char *)&range->min_ip;
-       byte_max = (const unsigned char *)&range->max_ip;
-       printf("%u.%u.%u.%u-%u.%u.%u.%u ",
-               byte_min[0], byte_min[1], byte_min[2], byte_min[3],
-               byte_max[0], byte_max[1], byte_max[2], byte_max[3]);
-}
-
-static void iprange_print(const void *ip, const struct xt_entry_match *match,
-                          int numeric)
-{
-       const struct ipt_iprange_info *info = (const void *)match->data;
-
-       if (info->flags & IPRANGE_SRC) {
-               printf("source IP range ");
-               if (info->flags & IPRANGE_SRC_INV)
-                       printf("! ");
-               print_iprange(&info->src);
-       }
-       if (info->flags & IPRANGE_DST) {
-               printf("destination IP range ");
-               if (info->flags & IPRANGE_DST_INV)
-                       printf("! ");
-               print_iprange(&info->dst);
-       }
-}
-
-static void
-iprange_mt4_print(const void *ip, const struct xt_entry_match *match,
-                  int numeric)
-{
-       const struct xt_iprange_mtinfo *info = (const void *)match->data;
-
-       if (info->flags & IPRANGE_SRC) {
-               printf("source IP range ");
-               if (info->flags & IPRANGE_SRC_INV)
-                       printf("! ");
-               /*
-                * ipaddr_to_numeric() uses a static buffer, so cannot
-                * combine the printf() calls.
-                */
-               printf("%s", ipaddr_to_numeric(&info->src_min.in));
-               printf("-%s ", ipaddr_to_numeric(&info->src_max.in));
-       }
-       if (info->flags & IPRANGE_DST) {
-               printf("destination IP range ");
-               if (info->flags & IPRANGE_DST_INV)
-                       printf("! ");
-               printf("%s", ipaddr_to_numeric(&info->dst_min.in));
-               printf("-%s ", ipaddr_to_numeric(&info->dst_max.in));
-       }
-}
-
-static void
-iprange_mt6_print(const void *ip, const struct xt_entry_match *match,
-                  int numeric)
-{
-       const struct xt_iprange_mtinfo *info = (const void *)match->data;
-
-       if (info->flags & IPRANGE_SRC) {
-               printf("source IP range ");
-               if (info->flags & IPRANGE_SRC_INV)
-                       printf("! ");
-               /*
-                * ipaddr_to_numeric() uses a static buffer, so cannot
-                * combine the printf() calls.
-                */
-               printf("%s", ip6addr_to_numeric(&info->src_min.in6));
-               printf("-%s ", ip6addr_to_numeric(&info->src_max.in6));
-       }
-       if (info->flags & IPRANGE_DST) {
-               printf("destination IP range ");
-               if (info->flags & IPRANGE_DST_INV)
-                       printf("! ");
-               printf("%s", ip6addr_to_numeric(&info->dst_min.in6));
-               printf("-%s ", ip6addr_to_numeric(&info->dst_max.in6));
-       }
-}
-
-static void iprange_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct ipt_iprange_info *info = (const void *)match->data;
-
-       if (info->flags & IPRANGE_SRC) {
-               if (info->flags & IPRANGE_SRC_INV)
-                       printf("! ");
-               printf("--src-range ");
-               print_iprange(&info->src);
-               if (info->flags & IPRANGE_DST)
-                       fputc(' ', stdout);
-       }
-       if (info->flags & IPRANGE_DST) {
-               if (info->flags & IPRANGE_DST_INV)
-                       printf("! ");
-               printf("--dst-range ");
-               print_iprange(&info->dst);
-       }
-}
-
-static void iprange_mt4_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct xt_iprange_mtinfo *info = (const void *)match->data;
-
-       if (info->flags & IPRANGE_SRC) {
-               if (info->flags & IPRANGE_SRC_INV)
-                       printf("! ");
-               printf("--src-range %s", ipaddr_to_numeric(&info->src_min.in));
-               printf("-%s ", ipaddr_to_numeric(&info->src_max.in));
-       }
-       if (info->flags & IPRANGE_DST) {
-               if (info->flags & IPRANGE_DST_INV)
-                       printf("! ");
-               printf("--dst-range %s", ipaddr_to_numeric(&info->dst_min.in));
-               printf("-%s ", ipaddr_to_numeric(&info->dst_max.in));
-       }
-}
-
-static void iprange_mt6_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct xt_iprange_mtinfo *info = (const void *)match->data;
-
-       if (info->flags & IPRANGE_SRC) {
-               if (info->flags & IPRANGE_SRC_INV)
-                       printf("! ");
-               printf("--src-range %s", ip6addr_to_numeric(&info->src_min.in6));
-               printf("-%s ", ip6addr_to_numeric(&info->src_max.in6));
-       }
-       if (info->flags & IPRANGE_DST) {
-               if (info->flags & IPRANGE_DST_INV)
-                       printf("! ");
-               printf("--dst-range %s", ip6addr_to_numeric(&info->dst_min.in6));
-               printf("-%s ", ip6addr_to_numeric(&info->dst_max.in6));
-       }
-}
-
-static struct xtables_match iprange_match = {
-       .version       = XTABLES_VERSION,
-       .name          = "iprange",
-       .revision      = 0,
-       .family        = AF_INET,
-       .size          = XT_ALIGN(sizeof(struct ipt_iprange_info)),
-       .userspacesize = XT_ALIGN(sizeof(struct ipt_iprange_info)),
-       .help          = iprange_mt_help,
-       .parse         = iprange_parse,
-       .final_check   = iprange_mt_check,
-       .print         = iprange_print,
-       .save          = iprange_save,
-       .extra_opts    = iprange_mt_opts,
-};
-
-static struct xtables_match iprange_mt_reg = {
-       .version        = XTABLES_VERSION,
-       .name           = "iprange",
-       .revision       = 1,
-       .family         = AF_INET,
-       .size           = XT_ALIGN(sizeof(struct xt_iprange_mtinfo)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_iprange_mtinfo)),
-       .help           = iprange_mt_help,
-       .parse          = iprange_mt4_parse,
-       .final_check    = iprange_mt_check,
-       .print          = iprange_mt4_print,
-       .save           = iprange_mt4_save,
-       .extra_opts     = iprange_mt_opts,
-};
-
-static struct xtables_match iprange_mt6_reg = {
-       .version        = XTABLES_VERSION,
-       .name           = "iprange",
-       .revision       = 1,
-       .family         = AF_INET6,
-       .size           = XT_ALIGN(sizeof(struct xt_iprange_mtinfo)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_iprange_mtinfo)),
-       .help           = iprange_mt_help,
-       .parse          = iprange_mt6_parse,
-       .final_check    = iprange_mt_check,
-       .print          = iprange_mt6_print,
-       .save           = iprange_mt6_save,
-       .extra_opts     = iprange_mt_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&iprange_match);
-       xtables_register_match(&iprange_mt_reg);
-       xtables_register_match(&iprange_mt6_reg);
-}
diff --git a/extensions/libxt_iprange.man b/extensions/libxt_iprange.man
deleted file mode 100644 (file)
index 1941a3b..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-This matches on a given arbitrary range of IP addresses.
-.TP
-[\fB!\fR] \fB--src-range\fR \fIfrom\fR[\fB-\fP\fIto\fR]
-Match source IP in the specified range.
-.TP
-[\fB!\fR] \fB--dst-range\fR \fIfrom\fR[\fB-\fP\fIto\fR]
-Match destination IP in the specified range.
diff --git a/extensions/libxt_length.c b/extensions/libxt_length.c
deleted file mode 100644 (file)
index ec305ae..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-/* Shared library add-on to iptables to add packet length matching support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-
-#include <xtables.h>
-#include <linux/netfilter/xt_length.h>
-
-/* Function which prints out usage message. */
-static void length_help(void)
-{
-       printf(
-"length match options:\n"
-"[!] --length length[:length]    Match packet length against value or range\n"
-"                                of values (inclusive)\n");
-}
-  
-static const struct option length_opts[] = {
-       { "length", 1, NULL, '1' },
-       { .name = NULL }
-};
-
-static u_int16_t
-parse_length(const char *s)
-{
-       unsigned int len;
-       
-       if (string_to_number(s, 0, 0xFFFF, &len) == -1)
-               exit_error(PARAMETER_PROBLEM, "length invalid: `%s'\n", s);
-       else
-               return (u_int16_t )len;
-}
-
-/* If a single value is provided, min and max are both set to the value */
-static void
-parse_lengths(const char *s, struct xt_length_info *info)
-{
-       char *buffer;
-       char *cp;
-
-       buffer = strdup(s);
-       if ((cp = strchr(buffer, ':')) == NULL)
-               info->min = info->max = parse_length(buffer);
-       else {
-               *cp = '\0';
-               cp++;
-
-               info->min = buffer[0] ? parse_length(buffer) : 0;
-               info->max = cp[0] ? parse_length(cp) : 0xFFFF;
-       }
-       free(buffer);
-       
-       if (info->min > info->max)
-               exit_error(PARAMETER_PROBLEM,
-                          "length min. range value `%u' greater than max. "
-                          "range value `%u'", info->min, info->max);
-       
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int
-length_parse(int c, char **argv, int invert, unsigned int *flags,
-             const void *entry, struct xt_entry_match **match)
-{
-       struct xt_length_info *info = (struct xt_length_info *)(*match)->data;
-
-       switch (c) {
-               case '1':
-                       if (*flags)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "length: `--length' may only be "
-                                          "specified once");
-                       check_inverse(optarg, &invert, &optind, 0);
-                       parse_lengths(argv[optind-1], info);
-                       if (invert)
-                               info->invert = 1;
-                       *flags = 1;
-                       break;
-                       
-               default:
-                       return 0;
-       }
-       return 1;
-}
-
-/* Final check; must have specified --length. */
-static void length_check(unsigned int flags)
-{
-       if (!flags)
-               exit_error(PARAMETER_PROBLEM,
-                          "length: You must specify `--length'");
-}
-
-/* Common match printing code. */
-static void
-print_length(struct xt_length_info *info)
-{
-       if (info->invert)
-               printf("! ");
-       
-       if (info->max == info->min)
-               printf("%u ", info->min);
-       else
-               printf("%u:%u ", info->min, info->max);
-}
-
-/* Prints out the matchinfo. */
-static void
-length_print(const void *ip, const struct xt_entry_match *match, int numeric)
-{
-       printf("length ");
-       print_length((struct xt_length_info *)match->data);
-}
-
-/* Saves the union ipt_matchinfo in parsable form to stdout. */
-static void length_save(const void *ip, const struct xt_entry_match *match)
-{
-       printf("--length ");
-       print_length((struct xt_length_info *)match->data);
-}
-
-static struct xtables_match length_match = {
-       .family         = AF_UNSPEC,
-       .name           = "length",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_length_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_length_info)),
-       .help           = length_help,
-       .parse          = length_parse,
-       .final_check    = length_check,
-       .print          = length_print,
-       .save           = length_save,
-       .extra_opts     = length_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&length_match);
-}
diff --git a/extensions/libxt_length.man b/extensions/libxt_length.man
deleted file mode 100644 (file)
index 27236ae..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-This module matches the length of the layer-3 payload (e.g. layer-4 packet)
-f a packet against a specific value
-or range of values.
-.TP
-[\fB!\fP] \fB--length\fP \fIlength\fP[\fB:\fP\fIlength\fP]
diff --git a/extensions/libxt_limit.c b/extensions/libxt_limit.c
deleted file mode 100644 (file)
index 424635a..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-/* Shared library add-on to iptables to add limit support.
- *
- * Jérôme de Vivie   <devivie@info.enserb.u-bordeaux.fr>
- * Hervé Eychenne    <rv@wallfire.org>
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <xtables.h>
-#include <stddef.h>
-#include <linux/netfilter/x_tables.h>
-/* For 64bit kernel / 32bit userspace */
-#include "../include/linux/netfilter/xt_limit.h"
-
-#define XT_LIMIT_AVG   "3/hour"
-#define XT_LIMIT_BURST 5
-
-/* Function which prints out usage message. */
-static void limit_help(void)
-{
-       printf(
-"limit match options:\n"
-"--limit avg                   max average match rate: default "XT_LIMIT_AVG"\n"
-"                                [Packets per second unless followed by \n"
-"                                /sec /minute /hour /day postfixes]\n"
-"--limit-burst number          number to match in a burst, default %u\n",
-XT_LIMIT_BURST);
-}
-
-static const struct option limit_opts[] = {
-       { "limit", 1, NULL, '%' },
-       { "limit-burst", 1, NULL, '$' },
-       { .name = NULL }
-};
-
-static
-int parse_rate(const char *rate, u_int32_t *val)
-{
-       const char *delim;
-       u_int32_t r;
-       u_int32_t mult = 1;  /* Seconds by default. */
-
-       delim = strchr(rate, '/');
-       if (delim) {
-               if (strlen(delim+1) == 0)
-                       return 0;
-
-               if (strncasecmp(delim+1, "second", strlen(delim+1)) == 0)
-                       mult = 1;
-               else if (strncasecmp(delim+1, "minute", strlen(delim+1)) == 0)
-                       mult = 60;
-               else if (strncasecmp(delim+1, "hour", strlen(delim+1)) == 0)
-                       mult = 60*60;
-               else if (strncasecmp(delim+1, "day", strlen(delim+1)) == 0)
-                       mult = 24*60*60;
-               else
-                       return 0;
-       }
-       r = atoi(rate);
-       if (!r)
-               return 0;
-
-       /* This would get mapped to infinite (1/day is minimum they
-           can specify, so we're ok at that end). */
-       if (r / mult > XT_LIMIT_SCALE)
-               exit_error(PARAMETER_PROBLEM, "Rate too fast `%s'\n", rate);
-
-       *val = XT_LIMIT_SCALE * mult / r;
-       return 1;
-}
-
-/* Initialize the match. */
-static void limit_init(struct xt_entry_match *m)
-{
-       struct xt_rateinfo *r = (struct xt_rateinfo *)m->data;
-
-       parse_rate(XT_LIMIT_AVG, &r->avg);
-       r->burst = XT_LIMIT_BURST;
-
-}
-
-/* FIXME: handle overflow:
-       if (r->avg*r->burst/r->burst != r->avg)
-               exit_error(PARAMETER_PROBLEM,
-                          "Sorry: burst too large for that avg rate.\n");
-*/
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int
-limit_parse(int c, char **argv, int invert, unsigned int *flags,
-            const void *entry, struct xt_entry_match **match)
-{
-       struct xt_rateinfo *r = (struct xt_rateinfo *)(*match)->data;
-       unsigned int num;
-
-       switch(c) {
-       case '%':
-               if (check_inverse(argv[optind-1], &invert, &optind, 0)) break;
-               if (!parse_rate(optarg, &r->avg))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "bad rate `%s'", optarg);
-               break;
-
-       case '$':
-               if (check_inverse(argv[optind-1], &invert, &optind, 0)) break;
-               if (string_to_number(optarg, 0, 10000, &num) == -1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "bad --limit-burst `%s'", optarg);
-               r->burst = num;
-               break;
-
-       default:
-               return 0;
-       }
-
-       if (invert)
-               exit_error(PARAMETER_PROBLEM,
-                          "limit does not support invert");
-
-       return 1;
-}
-
-static const struct rates
-{
-       const char *name;
-       u_int32_t mult;
-} rates[] = { { "day", XT_LIMIT_SCALE*24*60*60 },
-             { "hour", XT_LIMIT_SCALE*60*60 },
-             { "min", XT_LIMIT_SCALE*60 },
-             { "sec", XT_LIMIT_SCALE } };
-
-static void print_rate(u_int32_t period)
-{
-       unsigned int i;
-
-       for (i = 1; i < sizeof(rates)/sizeof(struct rates); i++) {
-               if (period > rates[i].mult
-            || rates[i].mult/period < rates[i].mult%period)
-                       break;
-       }
-
-       printf("%u/%s ", rates[i-1].mult / period, rates[i-1].name);
-}
-
-/* Prints out the matchinfo. */
-static void
-limit_print(const void *ip, const struct xt_entry_match *match, int numeric)
-{
-       struct xt_rateinfo *r = (struct xt_rateinfo *)match->data;
-       printf("limit: avg "); print_rate(r->avg);
-       printf("burst %u ", r->burst);
-}
-
-/* FIXME: Make minimalist: only print rate if not default --RR */
-static void limit_save(const void *ip, const struct xt_entry_match *match)
-{
-       struct xt_rateinfo *r = (struct xt_rateinfo *)match->data;
-
-       printf("--limit "); print_rate(r->avg);
-       if (r->burst != XT_LIMIT_BURST)
-               printf("--limit-burst %u ", r->burst);
-}
-
-static struct xtables_match limit_match = {
-       .family         = AF_UNSPEC,
-       .name           = "limit",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_rateinfo)),
-       .userspacesize  = offsetof(struct xt_rateinfo, prev),
-       .help           = limit_help,
-       .init           = limit_init,
-       .parse          = limit_parse,
-       .print          = limit_print,
-       .save           = limit_save,
-       .extra_opts     = limit_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&limit_match);
-}
diff --git a/extensions/libxt_limit.man b/extensions/libxt_limit.man
deleted file mode 100644 (file)
index 0419c50..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-This module matches at a limited rate using a token bucket filter.
-A rule using this extension will match until this limit is reached
-(unless the `!' flag is used).  It can be used in combination with the
-.B LOG
-target to give limited logging, for example.
-.TP
-[\fB!\fP] \fB--limit\fP \fIrate\fP[\fB/second\fP|\fB/minute\fP|\fB/hour\fP|\fB/day\fP]
-Maximum average matching rate: specified as a number, with an optional
-`/second', `/minute', `/hour', or `/day' suffix; the default is
-3/hour.
-.TP
-.BI "--limit-burst " "number"
-Maximum initial number of packets to match: this number gets
-recharged by one every time the limit specified above is not reached,
-up to this number; the default is 5.
diff --git a/extensions/libxt_mac.c b/extensions/libxt_mac.c
deleted file mode 100644 (file)
index f13d905..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-/* Shared library add-on to iptables to add MAC address support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#if defined(__GLIBC__) && __GLIBC__ == 2
-#include <net/ethernet.h>
-#else
-#include <linux/if_ether.h>
-#endif
-#include <xtables.h>
-#include <linux/netfilter/xt_mac.h>
-
-/* Function which prints out usage message. */
-static void mac_help(void)
-{
-       printf(
-"mac match options:\n"
-" --mac-source [!] XX:XX:XX:XX:XX:XX\n"
-"                              Match source MAC address\n");
-}
-
-static const struct option mac_opts[] = {
-       { "mac-source", 1, NULL, '1' },
-       { .name = NULL }
-};
-
-static void
-parse_mac(const char *mac, struct xt_mac_info *info)
-{
-       unsigned int i = 0;
-
-       if (strlen(mac) != ETH_ALEN*3-1)
-               exit_error(PARAMETER_PROBLEM, "Bad mac address `%s'", mac);
-
-       for (i = 0; i < ETH_ALEN; i++) {
-               long number;
-               char *end;
-
-               number = strtol(mac + i*3, &end, 16);
-
-               if (end == mac + i*3 + 2
-                   && number >= 0
-                   && number <= 255)
-                       info->srcaddr[i] = number;
-               else
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Bad mac address `%s'", mac);
-       }
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int
-mac_parse(int c, char **argv, int invert, unsigned int *flags,
-          const void *entry, struct xt_entry_match **match)
-{
-       struct xt_mac_info *macinfo = (struct xt_mac_info *)(*match)->data;
-
-       switch (c) {
-       case '1':
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_mac(argv[optind-1], macinfo);
-               if (invert)
-                       macinfo->invert = 1;
-               *flags = 1;
-               break;
-
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static void print_mac(unsigned char macaddress[ETH_ALEN])
-{
-       unsigned int i;
-
-       printf("%02X", macaddress[0]);
-       for (i = 1; i < ETH_ALEN; i++)
-               printf(":%02X", macaddress[i]);
-       printf(" ");
-}
-
-/* Final check; must have specified --mac. */
-static void mac_check(unsigned int flags)
-{
-       if (!flags)
-               exit_error(PARAMETER_PROBLEM,
-                          "You must specify `--mac-source'");
-}
-
-/* Prints out the matchinfo. */
-static void
-mac_print(const void *ip, const struct xt_entry_match *match, int numeric)
-{
-       printf("MAC ");
-
-       if (((struct xt_mac_info *)match->data)->invert)
-               printf("! ");
-       
-       print_mac(((struct xt_mac_info *)match->data)->srcaddr);
-}
-
-/* Saves the union ipt_matchinfo in parsable form to stdout. */
-static void mac_save(const void *ip, const struct xt_entry_match *match)
-{
-       if (((struct xt_mac_info *)match->data)->invert)
-               printf("! ");
-
-       printf("--mac-source ");
-       print_mac(((struct xt_mac_info *)match->data)->srcaddr);
-}
-
-static struct xtables_match mac_match = {
-       .family         = AF_INET,
-       .name           = "mac",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_mac_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_mac_info)),
-       .help           = mac_help,
-       .parse          = mac_parse,
-       .final_check    = mac_check,
-       .print          = mac_print,
-       .save           = mac_save,
-       .extra_opts     = mac_opts,
-};
-
-static struct xtables_match mac_match6 = {
-       .family         = AF_INET6,
-       .name           = "mac",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_mac_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_mac_info)),
-       .help           = mac_help,
-       .parse          = mac_parse,
-       .final_check    = mac_check,
-       .print          = mac_print,
-       .save           = mac_save,
-       .extra_opts     = mac_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&mac_match);
-       xtables_register_match(&mac_match6);
-}
diff --git a/extensions/libxt_mac.man b/extensions/libxt_mac.man
deleted file mode 100644 (file)
index aca2c96..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-.TP
-[\fB!\fP] \fB--mac-source\fP \fIaddress\fP
-Match source MAC address.  It must be of the form XX:XX:XX:XX:XX:XX.
-Note that this only makes sense for packets coming from an Ethernet device
-and entering the
-.BR PREROUTING ,
-.B FORWARD
-or
-.B INPUT
-chains.
diff --git a/extensions/libxt_mark.c b/extensions/libxt_mark.c
deleted file mode 100644 (file)
index 1e07676..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-/* Shared library add-on to iptables to add NFMARK matching support. */
-#include <stdbool.h>
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-
-#include <xtables.h>
-#include <linux/netfilter/xt_mark.h>
-
-enum {
-       F_MARK = 1 << 0,
-};
-
-static void mark_mt_help(void)
-{
-       printf(
-"mark match options:\n"
-"[!] --mark value[/mask]    Match nfmark value with optional mask\n");
-}
-
-static const struct option mark_mt_opts[] = {
-       {.name = "mark", .has_arg = true, .val = '1'},
-       { .name = NULL }
-};
-
-static int mark_mt_parse(int c, char **argv, int invert, unsigned int *flags,
-                         const void *entry, struct xt_entry_match **match)
-{
-       struct xt_mark_mtinfo1 *info = (void *)(*match)->data;
-       unsigned int mark, mask = ~0U;
-       char *end;
-
-       switch (c) {
-       case '1': /* --mark */
-               param_act(P_ONLY_ONCE, "mark", "--mark", *flags & F_MARK);
-               if (!strtonum(optarg, &end, &mark, 0, ~0U))
-                       param_act(P_BAD_VALUE, "mark", "--mark", optarg);
-               if (*end == '/')
-                       if (!strtonum(end + 1, &end, &mask, 0, ~0U))
-                               param_act(P_BAD_VALUE, "mark", "--mark", optarg);
-               if (*end != '\0')
-                       param_act(P_BAD_VALUE, "mark", "--mark", optarg);
-
-               if (invert)
-                       info->invert = true;
-               info->mark = mark;
-               info->mask = mask;
-               *flags    |= F_MARK;
-               return true;
-       }
-       return false;
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int
-mark_parse(int c, char **argv, int invert, unsigned int *flags,
-           const void *entry, struct xt_entry_match **match)
-{
-       struct xt_mark_info *markinfo = (struct xt_mark_info *)(*match)->data;
-
-       switch (c) {
-               char *end;
-       case '1':
-               check_inverse(optarg, &invert, &optind, 0);
-               markinfo->mark = strtoul(optarg, &end, 0);
-               if (*end == '/') {
-                       markinfo->mask = strtoul(end+1, &end, 0);
-               } else
-                       markinfo->mask = 0xffffffff;
-               if (*end != '\0' || end == optarg)
-                       exit_error(PARAMETER_PROBLEM, "Bad MARK value `%s'", optarg);
-               if (invert)
-                       markinfo->invert = 1;
-               *flags = 1;
-               break;
-
-       default:
-               return 0;
-       }
-       return 1;
-}
-
-static void print_mark(unsigned int mark, unsigned int mask)
-{
-       if (mask != 0xffffffffU)
-               printf("0x%x/0x%x ", mark, mask);
-       else
-               printf("0x%x ", mark);
-}
-
-static void mark_mt_check(unsigned int flags)
-{
-       if (flags == 0)
-               exit_error(PARAMETER_PROBLEM,
-                          "mark match: The --mark option is required");
-}
-
-static void
-mark_mt_print(const void *ip, const struct xt_entry_match *match, int numeric)
-{
-       const struct xt_mark_mtinfo1 *info = (const void *)match->data;
-
-       printf("mark match ");
-       if (info->invert)
-               printf("!");
-       print_mark(info->mark, info->mask);
-}
-
-/* Prints out the matchinfo. */
-static void
-mark_print(const void *ip, const struct xt_entry_match *match, int numeric)
-{
-       struct xt_mark_info *info = (struct xt_mark_info *)match->data;
-
-       printf("MARK match ");
-
-       if (info->invert)
-               printf("!");
-       
-       print_mark(info->mark, info->mask);
-}
-
-static void mark_mt_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct xt_mark_mtinfo1 *info = (const void *)match->data;
-
-       if (info->invert)
-               printf("!");
-
-       printf("--mark ");
-       print_mark(info->mark, info->mask);
-}
-
-/* Saves the union ipt_matchinfo in parsable form to stdout. */
-static void
-mark_save(const void *ip, const struct xt_entry_match *match)
-{
-       struct xt_mark_info *info = (struct xt_mark_info *)match->data;
-
-       if (info->invert)
-               printf("! ");
-       
-       printf("--mark ");
-       print_mark(info->mark, info->mask);
-}
-
-static struct xtables_match mark_match = {
-       .family         = AF_UNSPEC,
-       .name           = "mark",
-       .revision       = 0,
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_mark_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_mark_info)),
-       .help           = mark_mt_help,
-       .parse          = mark_parse,
-       .final_check    = mark_mt_check,
-       .print          = mark_print,
-       .save           = mark_save,
-       .extra_opts     = mark_mt_opts,
-};
-
-static struct xtables_match mark_mt_reg = {
-       .version        = XTABLES_VERSION,
-       .name           = "mark",
-       .revision       = 1,
-       .family         = AF_UNSPEC,
-       .size           = XT_ALIGN(sizeof(struct xt_mark_mtinfo1)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_mark_mtinfo1)),
-       .help           = mark_mt_help,
-       .parse          = mark_mt_parse,
-       .final_check    = mark_mt_check,
-       .print          = mark_mt_print,
-       .save           = mark_mt_save,
-       .extra_opts     = mark_mt_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&mark_match);
-       xtables_register_match(&mark_mt_reg);
-}
diff --git a/extensions/libxt_mark.man b/extensions/libxt_mark.man
deleted file mode 100644 (file)
index 4b29cd0..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-This module matches the netfilter mark field associated with a packet
-(which can be set using the
-.B MARK
-target below).
-.TP
-[\fB!\fP] \fB--mark\fP \fIvalue\fP[\fB/\fP\fImask\fP]
-Matches packets with the given unsigned mark value (if a \fImask\fP is
-specified, this is logically ANDed with the \fImask\fP before the
-comparison).
diff --git a/extensions/libxt_multiport.c b/extensions/libxt_multiport.c
deleted file mode 100644 (file)
index 413f178..0000000
+++ /dev/null
@@ -1,577 +0,0 @@
-/* Shared library add-on to iptables to add multiple TCP port support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-
-#include <xtables.h>
-#include <libiptc/libiptc.h>
-#include <libiptc/libip6tc.h>
-/* To ensure that iptables compiles with an old kernel */
-#include "../include/linux/netfilter/xt_multiport.h"
-
-/* Function which prints out usage message. */
-static void multiport_help(void)
-{
-       printf(
-"multiport match options:\n"
-" --source-ports port[,port,port...]\n"
-" --sports ...\n"
-"                              match source port(s)\n"
-" --destination-ports port[,port,port...]\n"
-" --dports ...\n"
-"                              match destination port(s)\n"
-" --ports port[,port,port]\n"
-"                              match both source and destination port(s)\n"
-" NOTE: this kernel does not support port ranges in multiport.\n");
-}
-
-static void multiport_help_v1(void)
-{
-       printf(
-"multiport match options:\n"
-" --source-ports [!] port[,port:port,port...]\n"
-" --sports ...\n"
-"                              match source port(s)\n"
-" --destination-ports [!] port[,port:port,port...]\n"
-" --dports ...\n"
-"                              match destination port(s)\n"
-" --ports [!] port[,port:port,port]\n"
-"                              match both source and destination port(s)\n");
-}
-
-static const struct option multiport_opts[] = {
-       { "source-ports", 1, NULL, '1' },
-       { "sports", 1, NULL, '1' }, /* synonym */
-       { "destination-ports", 1, NULL, '2' },
-       { "dports", 1, NULL, '2' }, /* synonym */
-       { "ports", 1, NULL, '3' },
-       { .name = NULL }
-};
-
-static char *
-proto_to_name(u_int8_t proto)
-{
-       switch (proto) {
-       case IPPROTO_TCP:
-               return "tcp";
-       case IPPROTO_UDP:
-               return "udp";
-       case IPPROTO_UDPLITE:
-               return "udplite";
-       case IPPROTO_SCTP:
-               return "sctp";
-       case IPPROTO_DCCP:
-               return "dccp";
-       default:
-               return NULL;
-       }
-}
-
-static unsigned int
-parse_multi_ports(const char *portstring, u_int16_t *ports, const char *proto)
-{
-       char *buffer, *cp, *next;
-       unsigned int i;
-
-       buffer = strdup(portstring);
-       if (!buffer) exit_error(OTHER_PROBLEM, "strdup failed");
-
-       for (cp=buffer, i=0; cp && i<XT_MULTI_PORTS; cp=next,i++)
-       {
-               next=strchr(cp, ',');
-               if (next) *next++='\0';
-               ports[i] = parse_port(cp, proto);
-       }
-       if (cp) exit_error(PARAMETER_PROBLEM, "too many ports specified");
-       free(buffer);
-       return i;
-}
-
-static void
-parse_multi_ports_v1(const char *portstring, 
-                    struct xt_multiport_v1 *multiinfo,
-                    const char *proto)
-{
-       char *buffer, *cp, *next, *range;
-       unsigned int i;
-       u_int16_t m;
-
-       buffer = strdup(portstring);
-       if (!buffer) exit_error(OTHER_PROBLEM, "strdup failed");
-
-       for (i=0; i<XT_MULTI_PORTS; i++)
-               multiinfo->pflags[i] = 0;
-       for (cp=buffer, i=0; cp && i<XT_MULTI_PORTS; cp=next, i++) {
-               next=strchr(cp, ',');
-               if (next) *next++='\0';
-               range = strchr(cp, ':');
-               if (range) {
-                       if (i == XT_MULTI_PORTS-1)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "too many ports specified");
-                       *range++ = '\0';
-               }
-               multiinfo->ports[i] = parse_port(cp, proto);
-               if (range) {
-                       multiinfo->pflags[i] = 1;
-                       multiinfo->ports[++i] = parse_port(range, proto);
-                       if (multiinfo->ports[i-1] >= multiinfo->ports[i])
-                               exit_error(PARAMETER_PROBLEM,
-                                          "invalid portrange specified");
-                       m <<= 1;
-               }
-       }
-       multiinfo->count = i;
-       if (cp) exit_error(PARAMETER_PROBLEM, "too many ports specified");
-       free(buffer);
-}
-
-static const char *
-check_proto(u_int16_t pnum, u_int8_t invflags)
-{
-       char *proto;
-
-       if (invflags & XT_INV_PROTO)
-               exit_error(PARAMETER_PROBLEM,
-                          "multiport only works with TCP, UDP, UDPLITE, SCTP and DCCP");
-
-       if ((proto = proto_to_name(pnum)) != NULL)
-               return proto;
-       else if (!pnum)
-               exit_error(PARAMETER_PROBLEM,
-                          "multiport needs `-p tcp', `-p udp', `-p udplite', "
-                          "`-p sctp' or `-p dccp'");
-       else
-               exit_error(PARAMETER_PROBLEM,
-                          "multiport only works with TCP, UDP, UDPLITE, SCTP and DCCP");
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int
-__multiport_parse(int c, char **argv, int invert, unsigned int *flags,
-                  struct xt_entry_match **match, u_int16_t pnum,
-                  u_int8_t invflags)
-{
-       const char *proto;
-       struct xt_multiport *multiinfo
-               = (struct xt_multiport *)(*match)->data;
-
-       switch (c) {
-       case '1':
-               check_inverse(argv[optind-1], &invert, &optind, 0);
-               proto = check_proto(pnum, invflags);
-               multiinfo->count = parse_multi_ports(argv[optind-1],
-                                                    multiinfo->ports, proto);
-               multiinfo->flags = XT_MULTIPORT_SOURCE;
-               break;
-
-       case '2':
-               check_inverse(argv[optind-1], &invert, &optind, 0);
-               proto = check_proto(pnum, invflags);
-               multiinfo->count = parse_multi_ports(argv[optind-1],
-                                                    multiinfo->ports, proto);
-               multiinfo->flags = XT_MULTIPORT_DESTINATION;
-               break;
-
-       case '3':
-               check_inverse(argv[optind-1], &invert, &optind, 0);
-               proto = check_proto(pnum, invflags);
-               multiinfo->count = parse_multi_ports(argv[optind-1],
-                                                    multiinfo->ports, proto);
-               multiinfo->flags = XT_MULTIPORT_EITHER;
-               break;
-
-       default:
-               return 0;
-       }
-
-       if (invert)
-               exit_error(PARAMETER_PROBLEM,
-                          "multiport does not support invert");
-
-       if (*flags)
-               exit_error(PARAMETER_PROBLEM,
-                          "multiport can only have one option");
-       *flags = 1;
-       return 1;
-}
-
-static int
-multiport_parse(int c, char **argv, int invert, unsigned int *flags,
-                const void *e, struct xt_entry_match **match)
-{
-       const struct ipt_entry *entry = e;
-       return __multiport_parse(c, argv, invert, flags, match,
-              entry->ip.proto, entry->ip.invflags);
-}
-
-static int
-multiport_parse6(int c, char **argv, int invert, unsigned int *flags,
-                 const void *e, struct xt_entry_match **match)
-{
-       const struct ip6t_entry *entry = (const struct ip6t_entry *)e;
-       return __multiport_parse(c, argv, invert, flags, match,
-              entry->ipv6.proto, entry->ipv6.invflags);
-}
-
-static int
-__multiport_parse_v1(int c, char **argv, int invert, unsigned int *flags,
-                     struct xt_entry_match **match, u_int16_t pnum,
-                     u_int8_t invflags)
-{
-       const char *proto;
-       struct xt_multiport_v1 *multiinfo
-               = (struct xt_multiport_v1 *)(*match)->data;
-
-       switch (c) {
-       case '1':
-               check_inverse(argv[optind-1], &invert, &optind, 0);
-               proto = check_proto(pnum, invflags);
-               parse_multi_ports_v1(argv[optind-1], multiinfo, proto);
-               multiinfo->flags = XT_MULTIPORT_SOURCE;
-               break;
-
-       case '2':
-               check_inverse(argv[optind-1], &invert, &optind, 0);
-               proto = check_proto(pnum, invflags);
-               parse_multi_ports_v1(argv[optind-1], multiinfo, proto);
-               multiinfo->flags = XT_MULTIPORT_DESTINATION;
-               break;
-
-       case '3':
-               check_inverse(argv[optind-1], &invert, &optind, 0);
-               proto = check_proto(pnum, invflags);
-               parse_multi_ports_v1(argv[optind-1], multiinfo, proto);
-               multiinfo->flags = XT_MULTIPORT_EITHER;
-               break;
-
-       default:
-               return 0;
-       }
-
-       if (invert)
-               multiinfo->invert = 1;
-
-       if (*flags)
-               exit_error(PARAMETER_PROBLEM,
-                          "multiport can only have one option");
-       *flags = 1;
-       return 1;
-}
-
-static int
-multiport_parse_v1(int c, char **argv, int invert, unsigned int *flags,
-                   const void *e, struct xt_entry_match **match)
-{
-       const struct ipt_entry *entry = e;
-       return __multiport_parse_v1(c, argv, invert, flags, match,
-              entry->ip.proto, entry->ip.invflags);
-}
-
-static int
-multiport_parse6_v1(int c, char **argv, int invert, unsigned int *flags,
-                    const void *e, struct xt_entry_match **match)
-{
-       const struct ip6t_entry *entry = (const struct ip6t_entry *)e;
-       return __multiport_parse_v1(c, argv, invert, flags, match,
-              entry->ipv6.proto, entry->ipv6.invflags);
-}
-
-/* Final check; must specify something. */
-static void multiport_check(unsigned int flags)
-{
-       if (!flags)
-               exit_error(PARAMETER_PROBLEM, "multiport expection an option");
-}
-
-static char *
-port_to_service(int port, u_int8_t proto)
-{
-       struct servent *service;
-
-       if ((service = getservbyport(htons(port), proto_to_name(proto))))
-               return service->s_name;
-
-       return NULL;
-}
-
-static void
-print_port(u_int16_t port, u_int8_t protocol, int numeric)
-{
-       char *service;
-
-       if (numeric || (service = port_to_service(port, protocol)) == NULL)
-               printf("%u", port);
-       else
-               printf("%s", service);
-}
-
-/* Prints out the matchinfo. */
-static void
-__multiport_print(const struct xt_entry_match *match, int numeric,
-                  u_int16_t proto)
-{
-       const struct xt_multiport *multiinfo
-               = (const struct xt_multiport *)match->data;
-       unsigned int i;
-
-       printf("multiport ");
-
-       switch (multiinfo->flags) {
-       case XT_MULTIPORT_SOURCE:
-               printf("sports ");
-               break;
-
-       case XT_MULTIPORT_DESTINATION:
-               printf("dports ");
-               break;
-
-       case XT_MULTIPORT_EITHER:
-               printf("ports ");
-               break;
-
-       default:
-               printf("ERROR ");
-               break;
-       }
-
-       for (i=0; i < multiinfo->count; i++) {
-               printf("%s", i ? "," : "");
-               print_port(multiinfo->ports[i], proto, numeric);
-       }
-       printf(" ");
-}
-
-static void multiport_print(const void *ip_void,
-                            const struct xt_entry_match *match, int numeric)
-{
-       const struct ipt_ip *ip = ip_void;
-       __multiport_print(match, numeric, ip->proto);
-}
-
-static void multiport_print6(const void *ip_void,
-                             const struct xt_entry_match *match, int numeric)
-{
-       const struct ip6t_ip6 *ip = (const struct ip6t_ip6 *)ip_void;
-       __multiport_print(match, numeric, ip->proto);
-}
-
-static void __multiport_print_v1(const struct xt_entry_match *match,
-                                 int numeric, u_int16_t proto)
-{
-       const struct xt_multiport_v1 *multiinfo
-               = (const struct xt_multiport_v1 *)match->data;
-       unsigned int i;
-
-       printf("multiport ");
-
-       switch (multiinfo->flags) {
-       case XT_MULTIPORT_SOURCE:
-               printf("sports ");
-               break;
-
-       case XT_MULTIPORT_DESTINATION:
-               printf("dports ");
-               break;
-
-       case XT_MULTIPORT_EITHER:
-               printf("ports ");
-               break;
-
-       default:
-               printf("ERROR ");
-               break;
-       }
-
-       if (multiinfo->invert)
-               printf("! ");
-
-       for (i=0; i < multiinfo->count; i++) {
-               printf("%s", i ? "," : "");
-               print_port(multiinfo->ports[i], proto, numeric);
-               if (multiinfo->pflags[i]) {
-                       printf(":");
-                       print_port(multiinfo->ports[++i], proto, numeric);
-               }
-       }
-       printf(" ");
-}
-
-static void multiport_print_v1(const void *ip_void,
-                               const struct xt_entry_match *match, int numeric)
-{
-       const struct ipt_ip *ip = ip_void;
-       __multiport_print_v1(match, numeric, ip->proto);
-}
-
-static void multiport_print6_v1(const void *ip_void,
-                                const struct xt_entry_match *match, int numeric)
-{
-       const struct ip6t_ip6 *ip = (const struct ip6t_ip6 *)ip_void;
-       __multiport_print_v1(match, numeric, ip->proto);
-}
-
-/* Saves the union ipt_matchinfo in parsable form to stdout. */
-static void __multiport_save(const struct xt_entry_match *match,
-                             u_int16_t proto)
-{
-       const struct xt_multiport *multiinfo
-               = (const struct xt_multiport *)match->data;
-       unsigned int i;
-
-       switch (multiinfo->flags) {
-       case XT_MULTIPORT_SOURCE:
-               printf("--sports ");
-               break;
-
-       case XT_MULTIPORT_DESTINATION:
-               printf("--dports ");
-               break;
-
-       case XT_MULTIPORT_EITHER:
-               printf("--ports ");
-               break;
-       }
-
-       for (i=0; i < multiinfo->count; i++) {
-               printf("%s", i ? "," : "");
-               print_port(multiinfo->ports[i], proto, 1);
-       }
-       printf(" ");
-}
-
-static void multiport_save(const void *ip_void,
-                           const struct xt_entry_match *match)
-{
-       const struct ipt_ip *ip = ip_void;
-       __multiport_save(match, ip->proto);
-}
-
-static void multiport_save6(const void *ip_void,
-                            const struct xt_entry_match *match)
-{
-       const struct ip6t_ip6 *ip = (const struct ip6t_ip6 *)ip_void;
-       __multiport_save(match, ip->proto);
-}
-
-static void __multiport_save_v1(const struct xt_entry_match *match,
-                                u_int16_t proto)
-{
-       const struct xt_multiport_v1 *multiinfo
-               = (const struct xt_multiport_v1 *)match->data;
-       unsigned int i;
-
-       switch (multiinfo->flags) {
-       case XT_MULTIPORT_SOURCE:
-               printf("--sports ");
-               break;
-
-       case XT_MULTIPORT_DESTINATION:
-               printf("--dports ");
-               break;
-
-       case XT_MULTIPORT_EITHER:
-               printf("--ports ");
-               break;
-       }
-
-       if (multiinfo->invert)
-               printf("! ");
-
-       for (i=0; i < multiinfo->count; i++) {
-               printf("%s", i ? "," : "");
-               print_port(multiinfo->ports[i], proto, 1);
-               if (multiinfo->pflags[i]) {
-                       printf(":");
-                       print_port(multiinfo->ports[++i], proto, 1);
-               }
-       }
-       printf(" ");
-}
-
-static void multiport_save_v1(const void *ip_void,
-                              const struct xt_entry_match *match)
-{
-       const struct ipt_ip *ip = ip_void;
-       __multiport_save_v1(match, ip->proto);
-}
-
-static void multiport_save6_v1(const void *ip_void,
-                               const struct xt_entry_match *match)
-{
-       const struct ip6t_ip6 *ip = (const struct ip6t_ip6 *)ip_void;
-       __multiport_save_v1(match, ip->proto);
-}
-
-static struct xtables_match multiport_match = {
-       .family         = AF_INET,
-       .name           = "multiport",
-       .revision       = 0,
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_multiport)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_multiport)),
-       .help           = multiport_help,
-       .parse          = multiport_parse,
-       .final_check    = multiport_check,
-       .print          = multiport_print,
-       .save           = multiport_save,
-       .extra_opts     = multiport_opts,
-};
-
-static struct xtables_match multiport_match6 = {
-       .family         = AF_INET6,
-       .name           = "multiport",
-       .revision       = 0,
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_multiport)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_multiport)),
-       .help           = multiport_help,
-       .parse          = multiport_parse6,
-       .final_check    = multiport_check,
-       .print          = multiport_print6,
-       .save           = multiport_save6,
-       .extra_opts     = multiport_opts,
-};
-
-static struct xtables_match multiport_match_v1 = {
-       .family         = AF_INET,
-       .name           = "multiport",
-       .version        = XTABLES_VERSION,
-       .revision       = 1,
-       .size           = XT_ALIGN(sizeof(struct xt_multiport_v1)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_multiport_v1)),
-       .help           = multiport_help_v1,
-       .parse          = multiport_parse_v1,
-       .final_check    = multiport_check,
-       .print          = multiport_print_v1,
-       .save           = multiport_save_v1,
-       .extra_opts     = multiport_opts,
-};
-
-static struct xtables_match multiport_match6_v1 = {
-       .family         = AF_INET6,
-       .name           = "multiport",
-       .version        = XTABLES_VERSION,
-       .revision       = 1,
-       .size           = XT_ALIGN(sizeof(struct xt_multiport_v1)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_multiport_v1)),
-       .help           = multiport_help_v1,
-       .parse          = multiport_parse6_v1,
-       .final_check    = multiport_check,
-       .print          = multiport_print6_v1,
-       .save           = multiport_save6_v1,
-       .extra_opts     = multiport_opts,
-};
-
-void
-_init(void)
-{
-       xtables_register_match(&multiport_match);
-       xtables_register_match(&multiport_match6);
-       xtables_register_match(&multiport_match_v1);
-       xtables_register_match(&multiport_match6_v1);
-}
diff --git a/extensions/libxt_multiport.man b/extensions/libxt_multiport.man
deleted file mode 100644 (file)
index b8e5e49..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-This module matches a set of source or destination ports.  Up to 15
-ports can be specified.  A port range (port:port) counts as two
-ports.  It can only be used in conjunction with
-.B "-p tcp"
-or
-.BR "-p udp" .
-.TP
-[\fB!\fP] \fB--source-ports\fP,\fB--sport\fP \fIport\fP[\fB,\fP\fIport\fP|\fB,\fP\fIport\fP\fB:\fP\fIport\fP]...
-Match if the source port is one of the given ports.  The flag
-.B --sports
-is a convenient alias for this option. Multiple ports or port ranges are
-separated using a comma, and a port range is specified using a colon.
-\fB53,1024:65535\fP would therefore match ports 53 and all from 1024 through
-65535.
-.TP
-[\fB!\fP] \fB--destination-ports\fP,\fB--dport\fP \fIport\fP[\fB,\fP\fIport\fP|\fB,\fP\fIport\fP\fB:\fP\fIport\fP]...
-Match if the destination port is one of the given ports.  The flag
-.B --dports
-is a convenient alias for this option.
-.TP
-[\fB!\fP] \fB--ports\fP \fIport\fP[\fB,\fP\fIport\fP|\fB,\fP\fIport\fP\fB:\fP\fIport\fP]...
-Match if either the source or destination ports are equal to one of
-the given ports.
diff --git a/extensions/libxt_owner.c b/extensions/libxt_owner.c
deleted file mode 100644 (file)
index 7c66663..0000000
+++ /dev/null
@@ -1,596 +0,0 @@
-/*
- *     libxt_owner - iptables addon for xt_owner
- *
- *     Copyright © CC Computer Consultants GmbH, 2007 - 2008
- *     Jan Engelhardt <jengelh@computergmbh.de>
- */
-#include <getopt.h>
-#include <grp.h>
-#include <netdb.h>
-#include <pwd.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <xtables.h>
-#include <linux/netfilter/xt_owner.h>
-#include <linux/netfilter_ipv4/ipt_owner.h>
-#include <linux/netfilter_ipv6/ip6t_owner.h>
-
-enum {
-       FLAG_UID_OWNER     = 1 << 0,
-       FLAG_GID_OWNER     = 1 << 1,
-       FLAG_SOCKET_EXISTS = 1 << 2,
-       FLAG_PID_OWNER     = 1 << 3,
-       FLAG_SID_OWNER     = 1 << 4,
-       FLAG_COMM          = 1 << 5,
-};
-
-static void owner_mt_help_v0(void)
-{
-#ifdef IPT_OWNER_COMM
-       printf(
-"owner match options:\n"
-"[!] --uid-owner userid       Match local UID\n"
-"[!] --gid-owner groupid      Match local GID\n"
-"[!] --pid-owner processid    Match local PID\n"
-"[!] --sid-owner sessionid    Match local SID\n"
-"[!] --cmd-owner name         Match local command name\n"
-"NOTE: PID, SID and command matching are broken on SMP\n");
-#else
-       printf(
-"owner match options:\n"
-"[!] --uid-owner userid       Match local UID\n"
-"[!] --gid-owner groupid      Match local GID\n"
-"[!] --pid-owner processid    Match local PID\n"
-"[!] --sid-owner sessionid    Match local SID\n"
-"NOTE: PID and SID matching are broken on SMP\n");
-#endif /* IPT_OWNER_COMM */
-}
-
-static void owner_mt6_help_v0(void)
-{
-       printf(
-"owner match options:\n"
-"[!] --uid-owner userid       Match local UID\n"
-"[!] --gid-owner groupid      Match local GID\n"
-"[!] --pid-owner processid    Match local PID\n"
-"[!] --sid-owner sessionid    Match local SID\n"
-"NOTE: PID and SID matching are broken on SMP\n");
-}
-
-static void owner_mt_help(void)
-{
-       printf(
-"owner match options:\n"
-"[!] --uid-owner userid[-userid]      Match local UID\n"
-"[!] --gid-owner groupid[-groupid]    Match local GID\n"
-"[!] --socket-exists                  Match if socket exists\n");
-}
-
-static const struct option owner_mt_opts_v0[] = {
-       {.name = "uid-owner", .has_arg = true, .val = 'u'},
-       {.name = "gid-owner", .has_arg = true, .val = 'g'},
-       {.name = "pid-owner", .has_arg = true, .val = 'p'},
-       {.name = "sid-owner", .has_arg = true, .val = 's'},
-#ifdef IPT_OWNER_COMM
-       {.name = "cmd-owner", .has_arg = true, .val = 'c'},
-#endif
-       { .name = NULL }
-};
-
-static const struct option owner_mt6_opts_v0[] = {
-       {.name = "uid-owner", .has_arg = true, .val = 'u'},
-       {.name = "gid-owner", .has_arg = true, .val = 'g'},
-       {.name = "pid-owner", .has_arg = true, .val = 'p'},
-       {.name = "sid-owner", .has_arg = true, .val = 's'},
-       { .name = NULL }
-};
-
-static const struct option owner_mt_opts[] = {
-       {.name = "uid-owner",     .has_arg = true,  .val = 'u'},
-       {.name = "gid-owner",     .has_arg = true,  .val = 'g'},
-       {.name = "socket-exists", .has_arg = false, .val = 'k'},
-       { .name = NULL }
-};
-
-static int
-owner_mt_parse_v0(int c, char **argv, int invert, unsigned int *flags,
-                  const void *entry, struct xt_entry_match **match)
-{
-       struct ipt_owner_info *info = (void *)(*match)->data;
-       struct passwd *pwd;
-       struct group *grp;
-       unsigned int id;
-
-       switch (c) {
-       case 'u':
-               param_act(P_ONLY_ONCE, "owner", "--uid-owner", *flags & FLAG_UID_OWNER);
-               if ((pwd = getpwnam(optarg)) != NULL)
-                       id = pwd->pw_uid;
-               else if (!strtonum(optarg, NULL, &id, 0, ~(uid_t)0))
-                       param_act(P_BAD_VALUE, "owner", "--uid-owner", optarg);
-               if (invert)
-                       info->invert |= IPT_OWNER_UID;
-               info->match |= IPT_OWNER_UID;
-               info->uid    = id;
-               *flags      |= FLAG_UID_OWNER;
-               return true;
-
-       case 'g':
-               param_act(P_ONLY_ONCE, "owner", "--gid-owner", *flags & FLAG_GID_OWNER);
-               if ((grp = getgrnam(optarg)) != NULL)
-                       id = grp->gr_gid;
-               else if (!strtonum(optarg, NULL, &id, 0, ~(gid_t)0))
-                       param_act(P_BAD_VALUE, "owner", "--gid-owner", optarg);
-               if (invert)
-                       info->invert |= IPT_OWNER_GID;
-               info->match |= IPT_OWNER_GID;
-               info->gid    = id;
-               *flags      |= FLAG_GID_OWNER;
-               return true;
-
-       case 'p':
-               param_act(P_ONLY_ONCE, "owner", "--pid-owner", *flags & FLAG_PID_OWNER);
-               if (!strtonum(optarg, NULL, &id, 0, INT_MAX))
-                       param_act(P_BAD_VALUE, "owner", "--pid-owner", optarg);
-               if (invert)
-                       info->invert |= IPT_OWNER_PID;
-               info->match |= IPT_OWNER_PID;
-               info->pid    = id;
-               *flags      |= FLAG_PID_OWNER;
-               return true;
-
-       case 's':
-               param_act(P_ONLY_ONCE, "owner", "--sid-owner", *flags & FLAG_SID_OWNER);
-               if (!strtonum(optarg, NULL, &id, 0, INT_MAX))
-                       param_act(P_BAD_VALUE, "owner", "--sid-value", optarg);
-               if (invert)
-                       info->invert |= IPT_OWNER_SID;
-               info->match |= IPT_OWNER_SID;
-               info->sid    = id;
-               *flags      |= FLAG_SID_OWNER;
-               return true;
-
-#ifdef IPT_OWNER_COMM
-       case 'c':
-               param_act(P_ONLY_ONCE, "owner", "--cmd-owner", *flags & FLAG_COMM);
-               if (strlen(optarg) > sizeof(info->comm))
-                       exit_error(PARAMETER_PROBLEM, "owner match: command "
-                                  "\"%s\" too long, max. %zu characters",
-                                  optarg, sizeof(info->comm));
-
-               info->comm[sizeof(info->comm)-1] = '\0';
-               strncpy(info->comm, optarg, sizeof(info->comm));
-
-               if (invert)
-                       info->invert |= IPT_OWNER_COMM;
-               info->match |= IPT_OWNER_COMM;
-               *flags      |= FLAG_COMM;
-               return true;
-#endif
-       }
-       return false;
-}
-
-static int
-owner_mt6_parse_v0(int c, char **argv, int invert, unsigned int *flags,
-                   const void *entry, struct xt_entry_match **match)
-{
-       struct ip6t_owner_info *info = (void *)(*match)->data;
-       struct passwd *pwd;
-       struct group *grp;
-       unsigned int id;
-
-       switch (c) {
-       case 'u':
-               param_act(P_ONLY_ONCE, "owner", "--uid-owner",
-                         *flags & FLAG_UID_OWNER);
-               if ((pwd = getpwnam(optarg)) != NULL)
-                       id = pwd->pw_uid;
-               else if (!strtonum(optarg, NULL, &id, 0, ~(uid_t)0))
-                       param_act(P_BAD_VALUE, "owner", "--uid-owner", optarg);
-               if (invert)
-                       info->invert |= IP6T_OWNER_UID;
-               info->match |= IP6T_OWNER_UID;
-               info->uid    = id;
-               *flags      |= FLAG_UID_OWNER;
-               return true;
-
-       case 'g':
-               param_act(P_ONLY_ONCE, "owner", "--gid-owner",
-                         *flags & FLAG_GID_OWNER);
-               if ((grp = getgrnam(optarg)) != NULL)
-                       id = grp->gr_gid;
-               else if (!strtonum(optarg, NULL, &id, 0, ~(gid_t)0))
-                       param_act(P_BAD_VALUE, "owner", "--gid-owner", optarg);
-               if (invert)
-                       info->invert |= IP6T_OWNER_GID;
-               info->match |= IP6T_OWNER_GID;
-               info->gid    = id;
-               *flags      |= FLAG_GID_OWNER;
-               return true;
-
-       case 'p':
-               param_act(P_ONLY_ONCE, "owner", "--pid-owner",
-                         *flags & FLAG_PID_OWNER);
-               if (!strtonum(optarg, NULL, &id, 0, INT_MAX))
-                       param_act(P_BAD_VALUE, "owner", "--pid-owner", optarg);
-               if (invert)
-                       info->invert |= IP6T_OWNER_PID;
-               info->match |= IP6T_OWNER_PID;
-               info->pid    = id;
-               *flags      |= FLAG_PID_OWNER;
-               return true;
-
-       case 's':
-               param_act(P_ONLY_ONCE, "owner", "--sid-owner",
-                         *flags & FLAG_SID_OWNER);
-               if (!strtonum(optarg, NULL, &id, 0, INT_MAX))
-                       param_act(P_BAD_VALUE, "owner", "--sid-owner", optarg);
-               if (invert)
-                       info->invert |= IP6T_OWNER_SID;
-               info->match |= IP6T_OWNER_SID;
-               info->sid    = id;
-               *flags      |= FLAG_SID_OWNER;
-               return true;
-       }
-       return false;
-}
-
-static void owner_parse_range(const char *s, unsigned int *from,
-                              unsigned int *to, const char *opt)
-{
-       char *end;
-
-       /* 4294967295 is reserved, so subtract one from ~0 */
-       if (!strtonum(s, &end, from, 0, (~(uid_t)0) - 1))
-               param_act(P_BAD_VALUE, "owner", opt, s);
-       *to = *from;
-       if (*end == '-' || *end == ':')
-               if (!strtonum(end + 1, &end, to, 0, (~(uid_t)0) - 1))
-                       param_act(P_BAD_VALUE, "owner", opt, s);
-       if (*end != '\0')
-               param_act(P_BAD_VALUE, "owner", opt, s);
-}
-
-static int owner_mt_parse(int c, char **argv, int invert, unsigned int *flags,
-                          const void *entry, struct xt_entry_match **match)
-{
-       struct xt_owner_match_info *info = (void *)(*match)->data;
-       struct passwd *pwd;
-       struct group *grp;
-       unsigned int from, to;
-
-       switch (c) {
-       case 'u':
-               param_act(P_ONLY_ONCE, "owner", "--uid-owner",
-                         *flags & FLAG_UID_OWNER);
-               if ((pwd = getpwnam(optarg)) != NULL)
-                       from = to = pwd->pw_uid;
-               else
-                       owner_parse_range(optarg, &from, &to, "--uid-owner");
-               if (invert)
-                       info->invert |= XT_OWNER_UID;
-               info->match  |= XT_OWNER_UID;
-               info->uid_min = from;
-               info->uid_max = to;
-               *flags       |= FLAG_UID_OWNER;
-               return true;
-
-       case 'g':
-               param_act(P_ONLY_ONCE, "owner", "--gid-owner",
-                         *flags & FLAG_GID_OWNER);
-               if ((grp = getgrnam(optarg)) != NULL)
-                       from = to = grp->gr_gid;
-               else
-                       owner_parse_range(optarg, &from, &to, "--gid-owner");
-               if (invert)
-                       info->invert |= XT_OWNER_GID;
-               info->match  |= XT_OWNER_GID;
-               info->gid_min = from;
-               info->gid_max = to;
-               *flags      |= FLAG_GID_OWNER;
-               return true;
-
-       case 'k':
-               param_act(P_ONLY_ONCE, "owner", "--socket-exists",
-                         *flags & FLAG_SOCKET_EXISTS);
-               if (invert)
-                       info->invert |= XT_OWNER_SOCKET;
-               info->match |= XT_OWNER_SOCKET;
-               *flags |= FLAG_SOCKET_EXISTS;
-               return true;
-
-       }
-       return false;
-}
-
-static void owner_mt_check(unsigned int flags)
-{
-       if (flags == 0)
-               exit_error(PARAMETER_PROBLEM, "owner: At least one of "
-                          "--uid-owner, --gid-owner or --socket-exists "
-                          "is required");
-}
-
-static void
-owner_mt_print_item_v0(const struct ipt_owner_info *info, const char *label,
-                       u_int8_t flag, bool numeric)
-{
-       if (!(info->match & flag))
-               return;
-       if (info->invert & flag)
-               printf("! ");
-       printf(label);
-
-       switch (info->match & flag) {
-       case IPT_OWNER_UID:
-               if (!numeric) {
-                       struct passwd *pwd = getpwuid(info->uid);
-
-                       if (pwd != NULL && pwd->pw_name != NULL) {
-                               printf("%s ", pwd->pw_name);
-                               break;
-                       }
-               }
-               printf("%u ", (unsigned int)info->uid);
-               break;
-
-       case IPT_OWNER_GID:
-               if (!numeric) {
-                       struct group *grp = getgrgid(info->gid);
-
-                       if (grp != NULL && grp->gr_name != NULL) {
-                               printf("%s ", grp->gr_name);
-                               break;
-                       }
-               }
-               printf("%u ", (unsigned int)info->gid);
-               break;
-
-       case IPT_OWNER_PID:
-               printf("%u ", (unsigned int)info->pid);
-               break;
-
-       case IPT_OWNER_SID:
-               printf("%u ", (unsigned int)info->sid);
-               break;
-
-#ifdef IPT_OWNER_COMM
-       case IPT_OWNER_COMM:
-               printf("%.*s ", (int)sizeof(info->comm), info->comm);
-               break;
-#endif
-       }
-}
-
-static void
-owner_mt6_print_item_v0(const struct ip6t_owner_info *info, const char *label,
-                        u_int8_t flag, bool numeric)
-{
-       if (!(info->match & flag))
-               return;
-       if (info->invert & flag)
-               printf("! ");
-       printf(label);
-
-       switch (info->match & flag) {
-       case IP6T_OWNER_UID:
-               if (!numeric) {
-                       struct passwd *pwd = getpwuid(info->uid);
-
-                       if (pwd != NULL && pwd->pw_name != NULL) {
-                               printf("%s ", pwd->pw_name);
-                               break;
-                       }
-               }
-               printf("%u ", (unsigned int)info->uid);
-               break;
-
-       case IP6T_OWNER_GID:
-               if (!numeric) {
-                       struct group *grp = getgrgid(info->gid);
-
-                       if (grp != NULL && grp->gr_name != NULL) {
-                               printf("%s ", grp->gr_name);
-                               break;
-                       }
-               }
-               printf("%u ", (unsigned int)info->gid);
-               break;
-
-       case IP6T_OWNER_PID:
-               printf("%u ", (unsigned int)info->pid);
-               break;
-
-       case IP6T_OWNER_SID:
-               printf("%u ", (unsigned int)info->sid);
-               break;
-       }
-}
-
-static void
-owner_mt_print_item(const struct xt_owner_match_info *info, const char *label,
-                    u_int8_t flag, bool numeric)
-{
-       if (!(info->match & flag))
-               return;
-       if (info->invert & flag)
-               printf("! ");
-       printf("%s ", label);
-
-       switch (info->match & flag) {
-       case XT_OWNER_UID:
-               if (info->uid_min != info->uid_max) {
-                       printf("%u-%u ", (unsigned int)info->uid_min,
-                              (unsigned int)info->uid_max);
-                       break;
-               } else if (!numeric) {
-                       const struct passwd *pwd = getpwuid(info->uid_min);
-
-                       if (pwd != NULL && pwd->pw_name != NULL) {
-                               printf("%s ", pwd->pw_name);
-                               break;
-                       }
-               }
-               printf("%u ", (unsigned int)info->uid_min);
-               break;
-
-       case XT_OWNER_GID:
-               if (info->gid_min != info->gid_max) {
-                       printf("%u-%u ", (unsigned int)info->gid_min,
-                              (unsigned int)info->gid_max);
-                       break;
-               } else if (!numeric) {
-                       const struct group *grp = getgrgid(info->gid_min);
-
-                       if (grp != NULL && grp->gr_name != NULL) {
-                               printf("%s ", grp->gr_name);
-                               break;
-                       }
-               }
-               printf("%u ", (unsigned int)info->gid_min);
-               break;
-       }
-}
-
-static void
-owner_mt_print_v0(const void *ip, const struct xt_entry_match *match,
-                  int numeric)
-{
-       const struct ipt_owner_info *info = (void *)match->data;
-
-       owner_mt_print_item_v0(info, "owner UID match", IPT_OWNER_UID, numeric);
-       owner_mt_print_item_v0(info, "owner GID match", IPT_OWNER_GID, numeric);
-       owner_mt_print_item_v0(info, "owner PID match", IPT_OWNER_PID, numeric);
-       owner_mt_print_item_v0(info, "owner SID match", IPT_OWNER_SID, numeric);
-#ifdef IPT_OWNER_COMM
-       owner_mt_print_item_v0(info, "owner CMD match", IPT_OWNER_COMM, numeric);
-#endif
-}
-
-static void
-owner_mt6_print_v0(const void *ip, const struct xt_entry_match *match,
-                   int numeric)
-{
-       const struct ip6t_owner_info *info = (void *)match->data;
-
-       owner_mt6_print_item_v0(info, "owner UID match", IPT_OWNER_UID, numeric);
-       owner_mt6_print_item_v0(info, "owner GID match", IPT_OWNER_GID, numeric);
-       owner_mt6_print_item_v0(info, "owner PID match", IPT_OWNER_PID, numeric);
-       owner_mt6_print_item_v0(info, "owner SID match", IPT_OWNER_SID, numeric);
-}
-
-static void owner_mt_print(const void *ip, const struct xt_entry_match *match,
-                           int numeric)
-{
-       const struct xt_owner_match_info *info = (void *)match->data;
-
-       owner_mt_print_item(info, "owner socket exists", XT_OWNER_SOCKET, numeric);
-       owner_mt_print_item(info, "owner UID match",     XT_OWNER_UID,    numeric);
-       owner_mt_print_item(info, "owner GID match",     XT_OWNER_GID,    numeric);
-}
-
-static void
-owner_mt_save_v0(const void *ip, const struct xt_entry_match *match)
-{
-       const struct ipt_owner_info *info = (void *)match->data;
-
-       owner_mt_print_item_v0(info, "--uid-owner", IPT_OWNER_UID, true);
-       owner_mt_print_item_v0(info, "--gid-owner", IPT_OWNER_GID, true);
-       owner_mt_print_item_v0(info, "--pid-owner", IPT_OWNER_PID, true);
-       owner_mt_print_item_v0(info, "--sid-owner", IPT_OWNER_SID, true);
-#ifdef IPT_OWNER_COMM
-       owner_mt_print_item_v0(info, "--cmd-owner", IPT_OWNER_COMM, true);
-#endif
-}
-
-static void
-owner_mt6_save_v0(const void *ip, const struct xt_entry_match *match)
-{
-       const struct ip6t_owner_info *info = (void *)match->data;
-
-       owner_mt6_print_item_v0(info, "--uid-owner", IPT_OWNER_UID, true);
-       owner_mt6_print_item_v0(info, "--gid-owner", IPT_OWNER_GID, true);
-       owner_mt6_print_item_v0(info, "--pid-owner", IPT_OWNER_PID, true);
-       owner_mt6_print_item_v0(info, "--sid-owner", IPT_OWNER_SID, true);
-}
-
-static void owner_mt_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct xt_owner_match_info *info = (void *)match->data;
-
-       owner_mt_print_item(info, "--socket-exists",  XT_OWNER_SOCKET, false);
-       owner_mt_print_item(info, "--uid-owner",      XT_OWNER_UID,    false);
-       owner_mt_print_item(info, "--gid-owner",      XT_OWNER_GID,    false);
-}
-
-static struct xtables_match owner_mt_reg_v0 = {
-       .version       = XTABLES_VERSION,
-       .name          = "owner",
-       .revision      = 0,
-       .family        = AF_INET,
-       .size          = XT_ALIGN(sizeof(struct ipt_owner_info)),
-       .userspacesize = XT_ALIGN(sizeof(struct ipt_owner_info)),
-       .help          = owner_mt_help_v0,
-       .parse         = owner_mt_parse_v0,
-       .final_check   = owner_mt_check,
-       .print         = owner_mt_print_v0,
-       .save          = owner_mt_save_v0,
-       .extra_opts    = owner_mt_opts_v0,
-};
-
-static struct xtables_match owner_mt6_reg_v0 = {
-       .version       = XTABLES_VERSION,
-       .name          = "owner",
-       .revision      = 0,
-       .family        = AF_INET6,
-       .size          = XT_ALIGN(sizeof(struct ip6t_owner_info)),
-       .userspacesize = XT_ALIGN(sizeof(struct ip6t_owner_info)),
-       .help          = owner_mt6_help_v0,
-       .parse         = owner_mt6_parse_v0,
-       .final_check   = owner_mt_check,
-       .print         = owner_mt6_print_v0,
-       .save          = owner_mt6_save_v0,
-       .extra_opts    = owner_mt6_opts_v0,
-};
-
-static struct xtables_match owner_mt_reg = {
-       .version       = XTABLES_VERSION,
-       .name          = "owner",
-       .revision      = 1,
-       .family        = AF_INET,
-       .size          = XT_ALIGN(sizeof(struct xt_owner_match_info)),
-       .userspacesize = XT_ALIGN(sizeof(struct xt_owner_match_info)),
-       .help          = owner_mt_help,
-       .parse         = owner_mt_parse,
-       .final_check   = owner_mt_check,
-       .print         = owner_mt_print,
-       .save          = owner_mt_save,
-       .extra_opts    = owner_mt_opts,
-};
-
-static struct xtables_match owner_mt6_reg = {
-       .version       = XTABLES_VERSION,
-       .name          = "owner",
-       .revision      = 1,
-       .family        = AF_INET6,
-       .size          = XT_ALIGN(sizeof(struct xt_owner_match_info)),
-       .userspacesize = XT_ALIGN(sizeof(struct xt_owner_match_info)),
-       .help          = owner_mt_help,
-       .parse         = owner_mt_parse,
-       .final_check   = owner_mt_check,
-       .print         = owner_mt_print,
-       .save          = owner_mt_save,
-       .extra_opts    = owner_mt_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&owner_mt_reg_v0);
-       xtables_register_match(&owner_mt6_reg_v0);
-       xtables_register_match(&owner_mt_reg);
-       xtables_register_match(&owner_mt6_reg);
-}
diff --git a/extensions/libxt_owner.man b/extensions/libxt_owner.man
deleted file mode 100644 (file)
index 0bc0c65..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-This module attempts to match various characteristics of the packet creator,
-for locally generated packets. This match is only valid in the OUTPUT and
-POSTROUTING chains. Forwarded packets do not have any socket associated with
-them. Packets from kernel threads do have a socket, but usually no owner.
-.TP
-[\fB!\fP] \fB--uid-owner\fP \fIusername\fP
-.TP
-[\fB!\fP] \fB--uid-owner\fP \fIuserid\fP[\fB-\fP\fIuserid\fP]
-Matches if the packet socket's file structure (if it has one) is owned by the
-given user. You may also specify a numerical UID, or an UID range.
-.TP
-[\fB!\fP] \fB--gid-owner\fP \fIgroupname\fP
-.TP
-[\fB!\fP] \fB--gid-owner\fP \fIgroupid\fP[\fB-\fR\fIgroupid\fP]
-Matches if the packet socket's file structure is owned by the given group.
-You may also specify a numerical GID, or a GID range.
-.TP
-[\fB!\fP] \fB--socket-exists\fP
-Matches if the packet is associated with a socket.
diff --git a/extensions/libxt_physdev.c b/extensions/libxt_physdev.c
deleted file mode 100644 (file)
index 34547c8..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-/* Shared library add-on to iptables to add bridge port matching support. */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <ctype.h>
-#include <xtables.h>
-#include <linux/netfilter/xt_physdev.h>
-#if defined(__GLIBC__) && __GLIBC__ == 2
-#include <net/ethernet.h>
-#else
-#include <linux/if_ether.h>
-#endif
-
-static void physdev_help(void)
-{
-       printf(
-"physdev match options:\n"
-" --physdev-in [!] input name[+]               bridge port name ([+] for wildcard)\n"
-" --physdev-out [!] output name[+]     bridge port name ([+] for wildcard)\n"
-" [!] --physdev-is-in                  arrived on a bridge device\n"
-" [!] --physdev-is-out                 will leave on a bridge device\n"
-" [!] --physdev-is-bridged             it's a bridged packet\n");
-}
-
-static const struct option physdev_opts[] = {
-       { "physdev-in", 1, NULL, '1' },
-       { "physdev-out", 1, NULL, '2' },
-       { "physdev-is-in", 0, NULL, '3' },
-       { "physdev-is-out", 0, NULL, '4' },
-       { "physdev-is-bridged", 0, NULL, '5' },
-       { .name = NULL }
-};
-
-static int
-physdev_parse(int c, char **argv, int invert, unsigned int *flags,
-              const void *entry, struct xt_entry_match **match)
-{
-       struct xt_physdev_info *info =
-               (struct xt_physdev_info*)(*match)->data;
-
-       switch (c) {
-       case '1':
-               if (*flags & XT_PHYSDEV_OP_IN)
-                       goto multiple_use;
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_interface(argv[optind-1], info->physindev,
-                               (unsigned char *)info->in_mask);
-               if (invert)
-                       info->invert |= XT_PHYSDEV_OP_IN;
-               info->bitmask |= XT_PHYSDEV_OP_IN;
-               *flags |= XT_PHYSDEV_OP_IN;
-               break;
-
-       case '2':
-               if (*flags & XT_PHYSDEV_OP_OUT)
-                       goto multiple_use;
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_interface(argv[optind-1], info->physoutdev,
-                               (unsigned char *)info->out_mask);
-               if (invert)
-                       info->invert |= XT_PHYSDEV_OP_OUT;
-               info->bitmask |= XT_PHYSDEV_OP_OUT;
-               *flags |= XT_PHYSDEV_OP_OUT;
-               break;
-
-       case '3':
-               if (*flags & XT_PHYSDEV_OP_ISIN)
-                       goto multiple_use;
-               check_inverse(optarg, &invert, &optind, 0);
-               info->bitmask |= XT_PHYSDEV_OP_ISIN;
-               if (invert)
-                       info->invert |= XT_PHYSDEV_OP_ISIN;
-               *flags |= XT_PHYSDEV_OP_ISIN;
-               break;
-
-       case '4':
-               if (*flags & XT_PHYSDEV_OP_ISOUT)
-                       goto multiple_use;
-               check_inverse(optarg, &invert, &optind, 0);
-               info->bitmask |= XT_PHYSDEV_OP_ISOUT;
-               if (invert)
-                       info->invert |= XT_PHYSDEV_OP_ISOUT;
-               *flags |= XT_PHYSDEV_OP_ISOUT;
-               break;
-
-       case '5':
-               if (*flags & XT_PHYSDEV_OP_BRIDGED)
-                       goto multiple_use;
-               check_inverse(optarg, &invert, &optind, 0);
-               if (invert)
-                       info->invert |= XT_PHYSDEV_OP_BRIDGED;
-               *flags |= XT_PHYSDEV_OP_BRIDGED;
-               info->bitmask |= XT_PHYSDEV_OP_BRIDGED;
-               break;
-
-       default:
-               return 0;
-       }
-
-       return 1;
-multiple_use:
-       exit_error(PARAMETER_PROBLEM,
-          "multiple use of the same physdev option is not allowed");
-
-}
-
-static void physdev_check(unsigned int flags)
-{
-       if (flags == 0)
-               exit_error(PARAMETER_PROBLEM, "PHYSDEV: no physdev option specified");
-}
-
-static void
-physdev_print(const void *ip, const struct xt_entry_match *match, int numeric)
-{
-       struct xt_physdev_info *info =
-               (struct xt_physdev_info*)match->data;
-
-       printf("PHYSDEV match");
-       if (info->bitmask & XT_PHYSDEV_OP_ISIN)
-               printf("%s --physdev-is-in",
-                      info->invert & XT_PHYSDEV_OP_ISIN ? " !":"");
-       if (info->bitmask & XT_PHYSDEV_OP_IN)
-               printf("%s --physdev-in %s",
-               (info->invert & XT_PHYSDEV_OP_IN) ? " !":"", info->physindev);
-
-       if (info->bitmask & XT_PHYSDEV_OP_ISOUT)
-               printf("%s --physdev-is-out",
-                      info->invert & XT_PHYSDEV_OP_ISOUT ? " !":"");
-       if (info->bitmask & XT_PHYSDEV_OP_OUT)
-               printf("%s --physdev-out %s",
-               (info->invert & XT_PHYSDEV_OP_OUT) ? " !":"", info->physoutdev);
-       if (info->bitmask & XT_PHYSDEV_OP_BRIDGED)
-               printf("%s --physdev-is-bridged",
-                      info->invert & XT_PHYSDEV_OP_BRIDGED ? " !":"");
-       printf(" ");
-}
-
-static void physdev_save(const void *ip, const struct xt_entry_match *match)
-{
-       struct xt_physdev_info *info =
-               (struct xt_physdev_info*)match->data;
-
-       if (info->bitmask & XT_PHYSDEV_OP_ISIN)
-               printf("%s --physdev-is-in",
-                      info->invert & XT_PHYSDEV_OP_ISIN ? " !":"");
-       if (info->bitmask & XT_PHYSDEV_OP_IN)
-               printf("%s --physdev-in %s",
-               (info->invert & XT_PHYSDEV_OP_IN) ? " !":"", info->physindev);
-
-       if (info->bitmask & XT_PHYSDEV_OP_ISOUT)
-               printf("%s --physdev-is-out",
-                      info->invert & XT_PHYSDEV_OP_ISOUT ? " !":"");
-       if (info->bitmask & XT_PHYSDEV_OP_OUT)
-               printf("%s --physdev-out %s",
-               (info->invert & XT_PHYSDEV_OP_OUT) ? " !":"", info->physoutdev);
-       if (info->bitmask & XT_PHYSDEV_OP_BRIDGED)
-               printf("%s --physdev-is-bridged",
-                      info->invert & XT_PHYSDEV_OP_BRIDGED ? " !":"");
-       printf(" ");
-}
-
-static struct xtables_match physdev_match = {
-       .family         = AF_INET,
-       .name           = "physdev",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_physdev_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_physdev_info)),
-       .help           = physdev_help,
-       .parse          = physdev_parse,
-       .final_check    = physdev_check,
-       .print          = physdev_print,
-       .save           = physdev_save,
-       .extra_opts     = physdev_opts,
-};
-
-static struct xtables_match physdev_match6 = {
-       .family         = AF_INET6,
-       .name           = "physdev",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_physdev_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_physdev_info)),
-       .help           = physdev_help,
-       .parse          = physdev_parse,
-       .final_check    = physdev_check,
-       .print          = physdev_print,
-       .save           = physdev_save,
-       .extra_opts     = physdev_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&physdev_match);
-       xtables_register_match(&physdev_match6);
-}
diff --git a/extensions/libxt_physdev.man b/extensions/libxt_physdev.man
deleted file mode 100644 (file)
index a00622a..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-This module matches on the bridge port input and output devices enslaved
-to a bridge device. This module is a part of the infrastructure that enables
-a transparent bridging IP firewall and is only useful for kernel versions
-above version 2.5.44.
-.TP
-[\fB!\fP] \fB--physdev-in\fP \fIname\fP
-Name of a bridge port via which a packet is received (only for
-packets entering the
-.BR INPUT ,
-.B FORWARD
-and
-.B PREROUTING
-chains). If the interface name ends in a "+", then any
-interface which begins with this name will match. If the packet didn't arrive
-through a bridge device, this packet won't match this option, unless '!' is used.
-.TP
-[\fB!\fP] \fB--physdev-out\fP \fIname\fP
-Name of a bridge port via which a packet is going to be sent (for packets
-entering the
-.BR FORWARD ,
-.B OUTPUT
-and
-.B POSTROUTING
-chains).  If the interface name ends in a "+", then any
-interface which begins with this name will match. Note that in the
-.BR nat " and " mangle
-.B OUTPUT
-chains one cannot match on the bridge output port, however one can in the
-.B "filter OUTPUT"
-chain. If the packet won't leave by a bridge device or it is yet unknown what
-the output device will be, then the packet won't match this option, unless
-'!' is used.
-.TP
-[\fB!\fP] \fB--physdev-is-in\fP
-Matches if the packet has entered through a bridge interface.
-.TP
-[\fB!\fP] \fB--physdev-is-out\fP
-Matches if the packet will leave through a bridge interface.
-.TP
-[\fB!\fP] \fB--physdev-is-bridged\fP
-Matches if the packet is being bridged and therefore is not being routed.
-This is only useful in the FORWARD and POSTROUTING chains.
diff --git a/extensions/libxt_pkttype.c b/extensions/libxt_pkttype.c
deleted file mode 100644 (file)
index 2554101..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-/* 
- * Shared library add-on to iptables to match 
- * packets by their type (BROADCAST, UNICAST, MULTICAST). 
- *
- * Michal Ludvig <michal@logix.cz>
- */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#if defined(__GLIBC__) && __GLIBC__ == 2
-#include <net/ethernet.h>
-#else
-#include <linux/if_ether.h>
-#endif
-#include <xtables.h>
-#include <linux/if_packet.h>
-#include <linux/netfilter/xt_pkttype.h>
-
-#define        PKTTYPE_VERSION "0.1"
-
-struct pkttypes {
-       const char *name;
-       unsigned char pkttype;
-       unsigned char printhelp;
-       const char *help;
-};
-
-static const struct pkttypes supported_types[] = {
-       {"unicast", PACKET_HOST, 1, "to us"},
-       {"broadcast", PACKET_BROADCAST, 1, "to all"},
-       {"multicast", PACKET_MULTICAST, 1, "to group"},
-/*
-       {"otherhost", PACKET_OTHERHOST, 1, "to someone else"},
-       {"outgoing", PACKET_OUTGOING, 1, "outgoing of any type"},
-*/
-       /* aliases */
-       {"bcast", PACKET_BROADCAST, 0, NULL},
-       {"mcast", PACKET_MULTICAST, 0, NULL},
-       {"host", PACKET_HOST, 0, NULL}
-};
-
-static void print_types(void)
-{
-       unsigned int    i;
-       
-       printf("Valid packet types:\n");
-       for (i = 0; i < sizeof(supported_types)/sizeof(struct pkttypes); i++)
-       {
-               if(supported_types[i].printhelp == 1)
-                       printf("\t%-14s\t\t%s\n", supported_types[i].name, supported_types[i].help);
-       }
-       printf("\n");
-}
-
-/* Function which prints out usage message. */
-static void pkttype_help(void)
-{
-       printf(
-"pkttype match options:\n"
-"[!] --pkt-type packettype    match packet type\n");
-       print_types();
-}
-
-static const struct option pkttype_opts[] = {
-       {"pkt-type", 1, NULL, '1'},
-       { .name = NULL }
-};
-
-static void parse_pkttype(const char *pkttype, struct xt_pkttype_info *info)
-{
-       unsigned int    i;
-       
-       for (i = 0; i < sizeof(supported_types)/sizeof(struct pkttypes); i++)
-       {
-               if(strcasecmp(pkttype, supported_types[i].name)==0)
-               {
-                       info->pkttype=supported_types[i].pkttype;
-                       return;
-               }
-       }
-       
-       exit_error(PARAMETER_PROBLEM, "Bad packet type '%s'", pkttype);
-}
-
-static int pkttype_parse(int c, char **argv, int invert, unsigned int *flags,
-                         const void *entry, struct xt_entry_match **match)
-{
-       struct xt_pkttype_info *info = (struct xt_pkttype_info *)(*match)->data;
-       
-       switch(c)
-       {
-               case '1':
-                       check_inverse(optarg, &invert, &optind, 0);
-                       parse_pkttype(argv[optind-1], info);
-                       if(invert)
-                               info->invert=1;
-                       *flags=1;
-                       break;
-
-               default: 
-                       return 0;
-       }
-
-       return 1;
-}
-
-static void pkttype_check(unsigned int flags)
-{
-       if (!flags)
-               exit_error(PARAMETER_PROBLEM, "You must specify `--pkt-type'");
-}
-
-static void print_pkttype(struct xt_pkttype_info *info)
-{
-       unsigned int    i;
-       
-       for (i = 0; i < sizeof(supported_types)/sizeof(struct pkttypes); i++)
-       {
-               if(supported_types[i].pkttype==info->pkttype)
-               {
-                       printf("%s ", supported_types[i].name);
-                       return;
-               }
-       }
-
-       printf("%d ", info->pkttype);   /* in case we didn't find an entry in named-packtes */
-}
-
-static void pkttype_print(const void *ip, const struct xt_entry_match *match,
-                          int numeric)
-{
-       struct xt_pkttype_info *info = (struct xt_pkttype_info *)match->data;
-       
-       printf("PKTTYPE %s= ", info->invert?"!":"");
-       print_pkttype(info);
-}
-
-static void pkttype_save(const void *ip, const struct xt_entry_match *match)
-{
-       struct xt_pkttype_info *info = (struct xt_pkttype_info *)match->data;
-       
-       printf("--pkt-type %s", info->invert?"! ":"");
-       print_pkttype(info);
-}
-
-static struct xtables_match pkttype_match = {
-       .family         = AF_UNSPEC,
-       .name           = "pkttype",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_pkttype_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_pkttype_info)),
-       .help           = pkttype_help,
-       .parse          = pkttype_parse,
-       .final_check    = pkttype_check,
-       .print          = pkttype_print,
-       .save           = pkttype_save,
-       .extra_opts     = pkttype_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&pkttype_match);
-}
diff --git a/extensions/libxt_pkttype.man b/extensions/libxt_pkttype.man
deleted file mode 100644 (file)
index ecc6061..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-This module matches the link-layer packet type.
-.TP
-[\fB!\fP] \fB--pkt-type\fP {\fBunicast\fP|\fBbroadcast\fP|\fBmulticast\fP}
diff --git a/extensions/libxt_policy.man b/extensions/libxt_policy.man
deleted file mode 100644 (file)
index 7b7cb2d..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-This modules matches the policy used by IPsec for handling a packet.
-.TP
-\fB--dir\fP {\fBin\fP|\fBout\fP}
-Used to select whether to match the policy used for decapsulation or the
-policy that will be used for encapsulation.
-.B in
-is valid in the
-.B PREROUTING, INPUT and FORWARD
-chains,
-.B out
-is valid in the
-.B POSTROUTING, OUTPUT and FORWARD
-chains.
-.TP
-\fB--pol\fP {\fBnone\fP|\fBipsec\fP}
-Matches if the packet is subject to IPsec processing.
-.TP
-.BI "--strict"
-Selects whether to match the exact policy or match if any rule of
-the policy matches the given policy.
-.TP
-[\fB!\fP] \fB--reqid\fP \fIid\fP
-Matches the reqid of the policy rule. The reqid can be specified with
-.B setkey(8)
-using
-.B unique:id
-as level.
-.TP
-[\fB!\fP] \fB--spi\fP \fIspi\fP
-Matches the SPI of the SA.
-.TP
-[\fB!\fP] \fB--proto\fP {\fBah\fP|\fBesp\fP|\fBipcomp\fP}
-Matches the encapsulation protocol.
-.TP
-[\fB!\fP] \fB--mode\fP {\fBtunnel\fP|\fBtransport\fP}
-Matches the encapsulation mode.
-.TP
-[\fB!\fP] \fB--tunnel-src\fP \fIaddr\fP[\fB/\fP\fImask\fP]
-Matches the source end-point address of a tunnel mode SA.
-Only valid with \fB--mode tunnel\fP.
-.TP
-[\fB!\fP] \fB--tunnel-dst\fP \fIaddr\fP[\fB/\fP\fImask\fP]
-Matches the destination end-point address of a tunnel mode SA.
-Only valid with \fB--mode tunnel\fP.
-.TP
-.BI "--next"
-Start the next element in the policy specification. Can only be used with
-\fB--strict\fP.
diff --git a/extensions/libxt_quota.c b/extensions/libxt_quota.c
deleted file mode 100644 (file)
index 8e178fe..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Shared library add-on to iptables to add quota support
- *
- * Sam Johnston <samj@samj.net>
- */
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <xtables.h>
-
-#include <linux/netfilter/xt_quota.h>
-
-static const struct option quota_opts[] = {
-       {"quota", 1, NULL, '1'},
-       { .name = NULL }
-};
-
-/* print usage */
-static void quota_help(void)
-{
-       printf("quota match options:\n"
-              " --quota quota                  quota (bytes)\n");
-}
-
-/* print matchinfo */
-static void
-quota_print(const void *ip, const struct xt_entry_match *match, int numeric)
-{
-       struct xt_quota_info *q = (struct xt_quota_info *) match->data;
-       printf("quota: %llu bytes", (unsigned long long) q->quota);
-}
-
-/* save matchinfo */
-static void
-quota_save(const void *ip, const struct xt_entry_match *match)
-{
-       struct xt_quota_info *q = (struct xt_quota_info *) match->data;
-       printf("--quota %llu ", (unsigned long long) q->quota);
-}
-
-/* parse quota option */
-static int
-parse_quota(const char *s, u_int64_t * quota)
-{
-       *quota = strtoull(s, NULL, 10);
-
-#ifdef DEBUG_XT_QUOTA
-       printf("Quota: %llu\n", *quota);
-#endif
-
-       if (*quota == (u_int64_t)-1)
-               exit_error(PARAMETER_PROBLEM, "quota invalid: '%s'\n", s);
-       else
-               return 1;
-}
-
-/* parse all options, returning true if we found any for us */
-static int
-quota_parse(int c, char **argv, int invert, unsigned int *flags,
-           const void *entry, struct xt_entry_match **match)
-{
-       struct xt_quota_info *info = (struct xt_quota_info *) (*match)->data;
-
-       switch (c) {
-       case '1':
-               if (check_inverse(optarg, &invert, NULL, 0))
-                       exit_error(PARAMETER_PROBLEM, "quota: unexpected '!'");
-               if (!parse_quota(optarg, &info->quota))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "bad quota: '%s'", optarg);
-               break;
-
-       default:
-               return 0;
-       }
-       return 1;
-}
-
-static struct xtables_match quota_match = {
-       .family         = AF_UNSPEC,
-       .name           = "quota",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof (struct xt_quota_info)),
-       .userspacesize  = offsetof(struct xt_quota_info, quota),
-       .help           = quota_help,
-       .parse          = quota_parse,
-       .print          = quota_print,
-       .save           = quota_save,
-       .extra_opts     = quota_opts,
-};
-
-void
-_init(void)
-{
-       xtables_register_match(&quota_match);
-}
diff --git a/extensions/libxt_quota.man b/extensions/libxt_quota.man
deleted file mode 100644 (file)
index 7945bee..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-Implements network quotas by decrementing a byte counter with each
-packet.
-.TP
-.BI "--quota " "bytes"
-The quota in bytes.
-.P
diff --git a/extensions/libxt_rateest.c b/extensions/libxt_rateest.c
deleted file mode 100644 (file)
index ebea437..0000000
+++ /dev/null
@@ -1,444 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <getopt.h>
-
-#include <xtables.h>
-#include <linux/netfilter/xt_rateest.h>
-
-/* Ugly hack to pass info to final_check function. We should fix the API */
-static struct xt_rateest_match_info *rateest_info;
-
-static void rateest_help(void)
-{
-       printf(
-"rateest match options:\n"
-" --rateest1 name              Rate estimator name\n"
-" --rateest2 name              Rate estimator name\n"
-" --rateest-delta              Compare difference(s) to given rate(s)\n"
-" --rateest-bps1 [bps]         Compare bps\n"
-" --rateest-pps1 [pps]         Compare pps\n"
-" --rateest-bps2 [bps]         Compare bps\n"
-" --rateest-pps2 [pps]         Compare pps\n"
-" [!] --rateest-lt             Match if rate is less than given rate/estimator\n"
-" [!] --rateest-gt             Match if rate is greater than given rate/estimator\n"
-" [!] --rateest-eq             Match if rate is equal to given rate/estimator\n");
-}
-
-enum rateest_options {
-       OPT_RATEEST1,
-       OPT_RATEEST2,
-       OPT_RATEEST_BPS1,
-       OPT_RATEEST_PPS1,
-       OPT_RATEEST_BPS2,
-       OPT_RATEEST_PPS2,
-       OPT_RATEEST_DELTA,
-       OPT_RATEEST_LT,
-       OPT_RATEEST_GT,
-       OPT_RATEEST_EQ,
-};
-
-static const struct option rateest_opts[] = {
-       { "rateest1",           1, NULL, OPT_RATEEST1 },
-       { "rateest",            1, NULL, OPT_RATEEST1 }, /* alias for absolute mode */
-       { "rateest2",           1, NULL, OPT_RATEEST2 },
-       { "rateest-bps1",       0, NULL, OPT_RATEEST_BPS1 },
-       { "rateest-pps1",       0, NULL, OPT_RATEEST_PPS1 },
-       { "rateest-bps2",       0, NULL, OPT_RATEEST_BPS2 },
-       { "rateest-pps2",       0, NULL, OPT_RATEEST_PPS2 },
-       { "rateest-bps",        0, NULL, OPT_RATEEST_BPS2 }, /* alias for absolute mode */
-       { "rateest-pps",        0, NULL, OPT_RATEEST_PPS2 }, /* alias for absolute mode */
-       { "rateest-delta",      0, NULL, OPT_RATEEST_DELTA },
-       { "rateest-lt",         0, NULL, OPT_RATEEST_LT },
-       { "rateest-gt",         0, NULL, OPT_RATEEST_GT },
-       { "rateest-eq",         0, NULL, OPT_RATEEST_EQ },
-       { .name = NULL }
-};
-
-/* Copied from iproute. See http://physics.nist.gov/cuu/Units/binary.html */
-static const struct rate_suffix {
-       const char *name;
-       double scale;
-} suffixes[] = {
-       { "bit",        1. },
-       { "Kibit",      1024. },
-       { "kbit",       1000. },
-       { "mibit",      1024.*1024. },
-       { "mbit",       1000000. },
-       { "gibit",      1024.*1024.*1024. },
-       { "gbit",       1000000000. },
-       { "tibit",      1024.*1024.*1024.*1024. },
-       { "tbit",       1000000000000. },
-       { "Bps",        8. },
-       { "KiBps",      8.*1024. },
-       { "KBps",       8000. },
-       { "MiBps",      8.*1024*1024. },
-       { "MBps",       8000000. },
-       { "GiBps",      8.*1024.*1024.*1024. },
-       { "GBps",       8000000000. },
-       { "TiBps",      8.*1024.*1024.*1024.*1024. },
-       { "TBps",       8000000000000. },
-       { .name = NULL }
-};
-
-static int
-rateest_get_rate(u_int32_t *rate, const char *str)
-{
-       char *p;
-       double bps = strtod(str, &p);
-       const struct rate_suffix *s;
-
-       if (p == str)
-               return -1;
-
-       if (*p == '\0') {
-               *rate = bps / 8.;       /* assume bytes/sec */
-               return 0;
-       }
-
-       for (s = suffixes; s->name; ++s) {
-               if (strcasecmp(s->name, p) == 0) {
-                       *rate = (bps * s->scale) / 8.;
-                       return 0;
-               }
-       }
-
-       return -1;
-}
-
-static int
-rateest_parse(int c, char **argv, int invert, unsigned int *flags,
-             const void *entry, struct xt_entry_match **match)
-{
-       struct xt_rateest_match_info *info = (void *)(*match)->data;
-
-       rateest_info = info;
-
-       switch (c) {
-       case OPT_RATEEST1:
-               check_inverse(optarg, &invert, &optind, 0);
-               if (invert)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "rateest: rateest can't be inverted");
-
-               if (*flags & (1 << c))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "rateest: can't specify --rateest1 twice");
-               *flags |= 1 << c;
-
-               strncpy(info->name1, optarg, sizeof(info->name1) - 1);
-               break;
-
-       case OPT_RATEEST2:
-               check_inverse(optarg, &invert, &optind, 0);
-               if (invert)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "rateest: rateest can't be inverted");
-
-               if (*flags & (1 << c))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "rateest: can't specify --rateest2 twice");
-               *flags |= 1 << c;
-
-               strncpy(info->name2, optarg, sizeof(info->name2) - 1);
-               info->flags |= XT_RATEEST_MATCH_REL;
-               break;
-
-       case OPT_RATEEST_BPS1:
-               check_inverse(optarg, &invert, &optind, 0);
-               if (invert)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "rateest: rateest-bps can't be inverted");
-
-               if (*flags & (1 << c))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "rateest: can't specify --rateest-bps1 twice");
-               *flags |= 1 << c;
-
-               info->flags |= XT_RATEEST_MATCH_BPS;
-
-               /* The rate is optional and only required in absolute mode */
-               if (!argv[optind] || *argv[optind] == '-' || *argv[optind] == '!')
-                       break;
-
-               if (rateest_get_rate(&info->bps1, argv[optind]) < 0)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "rateest: could not parse rate `%s'",
-                                  argv[optind]);
-               optind++;
-               break;
-
-       case OPT_RATEEST_PPS1:
-               check_inverse(optarg, &invert, &optind, 0);
-               if (invert)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "rateest: rateest-pps can't be inverted");
-
-               if (*flags & (1 << c))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "rateest: can't specify --rateest-pps1 twice");
-               *flags |= 1 << c;
-
-               info->flags |= XT_RATEEST_MATCH_PPS;
-
-               /* The rate is optional and only required in absolute mode */
-               if (!argv[optind] || *argv[optind] == '-' || *argv[optind] == '!')
-                       break;
-
-               if (string_to_number(argv[optind], 0, 0, &info->pps1) < 0)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "rateest: could not parse pps `%s'",
-                                  argv[optind]);
-               optind++;
-               break;
-
-       case OPT_RATEEST_BPS2:
-               check_inverse(optarg, &invert, &optind, 0);
-               if (invert)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "rateest: rateest-bps can't be inverted");
-
-               if (*flags & (1 << c))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "rateest: can't specify --rateest-bps2 twice");
-               *flags |= 1 << c;
-
-               info->flags |= XT_RATEEST_MATCH_BPS;
-
-               /* The rate is optional and only required in absolute mode */
-               if (!argv[optind] || *argv[optind] == '-' || *argv[optind] == '!')
-                       break;
-
-               if (rateest_get_rate(&info->bps2, argv[optind]) < 0)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "rateest: could not parse rate `%s'",
-                                  argv[optind]);
-               optind++;
-               break;
-
-       case OPT_RATEEST_PPS2:
-               check_inverse(optarg, &invert, &optind, 0);
-               if (invert)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "rateest: rateest-pps can't be inverted");
-
-               if (*flags & (1 << c))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "rateest: can't specify --rateest-pps2 twice");
-               *flags |= 1 << c;
-
-               info->flags |= XT_RATEEST_MATCH_PPS;
-
-               /* The rate is optional and only required in absolute mode */
-               if (!argv[optind] || *argv[optind] == '-' || *argv[optind] == '!')
-                       break;
-
-               if (string_to_number(argv[optind], 0, 0, &info->pps2) < 0)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "rateest: could not parse pps `%s'",
-                                  argv[optind]);
-               optind++;
-               break;
-
-       case OPT_RATEEST_DELTA:
-               check_inverse(optarg, &invert, &optind, 0);
-               if (invert)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "rateest: rateest-delta can't be inverted");
-
-               if (*flags & (1 << c))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "rateest: can't specify --rateest-delta twice");
-               *flags |= 1 << c;
-
-               info->flags |= XT_RATEEST_MATCH_DELTA;
-               break;
-
-       case OPT_RATEEST_EQ:
-               check_inverse(argv[optind-1], &invert, &optind, 0);
-
-               if (*flags & (1 << c))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "rateest: can't specify lt/gt/eq twice");
-               *flags |= 1 << c;
-
-               info->mode = XT_RATEEST_MATCH_EQ;
-               if (invert)
-                       info->flags |= XT_RATEEST_MATCH_INVERT;
-               break;
-
-       case OPT_RATEEST_LT:
-               check_inverse(argv[optind-1], &invert, &optind, 0);
-
-               if (*flags & (1 << c))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "rateest: can't specify lt/gt/eq twice");
-               *flags |= 1 << c;
-
-               info->mode = XT_RATEEST_MATCH_LT;
-               if (invert)
-                       info->flags |= XT_RATEEST_MATCH_INVERT;
-               break;
-
-       case OPT_RATEEST_GT:
-               check_inverse(argv[optind-1], &invert, &optind, 0);
-
-               if (*flags & (1 << c))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "rateest: can't specify lt/gt/eq twice");
-               *flags |= 1 << c;
-
-               info->mode = XT_RATEEST_MATCH_GT;
-               if (invert)
-                       info->flags |= XT_RATEEST_MATCH_INVERT;
-               break;
-
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static void
-rateest_final_check(unsigned int flags)
-{
-       struct xt_rateest_match_info *info = rateest_info;
-
-       if (!(info->flags & XT_RATEEST_MATCH_REL))
-               info->flags |= XT_RATEEST_MATCH_ABS;
-}
-
-static void
-rateest_print_rate(u_int32_t rate, int numeric)
-{
-       double tmp = (double)rate*8;
-
-       if (numeric)
-               printf("%u ", rate);
-       else if (tmp >= 1000.0*1000000.0)
-               printf("%.0fMbit ", tmp/1000000.0);
-       else if (tmp >= 1000.0 * 1000.0)
-               printf("%.0fKbit ", tmp/1000.0);
-       else
-               printf("%.0fbit ", tmp);
-}
-
-static void
-rateest_print_mode(struct xt_rateest_match_info *info, const char *prefix)
-{
-       if (info->flags & XT_RATEEST_MATCH_INVERT)
-               printf("! ");
-
-       switch (info->mode) {
-       case XT_RATEEST_MATCH_EQ:
-               printf("%seq ", prefix);
-               break;
-       case XT_RATEEST_MATCH_LT:
-               printf("%slt ", prefix);
-               break;
-       case XT_RATEEST_MATCH_GT:
-               printf("%sgt ", prefix);
-               break;
-       default:
-               exit(1);
-       }
-}
-
-static void
-rateest_print(const void *ip, const struct xt_entry_match *match, int numeric)
-{
-       struct xt_rateest_match_info *info = (void *)match->data;
-
-       printf("rateest match ");
-
-       printf("%s ", info->name1);
-       if (info->flags & XT_RATEEST_MATCH_DELTA)
-               printf("delta ");
-
-       if (info->flags & XT_RATEEST_MATCH_BPS) {
-               printf("bps ");
-               if (info->flags & XT_RATEEST_MATCH_DELTA)
-                       rateest_print_rate(info->bps1, numeric);
-               if (info->flags & XT_RATEEST_MATCH_ABS) {
-                       rateest_print_mode(info, "");
-                       rateest_print_rate(info->bps2, numeric);
-               }
-       }
-       if (info->flags & XT_RATEEST_MATCH_PPS) {
-               printf("pps ");
-               if (info->flags & XT_RATEEST_MATCH_DELTA)
-                       printf("%u ", info->pps1);
-               if (info->flags & XT_RATEEST_MATCH_ABS) {
-                       rateest_print_mode(info, "");
-                       printf("%u ", info->pps2);
-               }
-       }
-
-       if (info->flags & XT_RATEEST_MATCH_REL) {
-               rateest_print_mode(info, "");
-
-               printf("%s ", info->name2);
-               if (info->flags & XT_RATEEST_MATCH_DELTA)
-                       printf("delta ");
-
-               if (info->flags & XT_RATEEST_MATCH_BPS) {
-                       printf("bps ");
-                       if (info->flags & XT_RATEEST_MATCH_DELTA)
-                               rateest_print_rate(info->bps2, numeric);
-               }
-               if (info->flags & XT_RATEEST_MATCH_PPS) {
-                       printf("pps ");
-                       if (info->flags & XT_RATEEST_MATCH_DELTA)
-                               printf("%u ", info->pps2);
-               }
-       }
-}
-
-static void
-rateest_save(const void *ip, const struct xt_entry_match *match)
-{
-       struct xt_rateest_match_info *info = (void *)match->data;
-
-       if (info->flags & XT_RATEEST_MATCH_REL) {
-               printf("--rateest1 %s ", info->name1);
-               if (info->flags & XT_RATEEST_MATCH_BPS)
-                       printf("--rateest-bps ");
-               if (info->flags & XT_RATEEST_MATCH_PPS)
-                       printf("--rateest-pps ");
-               rateest_print_mode(info, "--rateest-");
-               printf("--rateest2 %s ", info->name2);
-       } else {
-               printf("--rateest %s ", info->name1);
-               if (info->flags & XT_RATEEST_MATCH_BPS) {
-                       printf("--rateest-bps ");
-                       rateest_print_mode(info, "--rateest-");
-                       rateest_print_rate(info->bps2, 0);
-               }
-               if (info->flags & XT_RATEEST_MATCH_PPS) {
-                       printf("--rateest-pps ");
-                       rateest_print_mode(info, "--rateest-");
-                       printf("%u ", info->pps2);
-               }
-       }
-}
-
-static struct xtables_match rateest_mt_reg = {
-       .family         = AF_UNSPEC,
-       .name           = "rateest",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_rateest_match_info)),
-       .userspacesize  = XT_ALIGN(offsetof(struct xt_rateest_match_info, est1)),
-       .help           = rateest_help,
-       .parse          = rateest_parse,
-       .final_check    = rateest_final_check,
-       .print          = rateest_print,
-       .save           = rateest_save,
-       .extra_opts     = rateest_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&rateest_mt_reg);
-}
diff --git a/extensions/libxt_sctp.c b/extensions/libxt_sctp.c
deleted file mode 100644 (file)
index 653b601..0000000
+++ /dev/null
@@ -1,546 +0,0 @@
-/* Shared library add-on to iptables for SCTP matching
- *
- * (C) 2003 by Harald Welte <laforge@gnumonks.org>
- *
- * This program is distributed under the terms of GNU GPL v2, 1991
- *
- * libipt_ecn.c borrowed heavily from libipt_dscp.c
- *
- */
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <netdb.h>
-#include <ctype.h>
-
-#include <xtables.h>
-
-#ifndef ARRAY_SIZE
-#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
-#endif
-
-#include <linux/netfilter/xt_sctp.h>
-
-/* Some ZS!#@:$%*#$! has replaced the ELEMCOUNT macro in ipt_sctp.h with
- * ARRAY_SIZE without noticing that this file is used from userserspace,
- * and userspace doesn't have ARRAY_SIZE */
-
-#ifndef ELEMCOUNT
-#define ELEMCOUNT ARRAY_SIZE
-#endif
-
-#if 0
-#define DEBUGP(format, first...) printf(format, ##first)
-#define static
-#else
-#define DEBUGP(format, fist...) 
-#endif
-
-static void
-print_chunk(u_int32_t chunknum, int numeric);
-
-/* Initialize the match. */
-static void sctp_init(struct xt_entry_match *m)
-{
-       int i;
-       struct xt_sctp_info *einfo = (struct xt_sctp_info *)m->data;
-
-       memset(einfo, 0, sizeof(struct xt_sctp_info));
-
-       for (i = 0; i < XT_NUM_SCTP_FLAGS; i++) {
-               einfo->flag_info[i].chunktype = -1;
-       }
-}
-
-static void sctp_help(void)
-{
-       printf(
-"sctp match options\n"
-" --source-port [!] port[:port]                          match source port(s)\n"
-" --sport ...\n"
-" --destination-port [!] port[:port]                     match destination port(s)\n"
-" --dport ...\n" 
-" --chunk-types [!] (all|any|none) (chunktype[:flags])+        match if all, any or none of\n"
-"                                                      chunktypes are present\n"
-"chunktypes - DATA INIT INIT_ACK SACK HEARTBEAT HEARTBEAT_ACK ABORT SHUTDOWN SHUTDOWN_ACK ERROR COOKIE_ECHO COOKIE_ACK ECN_ECNE ECN_CWR SHUTDOWN_COMPLETE ASCONF ASCONF_ACK ALL NONE\n");
-}
-
-static const struct option sctp_opts[] = {
-       { .name = "source-port", .has_arg = 1, .val = '1' },
-       { .name = "sport", .has_arg = 1, .val = '1' },
-       { .name = "destination-port", .has_arg = 1, .val = '2' },
-       { .name = "dport", .has_arg = 1, .val = '2' },
-       { .name = "chunk-types", .has_arg = 1, .val = '3' },
-       { .name = NULL }
-};
-
-static void
-parse_sctp_ports(const char *portstring, 
-                u_int16_t *ports)
-{
-       char *buffer;
-       char *cp;
-
-       buffer = strdup(portstring);
-       DEBUGP("%s\n", portstring);
-       if ((cp = strchr(buffer, ':')) == NULL) {
-               ports[0] = ports[1] = parse_port(buffer, "sctp");
-       }
-       else {
-               *cp = '\0';
-               cp++;
-
-               ports[0] = buffer[0] ? parse_port(buffer, "sctp") : 0;
-               ports[1] = cp[0] ? parse_port(cp, "sctp") : 0xFFFF;
-
-               if (ports[0] > ports[1])
-                       exit_error(PARAMETER_PROBLEM,
-                                  "invalid portrange (min > max)");
-       }
-       free(buffer);
-}
-
-struct sctp_chunk_names {
-       const char *name;
-       unsigned int chunk_type;
-       const char *valid_flags;
-};
-
-/*'ALL' and 'NONE' will be treated specially. */
-static const struct sctp_chunk_names sctp_chunk_names[]
-= { { .name = "DATA",          .chunk_type = 0,   .valid_flags = "-----UBE"},
-    { .name = "INIT",          .chunk_type = 1,   .valid_flags = "--------"},
-    { .name = "INIT_ACK",      .chunk_type = 2,   .valid_flags = "--------"},
-    { .name = "SACK",          .chunk_type = 3,   .valid_flags = "--------"},
-    { .name = "HEARTBEAT",     .chunk_type = 4,   .valid_flags = "--------"},
-    { .name = "HEARTBEAT_ACK", .chunk_type = 5,   .valid_flags = "--------"},
-    { .name = "ABORT",         .chunk_type = 6,   .valid_flags = "-------T"},
-    { .name = "SHUTDOWN",      .chunk_type = 7,   .valid_flags = "--------"},
-    { .name = "SHUTDOWN_ACK",  .chunk_type = 8,   .valid_flags = "--------"},
-    { .name = "ERROR",         .chunk_type = 9,   .valid_flags = "--------"},
-    { .name = "COOKIE_ECHO",   .chunk_type = 10,  .valid_flags = "--------"},
-    { .name = "COOKIE_ACK",    .chunk_type = 11,  .valid_flags = "--------"},
-    { .name = "ECN_ECNE",      .chunk_type = 12,  .valid_flags = "--------"},
-    { .name = "ECN_CWR",       .chunk_type = 13,  .valid_flags = "--------"},
-    { .name = "SHUTDOWN_COMPLETE", .chunk_type = 14,  .valid_flags = "-------T"},
-    { .name = "ASCONF",                .chunk_type = 193,  .valid_flags = "--------"},
-    { .name = "ASCONF_ACK",    .chunk_type = 128,  .valid_flags = "--------"},
-};
-
-static void
-save_chunk_flag_info(struct xt_sctp_flag_info *flag_info,
-                    int *flag_count,
-                    int chunktype, 
-                    int bit, 
-                    int set)
-{
-       int i;
-
-       for (i = 0; i < *flag_count; i++) {
-               if (flag_info[i].chunktype == chunktype) {
-                       DEBUGP("Previous match found\n");
-                       flag_info[i].chunktype = chunktype;
-                       flag_info[i].flag_mask |= (1 << bit);
-                       if (set) {
-                               flag_info[i].flag |= (1 << bit);
-                       }
-
-                       return;
-               }
-       }
-       
-       if (*flag_count == XT_NUM_SCTP_FLAGS) {
-               exit_error (PARAMETER_PROBLEM,
-                       "Number of chunk types with flags exceeds currently allowed limit."
-                       "Increasing this limit involves changing IPT_NUM_SCTP_FLAGS and"
-                       "recompiling both the kernel space and user space modules\n");
-       }
-
-       flag_info[*flag_count].chunktype = chunktype;
-       flag_info[*flag_count].flag_mask |= (1 << bit);
-       if (set) {
-               flag_info[*flag_count].flag |= (1 << bit);
-       }
-       (*flag_count)++;
-}
-
-static void
-parse_sctp_chunk(struct xt_sctp_info *einfo, 
-                const char *chunks)
-{
-       char *ptr;
-       char *buffer;
-       unsigned int i, j;
-       int found = 0;
-       char *chunk_flags;
-
-       buffer = strdup(chunks);
-       DEBUGP("Buffer: %s\n", buffer);
-
-       SCTP_CHUNKMAP_RESET(einfo->chunkmap);
-
-       if (!strcasecmp(buffer, "ALL")) {
-               SCTP_CHUNKMAP_SET_ALL(einfo->chunkmap);
-               goto out;
-       }
-       
-       if (!strcasecmp(buffer, "NONE")) {
-               SCTP_CHUNKMAP_RESET(einfo->chunkmap);
-               goto out;
-       }
-
-       for (ptr = strtok(buffer, ","); ptr; ptr = strtok(NULL, ",")) {
-               found = 0;
-               DEBUGP("Next Chunk type %s\n", ptr);
-               
-               if ((chunk_flags = strchr(ptr, ':')) != NULL) {
-                       *chunk_flags++ = 0;
-               }
-               
-               for (i = 0; i < ELEMCOUNT(sctp_chunk_names); i++) {
-                       if (strcasecmp(sctp_chunk_names[i].name, ptr) == 0) {
-                               DEBUGP("Chunk num %d\n", sctp_chunk_names[i].chunk_type);
-                               SCTP_CHUNKMAP_SET(einfo->chunkmap, 
-                                       sctp_chunk_names[i].chunk_type);
-                               found = 1;
-                               break;
-                       }
-               }
-               if (!found)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Unknown sctp chunk `%s'", ptr);
-
-               if (chunk_flags) {
-                       DEBUGP("Chunk flags %s\n", chunk_flags);
-                       for (j = 0; j < strlen(chunk_flags); j++) {
-                               char *p;
-                               int bit;
-
-                               if ((p = strchr(sctp_chunk_names[i].valid_flags, 
-                                               toupper(chunk_flags[j]))) != NULL) {
-                                       bit = p - sctp_chunk_names[i].valid_flags;
-                                       bit = 7 - bit;
-
-                                       save_chunk_flag_info(einfo->flag_info, 
-                                               &(einfo->flag_count), i, bit, 
-                                               isupper(chunk_flags[j]));
-                               } else {
-                                       exit_error(PARAMETER_PROBLEM, 
-                                               "Invalid flags for chunk type %d\n", i);
-                               }
-                       }
-               }
-       }
-out:
-       free(buffer);
-}
-
-static void
-parse_sctp_chunks(struct xt_sctp_info *einfo,
-                 const char *match_type,
-                 const char *chunks)
-{
-       DEBUGP("Match type: %s Chunks: %s\n", match_type, chunks);
-       if (!strcasecmp(match_type, "ANY")) {
-               einfo->chunk_match_type = SCTP_CHUNK_MATCH_ANY;
-       } else  if (!strcasecmp(match_type, "ALL")) {
-               einfo->chunk_match_type = SCTP_CHUNK_MATCH_ALL;
-       } else  if (!strcasecmp(match_type, "ONLY")) {
-               einfo->chunk_match_type = SCTP_CHUNK_MATCH_ONLY;
-       } else {
-               exit_error (PARAMETER_PROBLEM, 
-                       "Match type has to be one of \"ALL\", \"ANY\" or \"ONLY\"");
-       }
-
-       SCTP_CHUNKMAP_RESET(einfo->chunkmap);
-       parse_sctp_chunk(einfo, chunks);
-}
-
-static int
-sctp_parse(int c, char **argv, int invert, unsigned int *flags,
-           const void *entry, struct xt_entry_match **match)
-{
-       struct xt_sctp_info *einfo
-               = (struct xt_sctp_info *)(*match)->data;
-
-       switch (c) {
-       case '1':
-               if (*flags & XT_SCTP_SRC_PORTS)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--source-port' allowed");
-               einfo->flags |= XT_SCTP_SRC_PORTS;
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_sctp_ports(argv[optind-1], einfo->spts);
-               if (invert)
-                       einfo->invflags |= XT_SCTP_SRC_PORTS;
-               *flags |= XT_SCTP_SRC_PORTS;
-               break;
-
-       case '2':
-               if (*flags & XT_SCTP_DEST_PORTS)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--destination-port' allowed");
-               einfo->flags |= XT_SCTP_DEST_PORTS;
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_sctp_ports(argv[optind-1], einfo->dpts);
-               if (invert)
-                       einfo->invflags |= XT_SCTP_DEST_PORTS;
-               *flags |= XT_SCTP_DEST_PORTS;
-               break;
-
-       case '3':
-               if (*flags & XT_SCTP_CHUNK_TYPES)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--chunk-types' allowed");
-               check_inverse(optarg, &invert, &optind, 0);
-
-               if (!argv[optind] 
-                   || argv[optind][0] == '-' || argv[optind][0] == '!')
-                       exit_error(PARAMETER_PROBLEM,
-                                  "--chunk-types requires two args");
-
-               einfo->flags |= XT_SCTP_CHUNK_TYPES;
-               parse_sctp_chunks(einfo, argv[optind-1], argv[optind]);
-               if (invert)
-                       einfo->invflags |= XT_SCTP_CHUNK_TYPES;
-               optind++;
-               *flags |= XT_SCTP_CHUNK_TYPES;
-               break;
-
-       default:
-               return 0;
-       }
-       return 1;
-}
-
-static char *
-port_to_service(int port)
-{
-       struct servent *service;
-
-       if ((service = getservbyport(htons(port), "sctp")))
-               return service->s_name;
-
-       return NULL;
-}
-
-static void
-print_port(u_int16_t port, int numeric)
-{
-       char *service;
-
-       if (numeric || (service = port_to_service(port)) == NULL)
-               printf("%u", port);
-       else
-               printf("%s", service);
-}
-
-static void
-print_ports(const char *name, u_int16_t min, u_int16_t max,
-           int invert, int numeric)
-{
-       const char *inv = invert ? "!" : "";
-
-       if (min != 0 || max != 0xFFFF || invert) {
-               printf("%s", name);
-               if (min == max) {
-                       printf(":%s", inv);
-                       print_port(min, numeric);
-               } else {
-                       printf("s:%s", inv);
-                       print_port(min, numeric);
-                       printf(":");
-                       print_port(max, numeric);
-               }
-               printf(" ");
-       }
-}
-
-static void
-print_chunk_flags(u_int32_t chunknum, u_int8_t chunk_flags, u_int8_t chunk_flags_mask)
-{
-       int i;
-
-       DEBUGP("type: %d\tflags: %x\tflag mask: %x\n", chunknum, chunk_flags, 
-                       chunk_flags_mask);
-
-       if (chunk_flags_mask) {
-               printf(":");
-       }
-
-       for (i = 7; i >= 0; i--) {
-               if (chunk_flags_mask & (1 << i)) {
-                       if (chunk_flags & (1 << i)) {
-                               printf("%c", sctp_chunk_names[chunknum].valid_flags[7-i]);
-                       } else {
-                               printf("%c", tolower(sctp_chunk_names[chunknum].valid_flags[7-i]));
-                       }
-               }
-       }
-}
-
-static void
-print_chunk(u_int32_t chunknum, int numeric)
-{
-       if (numeric) {
-               printf("0x%04X", chunknum);
-       }
-       else {
-               int i;
-
-               for (i = 0; i < ELEMCOUNT(sctp_chunk_names); i++) {
-                       if (sctp_chunk_names[i].chunk_type == chunknum)
-                               printf("%s", sctp_chunk_names[chunknum].name);
-               }
-       }
-}
-
-static void
-print_chunks(const struct xt_sctp_info *einfo, int numeric)
-{
-       u_int32_t chunk_match_type = einfo->chunk_match_type;
-       const struct xt_sctp_flag_info *flag_info = einfo->flag_info;
-       int flag_count = einfo->flag_count;
-       int i, j;
-       int flag;
-
-       switch (chunk_match_type) {
-               case SCTP_CHUNK_MATCH_ANY:      printf("any "); break;
-               case SCTP_CHUNK_MATCH_ALL:      printf("all "); break;
-               case SCTP_CHUNK_MATCH_ONLY:     printf("only "); break;
-               default:        printf("Never reach herer\n"); break;
-       }
-
-       if (SCTP_CHUNKMAP_IS_CLEAR(einfo->chunkmap)) {
-               printf("NONE ");
-               goto out;
-       }
-       
-       if (SCTP_CHUNKMAP_IS_ALL_SET(einfo->chunkmap)) {
-               printf("ALL ");
-               goto out;
-       }
-       
-       flag = 0;
-       for (i = 0; i < 256; i++) {
-               if (SCTP_CHUNKMAP_IS_SET(einfo->chunkmap, i)) {
-                       if (flag)
-                               printf(",");
-                       flag = 1;
-                       print_chunk(i, numeric);
-                       for (j = 0; j < flag_count; j++) {
-                               if (flag_info[j].chunktype == i) {
-                                       print_chunk_flags(i, flag_info[j].flag,
-                                               flag_info[j].flag_mask);
-                               }
-                       }
-               }
-       }
-
-       if (flag)
-               printf(" ");
-out:
-       return;
-}
-
-/* Prints out the matchinfo. */
-static void
-sctp_print(const void *ip, const struct xt_entry_match *match, int numeric)
-{
-       const struct xt_sctp_info *einfo =
-               (const struct xt_sctp_info *)match->data;
-
-       printf("sctp ");
-
-       if (einfo->flags & XT_SCTP_SRC_PORTS) {
-               print_ports("spt", einfo->spts[0], einfo->spts[1],
-                       einfo->invflags & XT_SCTP_SRC_PORTS,
-                       numeric);
-       }
-
-       if (einfo->flags & XT_SCTP_DEST_PORTS) {
-               print_ports("dpt", einfo->dpts[0], einfo->dpts[1],
-                       einfo->invflags & XT_SCTP_DEST_PORTS,
-                       numeric);
-       }
-
-       if (einfo->flags & XT_SCTP_CHUNK_TYPES) {
-               /* FIXME: print_chunks() is used in save() where the printing of '!'
-               s taken care of, so we need to do that here as well */
-               if (einfo->invflags & XT_SCTP_CHUNK_TYPES) {
-                       printf("! ");
-               }
-               print_chunks(einfo, numeric);
-       }
-}
-
-/* Saves the union ipt_matchinfo in parsable form to stdout. */
-static void sctp_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct xt_sctp_info *einfo =
-               (const struct xt_sctp_info *)match->data;
-
-       if (einfo->flags & XT_SCTP_SRC_PORTS) {
-               if (einfo->invflags & XT_SCTP_SRC_PORTS)
-                       printf("! ");
-               if (einfo->spts[0] != einfo->spts[1])
-                       printf("--sport %u:%u ", 
-                              einfo->spts[0], einfo->spts[1]);
-               else
-                       printf("--sport %u ", einfo->spts[0]);
-       }
-
-       if (einfo->flags & XT_SCTP_DEST_PORTS) {
-               if (einfo->invflags & XT_SCTP_DEST_PORTS)
-                       printf("! ");
-               if (einfo->dpts[0] != einfo->dpts[1])
-                       printf("--dport %u:%u ",
-                              einfo->dpts[0], einfo->dpts[1]);
-               else
-                       printf("--dport %u ", einfo->dpts[0]);
-       }
-
-       if (einfo->flags & XT_SCTP_CHUNK_TYPES) {
-               if (einfo->invflags & XT_SCTP_CHUNK_TYPES)
-                       printf("! ");
-               printf("--chunk-types ");
-
-               print_chunks(einfo, 0);
-       }
-}
-
-static struct xtables_match sctp_match = {
-       .name           = "sctp",
-       .family         = AF_INET,
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_sctp_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_sctp_info)),
-       .help           = sctp_help,
-       .init           = sctp_init,
-       .parse          = sctp_parse,
-       .print          = sctp_print,
-       .save           = sctp_save,
-       .extra_opts     = sctp_opts,
-};
-
-static struct xtables_match sctp_match6 = {
-       .name           = "sctp",
-       .family         = AF_INET6,
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_sctp_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_sctp_info)),
-       .help           = sctp_help,
-       .init           = sctp_init,
-       .parse          = sctp_parse,
-       .print          = sctp_print,
-       .save           = sctp_save,
-       .extra_opts     = sctp_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&sctp_match);
-       xtables_register_match(&sctp_match6);
-}
-
diff --git a/extensions/libxt_sctp.man b/extensions/libxt_sctp.man
deleted file mode 100644 (file)
index 5d7a477..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-.TP
-[\fB!\fP] \fB--source-port\fP,\fB--sport\fP \fIport\fP[\fB:\fP\fIport\fP]
-.TP
-[\fB!\fP] \fB--destination-port\fP,\fB--dport\fP \fIport\fP[\fB:\fP\fIport\fP]
-.TP
-[\fB!\fP] \fB--chunk-types\fP {\fBall\fP|\fBany\fP|\fBonly\fP} \fIchunktype\fP[\fB:\fP\fIflags\fP] [...]
-The flag letter in upper case indicates that the flag is to match if set,
-in the lower case indicates to match if unset.
-
-Chunk types: DATA INIT INIT_ACK SACK HEARTBEAT HEARTBEAT_ACK ABORT SHUTDOWN SHUTDOWN_ACK ERROR COOKIE_ECHO COOKIE_ACK ECN_ECNE ECN_CWR SHUTDOWN_COMPLETE ASCONF ASCONF_ACK
-
-chunk type            available flags      
-.br
-DATA                  U B E u b e         
-.br
-ABORT                 T t                 
-.br
-SHUTDOWN_COMPLETE     T t                 
-
-(lowercase means flag should be "off", uppercase means "on")
-.P
-Examples:
-
-iptables -A INPUT -p sctp --dport 80 -j DROP
-
-iptables -A INPUT -p sctp --chunk-types any DATA,INIT -j DROP
-
-iptables -A INPUT -p sctp --chunk-types any DATA:Be -j ACCEPT
diff --git a/extensions/libxt_standard.c b/extensions/libxt_standard.c
deleted file mode 100644 (file)
index 505f87d..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Shared library add-on to iptables for standard target support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <limits.h>
-#include <getopt.h>
-#include <xtables.h>
-
-/* Function which prints out usage message. */
-static void standard_help(void)
-{
-       printf(
-"standard match options:\n"
-"(If target is DROP, ACCEPT, RETURN or nothing)\n");
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int standard_parse(int c, char **argv, int invert, unsigned int *flags,
-                          const void *entry, struct xt_entry_target **target)
-{
-       return 0;
-}
-
-static struct xtables_target standard_target = {
-       .family         = AF_UNSPEC,
-       .name           = "standard",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(int)),
-       .userspacesize  = XT_ALIGN(sizeof(int)),
-       .help           = standard_help,
-       .parse          = standard_parse,
-};
-
-void _init(void)
-{
-       xtables_register_target(&standard_target);
-}
diff --git a/extensions/libxt_state.c b/extensions/libxt_state.c
deleted file mode 100644 (file)
index c37fd70..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-/* Shared library add-on to iptables to add state tracking support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <xtables.h>
-#include <linux/netfilter/nf_conntrack_common.h>
-#include <linux/netfilter/xt_state.h>
-
-#ifndef XT_STATE_UNTRACKED
-#define XT_STATE_UNTRACKED (1 << (IP_CT_NUMBER + 1))
-#endif
-
-/* Function which prints out usage message. */
-static void
-state_help(void)
-{
-       printf(
-"state match options:\n"
-" [!] --state [INVALID|ESTABLISHED|NEW|RELATED|UNTRACKED][,...]\n"
-"                              State(s) to match\n");
-}
-
-static const struct option state_opts[] = {
-       { "state", 1, NULL, '1' },
-       { .name = NULL }
-};
-
-static int
-state_parse_state(const char *state, size_t len, struct xt_state_info *sinfo)
-{
-       if (strncasecmp(state, "INVALID", len) == 0)
-               sinfo->statemask |= XT_STATE_INVALID;
-       else if (strncasecmp(state, "NEW", len) == 0)
-               sinfo->statemask |= XT_STATE_BIT(IP_CT_NEW);
-       else if (strncasecmp(state, "ESTABLISHED", len) == 0)
-               sinfo->statemask |= XT_STATE_BIT(IP_CT_ESTABLISHED);
-       else if (strncasecmp(state, "RELATED", len) == 0)
-               sinfo->statemask |= XT_STATE_BIT(IP_CT_RELATED);
-       else if (strncasecmp(state, "UNTRACKED", len) == 0)
-               sinfo->statemask |= XT_STATE_UNTRACKED;
-       else
-               return 0;
-       return 1;
-}
-
-static void
-state_parse_states(const char *arg, struct xt_state_info *sinfo)
-{
-       const char *comma;
-
-       while ((comma = strchr(arg, ',')) != NULL) {
-               if (comma == arg || !state_parse_state(arg, comma-arg, sinfo))
-                       exit_error(PARAMETER_PROBLEM, "Bad state `%s'", arg);
-               arg = comma+1;
-       }
-
-       if (strlen(arg) == 0 || !state_parse_state(arg, strlen(arg), sinfo))
-               exit_error(PARAMETER_PROBLEM, "Bad state `%s'", arg);
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int
-state_parse(int c, char **argv, int invert, unsigned int *flags,
-      const void *entry,
-      struct xt_entry_match **match)
-{
-       struct xt_state_info *sinfo = (struct xt_state_info *)(*match)->data;
-
-       switch (c) {
-       case '1':
-               check_inverse(optarg, &invert, &optind, 0);
-
-               state_parse_states(argv[optind-1], sinfo);
-               if (invert)
-                       sinfo->statemask = ~sinfo->statemask;
-               *flags = 1;
-               break;
-
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-/* Final check; must have specified --state. */
-static void state_final_check(unsigned int flags)
-{
-       if (!flags)
-               exit_error(PARAMETER_PROBLEM, "You must specify `--state'");
-}
-
-static void state_print_state(unsigned int statemask)
-{
-       const char *sep = "";
-
-       if (statemask & XT_STATE_INVALID) {
-               printf("%sINVALID", sep);
-               sep = ",";
-       }
-       if (statemask & XT_STATE_BIT(IP_CT_NEW)) {
-               printf("%sNEW", sep);
-               sep = ",";
-       }
-       if (statemask & XT_STATE_BIT(IP_CT_RELATED)) {
-               printf("%sRELATED", sep);
-               sep = ",";
-       }
-       if (statemask & XT_STATE_BIT(IP_CT_ESTABLISHED)) {
-               printf("%sESTABLISHED", sep);
-               sep = ",";
-       }
-       if (statemask & XT_STATE_UNTRACKED) {
-               printf("%sUNTRACKED", sep);
-               sep = ",";
-       }
-       printf(" ");
-}
-
-/* Prints out the matchinfo. */
-static void
-state_print(const void *ip,
-      const struct xt_entry_match *match,
-      int numeric)
-{
-       struct xt_state_info *sinfo = (struct xt_state_info *)match->data;
-
-       printf("state ");
-       state_print_state(sinfo->statemask);
-}
-
-/* Saves the matchinfo in parsable form to stdout. */
-static void state_save(const void *ip, const struct xt_entry_match *match)
-{
-       struct xt_state_info *sinfo = (struct xt_state_info *)match->data;
-
-       printf("--state ");
-       state_print_state(sinfo->statemask);
-}
-
-static struct xtables_match state_match = { 
-       .family         = AF_INET,
-       .name           = "state",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_state_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_state_info)),
-       .help           = state_help,
-       .parse          = state_parse,
-       .final_check    = state_final_check,
-       .print          = state_print,
-       .save           = state_save,
-       .extra_opts     = state_opts,
-};
-
-static struct xtables_match state_match6 = { 
-       .family         = AF_INET6,
-       .name           = "state",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_state_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_state_info)),
-       .help           = state_help,
-       .parse          = state_parse,
-       .final_check    = state_final_check,
-       .print          = state_print,
-       .save           = state_save,
-       .extra_opts     = state_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&state_match);
-       xtables_register_match(&state_match6);
-}
diff --git a/extensions/libxt_state.man b/extensions/libxt_state.man
deleted file mode 100644 (file)
index 8e943c3..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-This module, when combined with connection tracking, allows access to
-the connection tracking state for this packet.
-.TP
-[\fB!\fP] \fB--state\fP \fIstate\fP
-Where state is a comma separated list of the connection states to
-match.  Possible states are
-.B INVALID
-meaning that the packet could not be identified for some reason which
-includes running out of memory and ICMP errors which don't correspond to any
-known connection,
-.B ESTABLISHED
-meaning that the packet is associated with a connection which has seen
-packets in both directions,
-.B NEW
-meaning that the packet has started a new connection, or otherwise
-associated with a connection which has not seen packets in both
-directions, and
-.B RELATED
-meaning that the packet is starting a new connection, but is
-associated with an existing connection, such as an FTP data transfer,
-or an ICMP error.
diff --git a/extensions/libxt_statistic.c b/extensions/libxt_statistic.c
deleted file mode 100644 (file)
index 114b419..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <getopt.h>
-
-#include <xtables.h>
-#include <linux/netfilter/xt_statistic.h>
-
-static void statistic_help(void)
-{
-       printf(
-"statistic match options:\n"
-" --mode mode                    Match mode (random, nth)\n"
-" random mode:\n"
-" --probability p               Probability\n"
-" nth mode:\n"
-" --every n                     Match every nth packet\n"
-" --packet p                    Initial counter value (0 <= p <= n-1, default 0)\n");
-}
-
-static const struct option statistic_opts[] = {
-       { "mode", 1, NULL, '1' },
-       { "probability", 1, NULL, '2' },
-       { "every", 1, NULL, '3' },
-       { "packet", 1, NULL, '4' },
-       { .name = NULL }
-};
-
-static struct xt_statistic_info *global_info;
-
-static void statistic_mt_init(struct xt_entry_match *match)
-{
-       global_info = (void *)match->data;
-}
-
-static int
-statistic_parse(int c, char **argv, int invert, unsigned int *flags,
-                const void *entry, struct xt_entry_match **match)
-{
-       struct xt_statistic_info *info = (void *)(*match)->data;
-       double prob;
-
-       if (invert)
-               info->flags |= XT_STATISTIC_INVERT;
-
-       switch (c) {
-       case '1':
-               if (*flags & 0x1)
-                       exit_error(PARAMETER_PROBLEM, "double --mode");
-               if (!strcmp(optarg, "random"))
-                       info->mode = XT_STATISTIC_MODE_RANDOM;
-               else if (!strcmp(optarg, "nth"))
-                       info->mode = XT_STATISTIC_MODE_NTH;
-               else
-                       exit_error(PARAMETER_PROBLEM, "Bad mode `%s'", optarg);
-               *flags |= 0x1;
-               break;
-       case '2':
-               if (*flags & 0x2)
-                       exit_error(PARAMETER_PROBLEM, "double --probability");
-               prob = atof(optarg);
-               if (prob < 0 || prob > 1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "--probability must be between 0 and 1");
-               info->u.random.probability = 0x80000000 * prob;
-               *flags |= 0x2;
-               break;
-       case '3':
-               if (*flags & 0x4)
-                       exit_error(PARAMETER_PROBLEM, "double --every");
-               if (string_to_number(optarg, 0, 0xFFFFFFFF,
-                                    &info->u.nth.every) == -1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "cannot parse --every `%s'", optarg);
-               if (info->u.nth.every == 0)
-                       exit_error(PARAMETER_PROBLEM, "--every cannot be 0");
-               info->u.nth.every--;
-               *flags |= 0x4;
-               break;
-       case '4':
-               if (*flags & 0x8)
-                       exit_error(PARAMETER_PROBLEM, "double --packet");
-               if (string_to_number(optarg, 0, 0xFFFFFFFF,
-                                    &info->u.nth.packet) == -1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "cannot parse --packet `%s'", optarg);
-               *flags |= 0x8;
-               break;
-       default:
-               return 0;
-       }
-       return 1;
-}
-
-/* Final check; must have specified --mark. */
-static void statistic_check(unsigned int flags)
-{
-       if (!(flags & 0x1))
-               exit_error(PARAMETER_PROBLEM, "no mode specified");
-       if ((flags & 0x2) && (flags & (0x4 | 0x8)))
-               exit_error(PARAMETER_PROBLEM,
-                          "both nth and random parameters given");
-       if (flags & 0x2 && global_info->mode != XT_STATISTIC_MODE_RANDOM)
-               exit_error(PARAMETER_PROBLEM,
-                          "--probability can only be used in random mode");
-       if (flags & 0x4 && global_info->mode != XT_STATISTIC_MODE_NTH)
-               exit_error(PARAMETER_PROBLEM,
-                          "--every can only be used in nth mode");
-       if (flags & 0x8 && global_info->mode != XT_STATISTIC_MODE_NTH)
-               exit_error(PARAMETER_PROBLEM,
-                          "--packet can only be used in nth mode");
-       if ((flags & 0x8) && !(flags & 0x4))
-               exit_error(PARAMETER_PROBLEM,
-                          "--packet can only be used with --every");
-       /* at this point, info->u.nth.every have been decreased. */
-       if (global_info->u.nth.packet > global_info->u.nth.every)
-               exit_error(PARAMETER_PROBLEM,
-                         "the --packet p must be 0 <= p <= n-1");
-
-
-       global_info->u.nth.count = global_info->u.nth.every -
-                                  global_info->u.nth.packet;
-}
-
-/* Prints out the matchinfo. */
-static void print_match(const struct xt_statistic_info *info, char *prefix)
-{
-       if (info->flags & XT_STATISTIC_INVERT)
-               printf("! ");
-
-       switch (info->mode) {
-       case XT_STATISTIC_MODE_RANDOM:
-               printf("%smode random %sprobability %f ", prefix, prefix,
-                      1.0 * info->u.random.probability / 0x80000000);
-               break;
-       case XT_STATISTIC_MODE_NTH:
-               printf("%smode nth %severy %u ", prefix, prefix,
-                      info->u.nth.every + 1);
-               if (info->u.nth.packet)
-                       printf("%spacket %u ", prefix, info->u.nth.packet);
-               break;
-       }
-}
-
-static void
-statistic_print(const void *ip, const struct xt_entry_match *match, int numeric)
-{
-       struct xt_statistic_info *info = (struct xt_statistic_info *)match->data;
-
-       printf("statistic ");
-       print_match(info, "");
-}
-
-/* Saves the union ipt_matchinfo in parsable form to stdout. */
-static void statistic_save(const void *ip, const struct xt_entry_match *match)
-{
-       struct xt_statistic_info *info = (struct xt_statistic_info *)match->data;
-
-       print_match(info, "--");
-}
-
-static struct xtables_match statistic_match = {
-       .family         = AF_UNSPEC,
-       .name           = "statistic",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_statistic_info)),
-       .userspacesize  = offsetof(struct xt_statistic_info, u.nth.count),
-       .init           = statistic_mt_init,
-       .help           = statistic_help,
-       .parse          = statistic_parse,
-       .final_check    = statistic_check,
-       .print          = statistic_print,
-       .save           = statistic_save,
-       .extra_opts     = statistic_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&statistic_match);
-}
diff --git a/extensions/libxt_statistic.man b/extensions/libxt_statistic.man
deleted file mode 100644 (file)
index 007251d..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-This module matches packets based on some statistic condition.
-It supports two distinct modes settable with the 
-.B --mode
-option.
-.TP
-Supported options:
-.TP
-.BI "--mode " "mode"
-Set the matching mode of the matching rule, supported modes are
-.B random
-and
-.B nth. 
-.TP
-.BI "--probability " "p"
-Set the probability from 0 to 1 for a packet to be randomly
-matched. It works only with the
-.B random
-mode.
-.TP
-.BI "--every " "n"
-Match one packet every nth packet. It works only with the
-.B nth
-mode (see also the 
-.B --packet
-option).
-.TP
-.BI "--packet " "p"
-Set the initial counter value (0 <= p <= n-1, default 0) for the
-.B nth 
-mode.
diff --git a/extensions/libxt_string.c b/extensions/libxt_string.c
deleted file mode 100644 (file)
index 5eec44b..0000000
+++ /dev/null
@@ -1,345 +0,0 @@
-/* Shared library add-on to iptables to add string matching support. 
- * 
- * Copyright (C) 2000 Emmanuel Roger  <winfield@freegates.be>
- *
- * 2005-08-05 Pablo Neira Ayuso <pablo@eurodev.net>
- *     - reimplemented to use new string matching iptables match
- *     - add functionality to match packets by using window offsets
- *     - add functionality to select the string matching algorithm
- *
- * ChangeLog
- *     29.12.2003: Michael Rash <mbr@cipherdyne.org>
- *             Fixed iptables save/restore for ascii strings
- *             that contain space chars, and hex strings that
- *             contain embedded NULL chars.  Updated to print
- *             strings in hex mode if any non-printable char
- *             is contained within the string.
- *
- *     27.01.2001: Gianni Tedesco <gianni@ecsc.co.uk>
- *             Changed --tos to --string in save(). Also
- *             updated to work with slightly modified
- *             ipt_string_info.
- */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <ctype.h>
-#include <xtables.h>
-#include <stddef.h>
-#include <linux/netfilter/xt_string.h>
-
-/* Function which prints out usage message. */
-static void string_help(void)
-{
-       printf(
-"string match options:\n"
-"--from                       Offset to start searching from\n"
-"--to                         Offset to stop searching\n"
-"--algo                              Algorithm\n"
-"[!] --string string          Match a string in a packet\n"
-"[!] --hex-string string      Match a hex string in a packet\n");
-}
-
-static const struct option string_opts[] = {
-       { "from", 1, NULL, '1' },
-       { "to", 1, NULL, '2' },
-       { "algo", 1, NULL, '3' },
-       { "string", 1, NULL, '4' },
-       { "hex-string", 1, NULL, '5' },
-       { .name = NULL }
-};
-
-static void string_init(struct xt_entry_match *m)
-{
-       struct xt_string_info *i = (struct xt_string_info *) m->data;
-
-       if (i->to_offset == 0)
-               i->to_offset = (u_int16_t) ~0UL;
-}
-
-static void
-parse_string(const char *s, struct xt_string_info *info)
-{      
-       if (strlen(s) <= XT_STRING_MAX_PATTERN_SIZE) {
-               strncpy(info->pattern, s, XT_STRING_MAX_PATTERN_SIZE);
-               info->patlen = strlen(s);
-               return;
-       }
-       exit_error(PARAMETER_PROBLEM, "STRING too long `%s'", s);
-}
-
-static void
-parse_algo(const char *s, struct xt_string_info *info)
-{
-       if (strlen(s) <= XT_STRING_MAX_ALGO_NAME_SIZE) {
-               strncpy(info->algo, s, XT_STRING_MAX_ALGO_NAME_SIZE);
-               return;
-       }
-       exit_error(PARAMETER_PROBLEM, "ALGO too long `%s'", s);
-}
-
-static void
-parse_hex_string(const char *s, struct xt_string_info *info)
-{
-       int i=0, slen, sindex=0, schar;
-       short hex_f = 0, literal_f = 0;
-       char hextmp[3];
-
-       slen = strlen(s);
-
-       if (slen == 0) {
-               exit_error(PARAMETER_PROBLEM,
-                       "STRING must contain at least one char");
-       }
-
-       while (i < slen) {
-               if (s[i] == '\\' && !hex_f) {
-                       literal_f = 1;
-               } else if (s[i] == '\\') {
-                       exit_error(PARAMETER_PROBLEM,
-                               "Cannot include literals in hex data");
-               } else if (s[i] == '|') {
-                       if (hex_f)
-                               hex_f = 0;
-                       else {
-                               hex_f = 1;
-                               /* get past any initial whitespace just after the '|' */
-                               while (s[i+1] == ' ')
-                                       i++;
-                       }
-                       if (i+1 >= slen)
-                               break;
-                       else
-                               i++;  /* advance to the next character */
-               }
-
-               if (literal_f) {
-                       if (i+1 >= slen) {
-                               exit_error(PARAMETER_PROBLEM,
-                                       "Bad literal placement at end of string");
-                       }
-                       info->pattern[sindex] = s[i+1];
-                       i += 2;  /* skip over literal char */
-                       literal_f = 0;
-               } else if (hex_f) {
-                       if (i+1 >= slen) {
-                               exit_error(PARAMETER_PROBLEM,
-                                       "Odd number of hex digits");
-                       }
-                       if (i+2 >= slen) {
-                               /* must end with a "|" */
-                               exit_error(PARAMETER_PROBLEM, "Invalid hex block");
-                       }
-                       if (! isxdigit(s[i])) /* check for valid hex char */
-                               exit_error(PARAMETER_PROBLEM, "Invalid hex char `%c'", s[i]);
-                       if (! isxdigit(s[i+1])) /* check for valid hex char */
-                               exit_error(PARAMETER_PROBLEM, "Invalid hex char `%c'", s[i+1]);
-                       hextmp[0] = s[i];
-                       hextmp[1] = s[i+1];
-                       hextmp[2] = '\0';
-                       if (! sscanf(hextmp, "%x", &schar))
-                               exit_error(PARAMETER_PROBLEM,
-                                       "Invalid hex char `%c'", s[i]);
-                       info->pattern[sindex] = (char) schar;
-                       if (s[i+2] == ' ')
-                               i += 3;  /* spaces included in the hex block */
-                       else
-                               i += 2;
-               } else {  /* the char is not part of hex data, so just copy */
-                       info->pattern[sindex] = s[i];
-                       i++;
-               }
-               if (sindex > XT_STRING_MAX_PATTERN_SIZE)
-                       exit_error(PARAMETER_PROBLEM, "STRING too long `%s'", s);
-               sindex++;
-       }
-       info->patlen = sindex;
-}
-
-#define STRING 0x1
-#define ALGO   0x2
-#define FROM   0x4
-#define TO     0x8
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int
-string_parse(int c, char **argv, int invert, unsigned int *flags,
-             const void *entry, struct xt_entry_match **match)
-{
-       struct xt_string_info *stringinfo = (struct xt_string_info *)(*match)->data;
-
-       switch (c) {
-       case '1':
-               if (*flags & FROM)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can't specify multiple --from");
-               stringinfo->from_offset = atoi(optarg);
-               *flags |= FROM;
-               break;
-       case '2':
-               if (*flags & TO)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can't specify multiple --to");
-               stringinfo->to_offset = atoi(optarg);
-               *flags |= TO;
-               break;
-       case '3':
-               if (*flags & ALGO)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can't specify multiple --algo");
-               parse_algo(optarg, stringinfo);
-               *flags |= ALGO;
-               break;
-       case '4':
-               if (*flags & STRING)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can't specify multiple --string");
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_string(argv[optind-1], stringinfo);
-               if (invert)
-                       stringinfo->invert = 1;
-               stringinfo->patlen=strlen((char *)&stringinfo->pattern);
-               *flags |= STRING;
-               break;
-
-       case '5':
-               if (*flags & STRING)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can't specify multiple --hex-string");
-
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_hex_string(argv[optind-1], stringinfo);  /* sets length */
-               if (invert)
-                       stringinfo->invert = 1;
-               *flags |= STRING;
-               break;
-
-       default:
-               return 0;
-       }
-       return 1;
-}
-
-
-/* Final check; must have specified --string. */
-static void string_check(unsigned int flags)
-{
-       if (!(flags & STRING))
-               exit_error(PARAMETER_PROBLEM,
-                          "STRING match: You must specify `--string' or "
-                          "`--hex-string'");
-       if (!(flags & ALGO))
-               exit_error(PARAMETER_PROBLEM,
-                          "STRING match: You must specify `--algo'");
-}
-
-/* Test to see if the string contains non-printable chars or quotes */
-static unsigned short int
-is_hex_string(const char *str, const unsigned short int len)
-{
-       unsigned int i;
-       for (i=0; i < len; i++)
-               if (! isprint(str[i]))
-                       return 1;  /* string contains at least one non-printable char */
-       /* use hex output if the last char is a "\" */
-       if ((unsigned char) str[len-1] == 0x5c)
-               return 1;
-       return 0;
-}
-
-/* Print string with "|" chars included as one would pass to --hex-string */
-static void
-print_hex_string(const char *str, const unsigned short int len)
-{
-       unsigned int i;
-       /* start hex block */
-       printf("\"|");
-       for (i=0; i < len; i++) {
-               /* see if we need to prepend a zero */
-               if ((unsigned char) str[i] <= 0x0F)
-                       printf("0%x", (unsigned char) str[i]);
-               else
-                       printf("%x", (unsigned char) str[i]);
-       }
-       /* close hex block */
-       printf("|\" ");
-}
-
-static void
-print_string(const char *str, const unsigned short int len)
-{
-       unsigned int i;
-       printf("\"");
-       for (i=0; i < len; i++) {
-               if ((unsigned char) str[i] == 0x22)  /* escape any embedded quotes */
-                       printf("%c", 0x5c);
-               printf("%c", (unsigned char) str[i]);
-       }
-       printf("\" ");  /* closing space and quote */
-}
-
-/* Prints out the matchinfo. */
-static void
-string_print(const void *ip, const struct xt_entry_match *match, int numeric)
-{
-       const struct xt_string_info *info =
-           (const struct xt_string_info*) match->data;
-
-       if (is_hex_string(info->pattern, info->patlen)) {
-               printf("STRING match %s", (info->invert) ? "!" : "");
-               print_hex_string(info->pattern, info->patlen);
-       } else {
-               printf("STRING match %s", (info->invert) ? "!" : "");
-               print_string(info->pattern, info->patlen);
-       }
-       printf("ALGO name %s ", info->algo);
-       if (info->from_offset != 0)
-               printf("FROM %u ", info->from_offset);
-       if (info->to_offset != 0)
-               printf("TO %u ", info->to_offset);
-}
-
-
-/* Saves the union ipt_matchinfo in parseable form to stdout. */
-static void string_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct xt_string_info *info =
-           (const struct xt_string_info*) match->data;
-
-       if (is_hex_string(info->pattern, info->patlen)) {
-               printf("--hex-string %s", (info->invert) ? "! ": "");
-               print_hex_string(info->pattern, info->patlen);
-       } else {
-               printf("--string %s", (info->invert) ? "! ": "");
-               print_string(info->pattern, info->patlen);
-       }
-       printf("--algo %s ", info->algo);
-       if (info->from_offset != 0)
-               printf("--from %u ", info->from_offset);
-       if (info->to_offset != 0)
-               printf("--to %u ", info->to_offset);
-}
-
-
-static struct xtables_match string_match = {
-    .name              = "string",
-    .family            = AF_UNSPEC,
-    .version           = XTABLES_VERSION,
-    .size              = XT_ALIGN(sizeof(struct xt_string_info)),
-    .userspacesize     = offsetof(struct xt_string_info, config),
-    .help              = string_help,
-    .init              = string_init,
-    .parse             = string_parse,
-    .final_check       = string_check,
-    .print             = string_print,
-    .save              = string_save,
-    .extra_opts                = string_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&string_match);
-}
diff --git a/extensions/libxt_string.man b/extensions/libxt_string.man
deleted file mode 100644 (file)
index 01e15c2..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-This modules matches a given string by using some pattern matching strategy. It requires a linux kernel >= 2.6.14.
-.TP
-\fB--algo\fP {\fBbm\fP|\fBkmp\fP}
-Select the pattern matching strategy. (bm = Boyer-Moore, kmp = Knuth-Pratt-Morris)
-.TP
-.BI "--from " "offset"
-Set the offset from which it starts looking for any matching. If not passed, default is 0.
-.TP
-.BI "--to " "offset"
-Set the offset from which it starts looking for any matching. If not passed, default is the packet size.
-.TP
-[\fB!\fP] \fB--string\fP \fIpattern\fP
-Matches the given pattern.
-.TP
-[\fB!\fP] \fB--hex-string\fP \fIpattern\fP
-Matches the given pattern in hex notation.
diff --git a/extensions/libxt_tcp.c b/extensions/libxt_tcp.c
deleted file mode 100644 (file)
index 743c5a2..0000000
+++ /dev/null
@@ -1,418 +0,0 @@
-/* Shared library add-on to iptables to add TCP support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <xtables.h>
-#include <linux/netfilter/xt_tcpudp.h>
-
-/* Function which prints out usage message. */
-static void tcp_help(void)
-{
-       printf(
-"tcp match options:\n"
-" --tcp-flags [!] mask comp    match when TCP flags & mask == comp\n"
-"                              (Flags: SYN ACK FIN RST URG PSH ALL NONE)\n"
-"[!] --syn                     match when only SYN flag set\n"
-"                              (equivalent to --tcp-flags SYN,RST,ACK,FIN SYN)\n"
-" --source-port [!] port[:port]\n"
-" --sport ...\n"
-"                              match source port(s)\n"
-" --destination-port [!] port[:port]\n"
-" --dport ...\n"
-"                              match destination port(s)\n"
-" --tcp-option [!] number       match if TCP option set\n");
-}
-
-static const struct option tcp_opts[] = {
-       { "source-port", 1, NULL, '1' },
-       { "sport", 1, NULL, '1' }, /* synonym */
-       { "destination-port", 1, NULL, '2' },
-       { "dport", 1, NULL, '2' }, /* synonym */
-       { "syn", 0, NULL, '3' },
-       { "tcp-flags", 1, NULL, '4' },
-       { "tcp-option", 1, NULL, '5' },
-       { .name = NULL }
-};
-
-static void
-parse_tcp_ports(const char *portstring, u_int16_t *ports)
-{
-       char *buffer;
-       char *cp;
-
-       buffer = strdup(portstring);
-       if ((cp = strchr(buffer, ':')) == NULL)
-               ports[0] = ports[1] = parse_port(buffer, "tcp");
-       else {
-               *cp = '\0';
-               cp++;
-
-               ports[0] = buffer[0] ? parse_port(buffer, "tcp") : 0;
-               ports[1] = cp[0] ? parse_port(cp, "tcp") : 0xFFFF;
-
-               if (ports[0] > ports[1])
-                       exit_error(PARAMETER_PROBLEM,
-                                  "invalid portrange (min > max)");
-       }
-       free(buffer);
-}
-
-struct tcp_flag_names {
-       const char *name;
-       unsigned int flag;
-};
-
-static const struct tcp_flag_names tcp_flag_names[]
-= { { "FIN", 0x01 },
-    { "SYN", 0x02 },
-    { "RST", 0x04 },
-    { "PSH", 0x08 },
-    { "ACK", 0x10 },
-    { "URG", 0x20 },
-    { "ALL", 0x3F },
-    { "NONE", 0 },
-};
-
-static unsigned int
-parse_tcp_flag(const char *flags)
-{
-       unsigned int ret = 0;
-       char *ptr;
-       char *buffer;
-
-       buffer = strdup(flags);
-
-       for (ptr = strtok(buffer, ","); ptr; ptr = strtok(NULL, ",")) {
-               unsigned int i;
-               for (i = 0;
-                    i < sizeof(tcp_flag_names)/sizeof(struct tcp_flag_names);
-                    i++) {
-                       if (strcasecmp(tcp_flag_names[i].name, ptr) == 0) {
-                               ret |= tcp_flag_names[i].flag;
-                               break;
-                       }
-               }
-               if (i == sizeof(tcp_flag_names)/sizeof(struct tcp_flag_names))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Unknown TCP flag `%s'", ptr);
-               }
-
-       free(buffer);
-       return ret;
-}
-
-static void
-parse_tcp_flags(struct xt_tcp *tcpinfo,
-               const char *mask,
-               const char *cmp,
-               int invert)
-{
-       tcpinfo->flg_mask = parse_tcp_flag(mask);
-       tcpinfo->flg_cmp = parse_tcp_flag(cmp);
-
-       if (invert)
-               tcpinfo->invflags |= XT_TCP_INV_FLAGS;
-}
-
-static void
-parse_tcp_option(const char *option, u_int8_t *result)
-{
-       unsigned int ret;
-
-       if (string_to_number(option, 1, 255, &ret) == -1)
-               exit_error(PARAMETER_PROBLEM, "Bad TCP option `%s'", option);
-
-       *result = (u_int8_t)ret;
-}
-
-/* Initialize the match. */
-static void tcp_init(struct xt_entry_match *m)
-{
-       struct xt_tcp *tcpinfo = (struct xt_tcp *)m->data;
-
-       tcpinfo->spts[1] = tcpinfo->dpts[1] = 0xFFFF;
-}
-
-#define TCP_SRC_PORTS 0x01
-#define TCP_DST_PORTS 0x02
-#define TCP_FLAGS 0x04
-#define TCP_OPTION     0x08
-
-/* Function which parses command options; returns true if it
-   ate an option. */
-static int
-tcp_parse(int c, char **argv, int invert, unsigned int *flags,
-          const void *entry, struct xt_entry_match **match)
-{
-       struct xt_tcp *tcpinfo = (struct xt_tcp *)(*match)->data;
-
-       switch (c) {
-       case '1':
-               if (*flags & TCP_SRC_PORTS)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--source-port' allowed");
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_tcp_ports(argv[optind-1], tcpinfo->spts);
-               if (invert)
-                       tcpinfo->invflags |= XT_TCP_INV_SRCPT;
-               *flags |= TCP_SRC_PORTS;
-               break;
-
-       case '2':
-               if (*flags & TCP_DST_PORTS)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--destination-port' allowed");
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_tcp_ports(argv[optind-1], tcpinfo->dpts);
-               if (invert)
-                       tcpinfo->invflags |= XT_TCP_INV_DSTPT;
-               *flags |= TCP_DST_PORTS;
-               break;
-
-       case '3':
-               if (*flags & TCP_FLAGS)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one of `--syn' or `--tcp-flags' "
-                                  " allowed");
-               parse_tcp_flags(tcpinfo, "SYN,RST,ACK,FIN", "SYN", invert);
-               *flags |= TCP_FLAGS;
-               break;
-
-       case '4':
-               if (*flags & TCP_FLAGS)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one of `--syn' or `--tcp-flags' "
-                                  " allowed");
-               check_inverse(optarg, &invert, &optind, 0);
-
-               if (!argv[optind]
-                   || argv[optind][0] == '-' || argv[optind][0] == '!')
-                       exit_error(PARAMETER_PROBLEM,
-                                  "--tcp-flags requires two args.");
-
-               parse_tcp_flags(tcpinfo, argv[optind-1], argv[optind],
-                               invert);
-               optind++;
-               *flags |= TCP_FLAGS;
-               break;
-
-       case '5':
-               if (*flags & TCP_OPTION)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--tcp-option' allowed");
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_tcp_option(argv[optind-1], &tcpinfo->option);
-               if (invert)
-                       tcpinfo->invflags |= XT_TCP_INV_OPTION;
-               *flags |= TCP_OPTION;
-               break;
-
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static char *
-port_to_service(int port)
-{
-       struct servent *service;
-
-       if ((service = getservbyport(htons(port), "tcp")))
-               return service->s_name;
-
-       return NULL;
-}
-
-static void
-print_port(u_int16_t port, int numeric)
-{
-       char *service;
-
-       if (numeric || (service = port_to_service(port)) == NULL)
-               printf("%u", port);
-       else
-               printf("%s", service);
-}
-
-static void
-print_ports(const char *name, u_int16_t min, u_int16_t max,
-           int invert, int numeric)
-{
-       const char *inv = invert ? "!" : "";
-
-       if (min != 0 || max != 0xFFFF || invert) {
-               printf("%s", name);
-               if (min == max) {
-                       printf(":%s", inv);
-                       print_port(min, numeric);
-               } else {
-                       printf("s:%s", inv);
-                       print_port(min, numeric);
-                       printf(":");
-                       print_port(max, numeric);
-               }
-               printf(" ");
-       }
-}
-
-static void
-print_option(u_int8_t option, int invert, int numeric)
-{
-       if (option || invert)
-               printf("option=%s%u ", invert ? "!" : "", option);
-}
-
-static void
-print_tcpf(u_int8_t flags)
-{
-       int have_flag = 0;
-
-       while (flags) {
-               unsigned int i;
-
-               for (i = 0; (flags & tcp_flag_names[i].flag) == 0; i++);
-
-               if (have_flag)
-                       printf(",");
-               printf("%s", tcp_flag_names[i].name);
-               have_flag = 1;
-
-               flags &= ~tcp_flag_names[i].flag;
-       }
-
-       if (!have_flag)
-               printf("NONE");
-}
-
-static void
-print_flags(u_int8_t mask, u_int8_t cmp, int invert, int numeric)
-{
-       if (mask || invert) {
-               printf("flags:%s", invert ? "!" : "");
-               if (numeric)
-                       printf("0x%02X/0x%02X ", mask, cmp);
-               else {
-                       print_tcpf(mask);
-                       printf("/");
-                       print_tcpf(cmp);
-                       printf(" ");
-               }
-       }
-}
-
-/* Prints out the union ipt_matchinfo. */
-static void
-tcp_print(const void *ip, const struct xt_entry_match *match, int numeric)
-{
-       const struct xt_tcp *tcp = (struct xt_tcp *)match->data;
-
-       printf("tcp ");
-       print_ports("spt", tcp->spts[0], tcp->spts[1],
-                   tcp->invflags & XT_TCP_INV_SRCPT,
-                   numeric);
-       print_ports("dpt", tcp->dpts[0], tcp->dpts[1],
-                   tcp->invflags & XT_TCP_INV_DSTPT,
-                   numeric);
-       print_option(tcp->option,
-                    tcp->invflags & XT_TCP_INV_OPTION,
-                    numeric);
-       print_flags(tcp->flg_mask, tcp->flg_cmp,
-                   tcp->invflags & XT_TCP_INV_FLAGS,
-                   numeric);
-       if (tcp->invflags & ~XT_TCP_INV_MASK)
-               printf("Unknown invflags: 0x%X ",
-                      tcp->invflags & ~XT_TCP_INV_MASK);
-}
-
-/* Saves the union ipt_matchinfo in parsable form to stdout. */
-static void tcp_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct xt_tcp *tcpinfo = (struct xt_tcp *)match->data;
-
-       if (tcpinfo->spts[0] != 0
-           || tcpinfo->spts[1] != 0xFFFF) {
-               if (tcpinfo->invflags & XT_TCP_INV_SRCPT)
-                       printf("! ");
-               if (tcpinfo->spts[0]
-                   != tcpinfo->spts[1])
-                       printf("--sport %u:%u ",
-                              tcpinfo->spts[0],
-                              tcpinfo->spts[1]);
-               else
-                       printf("--sport %u ",
-                              tcpinfo->spts[0]);
-       }
-
-       if (tcpinfo->dpts[0] != 0
-           || tcpinfo->dpts[1] != 0xFFFF) {
-               if (tcpinfo->invflags & XT_TCP_INV_DSTPT)
-                       printf("! ");
-               if (tcpinfo->dpts[0]
-                   != tcpinfo->dpts[1])
-                       printf("--dport %u:%u ",
-                              tcpinfo->dpts[0],
-                              tcpinfo->dpts[1]);
-               else
-                       printf("--dport %u ",
-                              tcpinfo->dpts[0]);
-       }
-
-       if (tcpinfo->option
-           || (tcpinfo->invflags & XT_TCP_INV_OPTION)) {
-               if (tcpinfo->invflags & XT_TCP_INV_OPTION)
-                       printf("! ");
-               printf("--tcp-option %u ", tcpinfo->option);
-       }
-
-       if (tcpinfo->flg_mask
-           || (tcpinfo->invflags & XT_TCP_INV_FLAGS)) {
-               if (tcpinfo->invflags & XT_TCP_INV_FLAGS)
-                       printf("! ");
-               printf("--tcp-flags ");
-               if (tcpinfo->flg_mask != 0xFF) {
-                       print_tcpf(tcpinfo->flg_mask);
-               }
-               printf(" ");
-               print_tcpf(tcpinfo->flg_cmp);
-               printf(" ");
-       }
-}
-
-static struct xtables_match tcp_match = {
-       .family         = AF_INET,
-       .name           = "tcp",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_tcp)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_tcp)),
-       .help           = tcp_help,
-       .init           = tcp_init,
-       .parse          = tcp_parse,
-       .print          = tcp_print,
-       .save           = tcp_save,
-       .extra_opts     = tcp_opts,
-};
-
-static struct xtables_match tcp_match6 = {
-       .family         = AF_INET6,
-       .name           = "tcp",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_tcp)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_tcp)),
-       .help           = tcp_help,
-       .init           = tcp_init,
-       .parse          = tcp_parse,
-       .print          = tcp_print,
-       .save           = tcp_save,
-       .extra_opts     = tcp_opts,
-};
-
-void
-_init(void)
-{
-       xtables_register_match(&tcp_match);
-       xtables_register_match(&tcp_match6);
-}
diff --git a/extensions/libxt_tcp.man b/extensions/libxt_tcp.man
deleted file mode 100644 (file)
index b087fc9..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-These extensions can be used if `--protocol tcp' is specified. It
-provides the following options:
-.TP
-[\fB!\fP] \fB--source-port\fP,\fB--sport\fP \fIport\fP[\fB:\fP\fIport\fP]
-Source port or port range specification. This can either be a service
-name or a port number. An inclusive range can also be specified,
-using the format \fIport\fP\fB:\fP\fIport\fP.
-If the first port is omitted, "0" is assumed; if the last is omitted,
-"65535" is assumed.
-If the second port greater then the first they will be swapped.
-The flag
-.B --sport
-is a convenient alias for this option.
-.TP
-[\fB!\fP] \fB--destination-port\fP,\fB--dport\fP \fIport\fP[\fB,\fP\fIport\fP]
-Destination port or port range specification.  The flag
-.B --dport
-is a convenient alias for this option.
-.TP
-[\fB!\fP] \fB--tcp-flags\fP \fImask\fP \fIcomp\fP
-Match when the TCP flags are as specified.  The first argument \fImask\fP is the
-flags which we should examine, written as a comma-separated list, and
-the second argument \fIcomp\fP is a comma-separated list of flags which must be
-set.  Flags are:
-.BR "SYN ACK FIN RST URG PSH ALL NONE" .
-Hence the command
-.nf
- iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST SYN
-.fi
-will only match packets with the SYN flag set, and the ACK, FIN and
-RST flags unset.
-.TP
-[\fB!\fP] \fB--syn\fP
-Only match TCP packets with the SYN bit set and the ACK,RST and FIN bits
-cleared.  Such packets are used to request TCP connection initiation;
-for example, blocking such packets coming in an interface will prevent
-incoming TCP connections, but outgoing TCP connections will be
-unaffected.
-It is equivalent to \fB--tcp-flags SYN,RST,ACK,FIN SYN\fP.
-If the "!" flag precedes the "--syn", the sense of the
-option is inverted.
-.TP
-[\fB!\fP] \fB--tcp-option\fP \fInumber\fP
-Match if TCP option set.
diff --git a/extensions/libxt_tcpmss.c b/extensions/libxt_tcpmss.c
deleted file mode 100644 (file)
index 8f56a41..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-/* Shared library add-on to iptables to add tcp MSS matching support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-
-#include <xtables.h>
-#include <linux/netfilter/xt_tcpmss.h>
-
-/* Function which prints out usage message. */
-static void tcpmss_help(void)
-{
-       printf(
-"tcpmss match options:\n"
-"[!] --mss value[:value]       Match TCP MSS range.\n"
-"                              (only valid for TCP SYN or SYN/ACK packets)\n");
-}
-
-static const struct option tcpmss_opts[] = {
-       { "mss", 1, NULL, '1' },
-       { .name = NULL }
-};
-
-static u_int16_t
-parse_tcp_mssvalue(const char *mssvalue)
-{
-       unsigned int mssvaluenum;
-
-       if (string_to_number(mssvalue, 0, 65535, &mssvaluenum) != -1)
-               return (u_int16_t)mssvaluenum;
-
-       exit_error(PARAMETER_PROBLEM,
-                  "Invalid mss `%s' specified", mssvalue);
-}
-
-static void
-parse_tcp_mssvalues(const char *mssvaluestring,
-                   u_int16_t *mss_min, u_int16_t *mss_max)
-{
-       char *buffer;
-       char *cp;
-
-       buffer = strdup(mssvaluestring);
-       if ((cp = strchr(buffer, ':')) == NULL)
-               *mss_min = *mss_max = parse_tcp_mssvalue(buffer);
-       else {
-               *cp = '\0';
-               cp++;
-
-               *mss_min = buffer[0] ? parse_tcp_mssvalue(buffer) : 0;
-               *mss_max = cp[0] ? parse_tcp_mssvalue(cp) : 0xFFFF;
-       }
-       free(buffer);
-}
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int
-tcpmss_parse(int c, char **argv, int invert, unsigned int *flags,
-             const void *entry, struct xt_entry_match **match)
-{
-       struct xt_tcpmss_match_info *mssinfo =
-               (struct xt_tcpmss_match_info *)(*match)->data;
-
-       switch (c) {
-       case '1':
-               if (*flags)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--mss' allowed");
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_tcp_mssvalues(argv[optind-1],
-                                   &mssinfo->mss_min, &mssinfo->mss_max);
-               if (invert)
-                       mssinfo->invert = 1;
-               *flags = 1;
-               break;
-       default:
-               return 0;
-       }
-       return 1;
-}
-
-static void
-print_tcpmss(u_int16_t mss_min, u_int16_t mss_max, int invert, int numeric)
-{
-       if (invert)
-               printf("! ");
-
-       if (mss_min == mss_max)
-               printf("%u ", mss_min);
-       else
-               printf("%u:%u ", mss_min, mss_max);
-}
-
-/* Final check; must have specified --mss. */
-static void tcpmss_check(unsigned int flags)
-{
-       if (!flags)
-               exit_error(PARAMETER_PROBLEM,
-                          "tcpmss match: You must specify `--mss'");
-}
-
-/* Prints out the matchinfo. */
-static void
-tcpmss_print(const void *ip, const struct xt_entry_match *match, int numeric)
-{
-       const struct xt_tcpmss_match_info *mssinfo =
-               (const struct xt_tcpmss_match_info *)match->data;
-
-       printf("tcpmss match ");
-       print_tcpmss(mssinfo->mss_min, mssinfo->mss_max,
-                    mssinfo->invert, numeric);
-}
-
-/* Saves the union ipt_matchinfo in parsable form to stdout. */
-static void tcpmss_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct xt_tcpmss_match_info *mssinfo =
-               (const struct xt_tcpmss_match_info *)match->data;
-
-       printf("--mss ");
-       print_tcpmss(mssinfo->mss_min, mssinfo->mss_max,
-                    mssinfo->invert, 0);
-}
-
-static struct xtables_match tcpmss_match = {
-       .family         = AF_INET,
-       .name           = "tcpmss",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_tcpmss_match_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_tcpmss_match_info)),
-       .help           = tcpmss_help,
-       .parse          = tcpmss_parse,
-       .final_check    = tcpmss_check,
-       .print          = tcpmss_print,
-       .save           = tcpmss_save,
-       .extra_opts     = tcpmss_opts,
-};
-
-static struct xtables_match tcpmss_match6 = {
-       .family         = AF_INET6,
-       .name           = "tcpmss",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_tcpmss_match_info)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_tcpmss_match_info)),
-       .help           = tcpmss_help,
-       .parse          = tcpmss_parse,
-       .final_check    = tcpmss_check,
-       .print          = tcpmss_print,
-       .save           = tcpmss_save,
-       .extra_opts     = tcpmss_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&tcpmss_match);
-       xtables_register_match(&tcpmss_match6);
-}
diff --git a/extensions/libxt_tcpmss.man b/extensions/libxt_tcpmss.man
deleted file mode 100644 (file)
index 01cdc3a..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-This matches the TCP MSS (maximum segment size) field of the TCP header.  You can only use this on TCP SYN or SYN/ACK packets, since the MSS is only negotiated during the TCP handshake at connection startup time.
-.TP
-[\fB!\fP] \fB--mss\fP \fIvalue\fP[\fB:\fP\fIvalue\fP]
-Match a given TCP MSS value or range.
diff --git a/extensions/libxt_time.c b/extensions/libxt_time.c
deleted file mode 100644 (file)
index 97bb0d3..0000000
+++ /dev/null
@@ -1,483 +0,0 @@
-/*
- *     libxt_time - iptables part for xt_time
- *     Copyright © CC Computer Consultants GmbH, 2007
- *     Contact: <jengelh@computergmbh.de>
- *
- *     libxt_time.c 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 3 of the License.
- *
- *     Based on libipt_time.c.
- */
-#include <sys/types.h>
-#include <getopt.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <time.h>
-#include <linux/netfilter/xt_time.h>
-#include <xtables.h>
-#define ARRAY_SIZE(x) (sizeof(x) / sizeof(*x))
-
-enum { /* getopt "seen" bits */
-       F_DATE_START = 1 << 0,
-       F_DATE_STOP  = 1 << 1,
-       F_TIME_START = 1 << 2,
-       F_TIME_STOP  = 1 << 3,
-       F_MONTHDAYS  = 1 << 4,
-       F_WEEKDAYS   = 1 << 5,
-       F_TIMEZONE   = 1 << 6,
-};
-
-static const char *const week_days[] = {
-       NULL, "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun",
-};
-
-static const struct option time_opts[] = {
-       {"datestart", true,  NULL, 'D'},
-       {"datestop",  true,  NULL, 'E'},
-       {"timestart", true,  NULL, 'X'},
-       {"timestop",  true,  NULL, 'Y'},
-       {"weekdays",  true,  NULL, 'w'},
-       {"monthdays", true,  NULL, 'm'},
-       {"localtz",   false, NULL, 'l'},
-       {"utc",       false, NULL, 'u'},
-       { .name = NULL }
-};
-
-static void time_help(void)
-{
-       printf(
-"time match options:\n"
-"    --datestart time     Start and stop time, to be given in ISO 8601\n"
-"    --datestop time      (YYYY[-MM[-DD[Thh[:mm[:ss]]]]])\n"
-"    --timestart time     Start and stop daytime (hh:mm[:ss])\n"
-"    --timestop time      (between 00:00:00 and 23:59:59)\n"
-"[!] --monthdays value    List of days on which to match, separated by comma\n"
-"                         (Possible days: 1 to 31; defaults to all)\n"
-"[!] --weekdays value     List of weekdays on which to match, sep. by comma\n"
-"                         (Possible days: Mon,Tue,Wed,Thu,Fri,Sat,Sun or 1 to 7\n"
-"                         Defaults to all weekdays.)\n"
-"    --localtz/--utc      Time is interpreted as UTC/local time\n");
-}
-
-static void time_init(struct xt_entry_match *m)
-{
-       struct xt_time_info *info = (void *)m->data;
-
-       /* By default, we match on every day, every daytime */
-       info->monthdays_match = XT_TIME_ALL_MONTHDAYS;
-       info->weekdays_match  = XT_TIME_ALL_WEEKDAYS;
-       info->daytime_start   = XT_TIME_MIN_DAYTIME;
-       info->daytime_stop    = XT_TIME_MAX_DAYTIME;
-
-       /* ...and have no date-begin or date-end boundary */
-       info->date_start = 0;
-       info->date_stop  = INT_MAX;
-
-       /* local time is default */
-       info->flags |= XT_TIME_LOCAL_TZ;
-}
-
-static time_t time_parse_date(const char *s, bool end)
-{
-       unsigned int month = 1, day = 1, hour = 0, minute = 0, second = 0;
-       unsigned int year  = end ? 2038 : 1970;
-       const char *os = s;
-       struct tm tm;
-       time_t ret;
-       char *e;
-
-       year = strtoul(s, &e, 10);
-       if ((*e != '-' && *e != '\0') || year < 1970 || year > 2038)
-               goto out;
-       if (*e == '\0')
-               goto eval;
-
-       s = e + 1;
-       month = strtoul(s, &e, 10);
-       if ((*e != '-' && *e != '\0') || month > 12)
-               goto out;
-       if (*e == '\0')
-               goto eval;
-
-       s = e + 1;
-       day = strtoul(s, &e, 10);
-       if ((*e != 'T' && *e != '\0') || day > 31)
-               goto out;
-       if (*e == '\0')
-               goto eval;
-
-       s = e + 1;
-       hour = strtoul(s, &e, 10);
-       if ((*e != ':' && *e != '\0') || hour > 23)
-               goto out;
-       if (*e == '\0')
-               goto eval;
-
-       s = e + 1;
-       minute = strtoul(s, &e, 10);
-       if ((*e != ':' && *e != '\0') || minute > 59)
-               goto out;
-       if (*e == '\0')
-               goto eval;
-
-       s = e + 1;
-       second = strtoul(s, &e, 10);
-       if (*e != '\0' || second > 59)
-               goto out;
-
- eval:
-       tm.tm_year = year - 1900;
-       tm.tm_mon  = month - 1;
-       tm.tm_mday = day;
-       tm.tm_hour = hour;
-       tm.tm_min  = minute;
-       tm.tm_sec  = second;
-       ret = mktime(&tm);
-       if (ret >= 0)
-               return ret;
-       perror("mktime");
-       exit_error(OTHER_PROBLEM, "mktime returned an error");
-
- out:
-       exit_error(PARAMETER_PROBLEM, "Invalid date \"%s\" specified. Should "
-                  "be YYYY[-MM[-DD[Thh[:mm[:ss]]]]]", os);
-       return -1;
-}
-
-static unsigned int time_parse_minutes(const char *s)
-{
-       unsigned int hour, minute, second = 0;
-       char *e;
-
-       hour = strtoul(s, &e, 10);
-       if (*e != ':' || hour > 23)
-               goto out;
-
-       s = e + 1;
-       minute = strtoul(s, &e, 10);
-       if ((*e != ':' && *e != '\0') || minute > 59)
-               goto out;
-       if (*e == '\0')
-               goto eval;
-
-       s = e + 1;
-       second = strtoul(s, &e, 10);
-       if (*e != '\0' || second > 59)
-               goto out;
-
- eval:
-       return 60 * 60 * hour + 60 * minute + second;
-
- out:
-       exit_error(PARAMETER_PROBLEM, "invalid time \"%s\" specified, "
-                  "should be hh:mm[:ss] format and within the boundaries", s);
-       return -1;
-}
-
-static const char *my_strseg(char *buf, unsigned int buflen,
-    const char **arg, char delim)
-{
-       const char *sep;
-
-       if (*arg == NULL || **arg == '\0')
-               return NULL;
-       sep = strchr(*arg, delim);
-       if (sep == NULL) {
-               snprintf(buf, buflen, "%s", *arg);
-               *arg = NULL;
-               return buf;
-       }
-       snprintf(buf, buflen, "%.*s", (unsigned int)(sep - *arg), *arg);
-       *arg = sep + 1;
-       return buf;
-}
-
-static uint32_t time_parse_monthdays(const char *arg)
-{
-       char day[3], *err = NULL;
-       uint32_t ret = 0;
-       unsigned int i;
-
-       while (my_strseg(day, sizeof(day), &arg, ',') != NULL) {
-               i = strtoul(day, &err, 0);
-               if ((*err != ',' && *err != '\0') || i > 31)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "%s is not a valid day for --monthdays", day);
-               ret |= 1 << i;
-       }
-
-       return ret;
-}
-
-static unsigned int time_parse_weekdays(const char *arg)
-{
-       char day[4], *err = NULL;
-       unsigned int i, ret = 0;
-       bool valid;
-
-       while (my_strseg(day, sizeof(day), &arg, ',') != NULL) {
-               i = strtoul(day, &err, 0);
-               if (*err == '\0') {
-                       if (i == 0)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "No, the week does NOT begin with Sunday.");
-                       ret |= 1 << i;
-                       continue;
-               }
-
-               valid = false;
-               for (i = 1; i < ARRAY_SIZE(week_days); ++i)
-                       if (strncmp(day, week_days[i], 2) == 0) {
-                               ret |= 1 << i;
-                               valid = true;
-                       }
-
-               if (!valid)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "%s is not a valid day specifier", day);
-       }
-
-       return ret;
-}
-
-static int time_parse(int c, char **argv, int invert, unsigned int *flags,
-                      const void *entry, struct xt_entry_match **match)
-{
-       struct xt_time_info *info = (void *)(*match)->data;
-
-       switch (c) {
-       case 'D': /* --datestart */
-               if (*flags & F_DATE_START)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Cannot specify --datestart twice");
-               if (invert)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Unexpected \"!\" with --datestart");
-               info->date_start = time_parse_date(optarg, false);
-               *flags |= F_DATE_START;
-               return 1;
-       case 'E': /* --datestop */
-               if (*flags & F_DATE_STOP)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Cannot specify --datestop more than once");
-               if (invert)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "unexpected \"!\" with --datestop");
-               info->date_stop = time_parse_date(optarg, true);
-               *flags |= F_DATE_STOP;
-               return 1;
-       case 'X': /* --timestart */
-               if (*flags & F_TIME_START)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Cannot specify --timestart more than once");
-               if (invert)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Unexpected \"!\" with --timestart");
-               info->daytime_start = time_parse_minutes(optarg);
-               *flags |= F_TIME_START;
-               return 1;
-       case 'Y': /* --timestop */
-               if (*flags & F_TIME_STOP)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Cannot specify --timestop more than once");
-               if (invert)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Unexpected \"!\" with --timestop");
-               info->daytime_stop = time_parse_minutes(optarg);
-               *flags |= F_TIME_STOP;
-               return 1;
-       case 'l': /* --localtz */
-               if (*flags & F_TIMEZONE)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can only specify exactly one of --localtz or --utc");
-               info->flags |= XT_TIME_LOCAL_TZ;
-               *flags |= F_TIMEZONE;
-               return 1;
-       case 'm': /* --monthdays */
-               if (*flags & F_MONTHDAYS)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Cannot specify --monthdays more than once");
-               info->monthdays_match = time_parse_monthdays(optarg);
-               if (invert)
-                       info->monthdays_match ^= XT_TIME_ALL_MONTHDAYS;
-               *flags |= F_MONTHDAYS;
-               return 1;
-       case 'w': /* --weekdays */
-               if (*flags & F_WEEKDAYS)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Cannot specify --weekdays more than once");
-               info->weekdays_match = time_parse_weekdays(optarg);
-               if (invert)
-                       info->weekdays_match ^= XT_TIME_ALL_WEEKDAYS;
-               *flags |= F_WEEKDAYS;
-               return 1;
-       case 'u': /* --utc */
-               if (*flags & F_TIMEZONE)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Can only specify exactly one of --localtz or --utc");
-               info->flags &= ~XT_TIME_LOCAL_TZ;
-               *flags |= F_TIMEZONE;
-               return 1;
-       }
-       return 0;
-}
-
-static void time_print_date(time_t date, const char *command)
-{
-       struct tm *t;
-
-       /* If it is the default value, do not print it. */
-       if (date == 0 || date == LONG_MAX)
-               return;
-
-       t = localtime(&date);
-       if (command != NULL)
-               /*
-                * Need a contiguous string (no whitespaces), hence using
-                * the ISO 8601 "T" variant.
-                */
-               printf("%s %04u-%02u-%02uT%02u:%02u:%02u ",
-                      command, t->tm_year + 1900, t->tm_mon + 1,
-                      t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
-       else
-               printf("%04u-%02u-%02u %02u:%02u:%02u ",
-                      t->tm_year + 1900, t->tm_mon + 1, t->tm_mday,
-                      t->tm_hour, t->tm_min, t->tm_sec);
-}
-
-static void time_print_monthdays(uint32_t mask, bool human_readable)
-{
-       unsigned int i, nbdays = 0;
-
-       for (i = 1; i <= 31; ++i)
-               if (mask & (1 << i)) {
-                       if (nbdays++ > 0)
-                               printf(",");
-                       printf("%u", i);
-                       if (human_readable)
-                               switch (i % 10) {
-                                       case 1:
-                                               printf("st");
-                                               break;
-                                       case 2:
-                                               printf("nd");
-                                               break;
-                                       case 3:
-                                               printf("rd");
-                                               break;
-                                       default:
-                                               printf("th");
-                                               break;
-                               }
-               }
-       printf(" ");
-}
-
-static void time_print_weekdays(unsigned int mask)
-{
-       unsigned int i, nbdays = 0;
-
-       for (i = 1; i <= 7; ++i)
-               if (mask & (1 << i)) {
-                       if (nbdays > 0)
-                               printf(",%s", week_days[i]);
-                       else
-                               printf("%s", week_days[i]);
-                       ++nbdays;
-               }
-       printf(" ");
-}
-
-static inline void divide_time(unsigned int fulltime, unsigned int *hours,
-    unsigned int *minutes, unsigned int *seconds)
-{
-       *seconds  = fulltime % 60;
-       fulltime /= 60;
-       *minutes  = fulltime % 60;
-       *hours    = fulltime / 60;
-}
-
-static void time_print(const void *ip, const struct xt_entry_match *match,
-                       int numeric)
-{
-       struct xt_time_info *info = (void *)match->data;
-       unsigned int h, m, s;
-
-       printf("TIME ");
-
-       if (info->daytime_start != XT_TIME_MIN_DAYTIME ||
-           info->daytime_stop != XT_TIME_MAX_DAYTIME) {
-               divide_time(info->daytime_start, &h, &m, &s);
-               printf("from %02u:%02u:%02u ", h, m, s);
-               divide_time(info->daytime_stop, &h, &m, &s);
-               printf("to %02u:%02u:%02u ", h, m, s);
-       }
-       if (info->weekdays_match != XT_TIME_ALL_WEEKDAYS) {
-               printf("on ");
-               time_print_weekdays(info->weekdays_match);
-       }
-       if (info->monthdays_match != XT_TIME_ALL_MONTHDAYS) {
-               printf("on ");
-               time_print_monthdays(info->monthdays_match, true);
-       }
-       if (info->date_start != 0) {
-               printf("starting from ");
-               time_print_date(info->date_start, NULL);
-       }
-       if (info->date_stop != INT_MAX) {
-               printf("until date ");
-               time_print_date(info->date_stop, NULL);
-       }
-       if (!(info->flags & XT_TIME_LOCAL_TZ))
-               printf("UTC ");
-}
-
-static void time_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct xt_time_info *info = (const void *)match->data;
-       unsigned int h, m, s;
-
-       if (info->daytime_start != XT_TIME_MIN_DAYTIME ||
-           info->daytime_stop != XT_TIME_MAX_DAYTIME) {
-               divide_time(info->daytime_start, &h, &m, &s);
-               printf("--timestart %02u:%02u:%02u ", h, m, s);
-               divide_time(info->daytime_stop, &h, &m, &s);
-               printf("--timestop %02u:%02u:%02u ", h, m, s);
-       }
-       if (info->monthdays_match != XT_TIME_ALL_MONTHDAYS) {
-               printf("--monthdays ");
-               time_print_monthdays(info->monthdays_match, false);
-       }
-       if (info->weekdays_match != XT_TIME_ALL_WEEKDAYS) {
-               printf("--weekdays ");
-               time_print_weekdays(info->weekdays_match);
-               printf(" ");
-       }
-       time_print_date(info->date_start, "--datestart");
-       time_print_date(info->date_stop, "--datestop");
-       if (!(info->flags & XT_TIME_LOCAL_TZ))
-               printf("--utc ");
-}
-
-static struct xtables_match time_match = {
-       .name          = "time",
-       .family        = AF_UNSPEC,
-       .version       = XTABLES_VERSION,
-       .size          = XT_ALIGN(sizeof(struct xt_time_info)),
-       .userspacesize = XT_ALIGN(sizeof(struct xt_time_info)),
-       .help          = time_help,
-       .init          = time_init,
-       .parse         = time_parse,
-       .print         = time_print,
-       .save          = time_save,
-       .extra_opts    = time_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&time_match);
-}
diff --git a/extensions/libxt_time.man b/extensions/libxt_time.man
deleted file mode 100644 (file)
index ab4a09c..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-This matches if the packet arrival time/date is within a given range. All
-options are optional, but are ANDed when specified.
-.TP
-\fB--datestart\fR \fIYYYY\fR[\fB-\fR\fIMM\fR[\fB-\fR\fIDD\fR[\fBT\fR\fIhh\fR[\fB:\fR\fImm\fR[\fB:\fR\fIss\fR]]]]]
-.TP
-\fB--datestop\fR \fIYYYY\fR[\fB-\fR\fIMM\fR[\fB-\fR\fIDD\fR[\fBT\fR\fIhh\fR[\fB:\fR\fImm\fR[\fB:\fR\fIss\fR]]]]]
-.IP
-Only match during the given time, which must be in ISO 8601 "T" notation.
-The possible time range is 1970-01-01T00:00:00 to 2038-01-19T04:17:07.
-.IP
-If --datestart or --datestop are not specified, it will default to 1970-01-01
-and 2038-01-19, respectively.
-.TP
-\fB--timestart\fR \fIhh\fR\fB:\fR\fImm\fR[\fB:\fR\fIss\fR]
-.TP
-\fB--timestop\fR \fIhh\fR\fB:\fR\fImm\fR[\fB:\fR\fIss\fR]
-.IP
-Only match during the given daytime. The possible time range is 00:00:00 to
-23:59:59. Leading zeroes are allowed (e.g. "06:03") and correctly interpreted
-as base-10.
-.TP
-[\fB!\fR] \fB--monthdays\fR \fIday\fR[\fB,\fR\fIday\fR...]
-.IP
-Only match on the given days of the month. Possible values are \fB1\fR
-to \fB31\fR. Note that specifying \fB31\fR will of course not match
-on months which do not have a 31st day; the same goes for 28- or 29-day
-February.
-.TP
-[\fB!\fR] \fB--weekdays\fR \fIday\fR[\fB,\fR\fIday\fR...]
-.IP
-Only match on the given weekdays. Possible values are \fBMon\fR, \fBTue\fR,
-\fBWed\fR, \fBThu\fR, \fBFri\fR, \fBSat\fR, \fBSun\fR, or values from \fB1\fR
-to \fB7\fR, respectively. You may also use two-character variants (\fBMo\fR,
-\fBTu\fR, etc.).
-.TP
-\fB--utc\fR
-.IP
-Interpret the times given for \fB--datestart\fR, \fB--datestop\fR,
-\fB--timestart\fR and \fB--timestop\fR to be UTC.
-.TP
-\fB--localtz\fR
-.IP
-Interpret the times given for \fB--datestart\fR, \fB--datestop\fR,
-\fB--timestart\fR and \fB--timestop\fR to be local kernel time. (Default)
-.PP
-EXAMPLES. To match on weekends, use:
-.IP
--m time --weekdays Sa,Su
-.PP
-Or, to match (once) on a national holiday block:
-.IP
--m time --datestart 2007-12-24 --datestop 2007-12-27
-.PP
-Since the stop time is actually inclusive, you would need the following stop
-time to not match the first second of the new day:
-.IP
--m time --datestart 2007-01-01T17:00 --datestop 2007-01-01T23:59:59
-.PP
-During lunch hour:
-.IP
--m time --timestart 12:30 --timestop 13:30
-.PP
-The fourth Friday in the month:
-.IP
--m time --weekdays Fr --monthdays 22,23,24,25,26,27,28
-.PP
-(Note that this exploits a certain mathematical property. It is not possible to
-say "fourth Thursday OR fourth Friday" in one rule. It is possible with
-multiple rules, though.)
diff --git a/extensions/libxt_tos.c b/extensions/libxt_tos.c
deleted file mode 100644 (file)
index 92f7d84..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Shared library add-on to iptables to add tos match support
- *
- * Copyright © CC Computer Consultants GmbH, 2007
- * Contact: Jan Engelhardt <jengelh@computergmbh.de>
- */
-#include <getopt.h>
-#include <netdb.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <xtables.h>
-#include <linux/netfilter/xt_dscp.h>
-#include <linux/netfilter_ipv4/ipt_tos.h>
-#include "tos_values.c"
-
-enum {
-       FLAG_TOS = 1 << 0,
-};
-
-static const struct option tos_mt_opts[] = {
-       {.name = "tos", .has_arg = true, .val = 't'},
-       { .name = NULL }
-};
-
-static void tos_mt_help(void)
-{
-       const struct tos_symbol_info *symbol;
-
-       printf(
-"tos match options:\n"
-"[!] --tos value[/mask]    Match Type of Service/Priority field value\n"
-"[!] --tos symbol          Match TOS field (IPv4 only) by symbol\n"
-"                          Accepted symbolic names for value are:\n");
-
-       for (symbol = tos_symbol_names; symbol->name != NULL; ++symbol)
-               printf("                          (0x%02x) %2u %s\n",
-                      symbol->value, symbol->value, symbol->name);
-
-       printf("\n");
-}
-
-static int tos_mt_parse_v0(int c, char **argv, int invert, unsigned int *flags,
-                           const void *entry, struct xt_entry_match **match)
-{
-       struct ipt_tos_info *info = (void *)(*match)->data;
-       struct tos_value_mask tvm;
-
-       switch (c) {
-       case 't':
-               param_act(P_ONLY_ONCE, "tos", "--tos", *flags & FLAG_TOS);
-               if (!tos_parse_symbolic(optarg, &tvm, 0xFF))
-                       param_act(P_BAD_VALUE, "tos", "--tos", optarg);
-               if (tvm.mask != 0xFF)
-                       exit_error(PARAMETER_PROBLEM, "tos: Your kernel is "
-                                  "too old to support anything besides /0xFF "
-                                  "as a mask.");
-               info->tos = tvm.value;
-               if (invert)
-                       info->invert = true;
-               *flags |= FLAG_TOS;
-               return true;
-       }
-       return false;
-}
-
-static int tos_mt_parse(int c, char **argv, int invert, unsigned int *flags,
-                        const void *entry, struct xt_entry_match **match)
-{
-       struct xt_tos_match_info *info = (void *)(*match)->data;
-       struct tos_value_mask tvm = {.mask = 0xFF};
-
-       switch (c) {
-       case 't':
-               param_act(P_ONLY_ONCE, "tos", "--tos", *flags & FLAG_TOS);
-               if (!tos_parse_symbolic(optarg, &tvm, 0x3F))
-                       param_act(P_BAD_VALUE, "tos", "--tos", optarg);
-               info->tos_value = tvm.value;
-               info->tos_mask  = tvm.mask;
-               if (invert)
-                       info->invert = true;
-               *flags |= FLAG_TOS;
-               return true;
-       }
-       return false;
-}
-
-static void tos_mt_check(unsigned int flags)
-{
-       if (flags == 0)
-               exit_error(PARAMETER_PROBLEM,
-                          "tos: --tos parameter required");
-}
-
-static void tos_mt_print_v0(const void *ip, const struct xt_entry_match *match,
-                            int numeric)
-{
-       const struct ipt_tos_info *info = (const void *)match->data;
-
-       printf("tos match ");
-       if (info->invert)
-               printf("!");
-       if (numeric || !tos_try_print_symbolic("", info->tos, 0x3F))
-               printf("0x%02x ", info->tos);
-}
-
-static void tos_mt_print(const void *ip, const struct xt_entry_match *match,
-                         int numeric)
-{
-       const struct xt_tos_match_info *info = (const void *)match->data;
-
-       printf("tos match ");
-       if (info->invert)
-               printf("!");
-       if (numeric ||
-           !tos_try_print_symbolic("", info->tos_value, info->tos_mask))
-               printf("0x%02x/0x%02x ", info->tos_value, info->tos_mask);
-}
-
-static void tos_mt_save_v0(const void *ip, const struct xt_entry_match *match)
-{
-       const struct ipt_tos_info *info = (const void *)match->data;
-
-       if (info->invert)
-               printf("! ");
-       printf("--tos 0x%02x ", info->tos);
-}
-
-static void tos_mt_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct xt_tos_match_info *info = (const void *)match->data;
-
-       if (info->invert)
-               printf("! ");
-       printf("--tos 0x%02x/0x%02x ", info->tos_value, info->tos_mask);
-}
-
-static struct xtables_match tos_mt_reg_v0 = {
-       .version       = XTABLES_VERSION,
-       .name          = "tos",
-       .family        = AF_INET,
-       .revision      = 0,
-       .size          = XT_ALIGN(sizeof(struct ipt_tos_info)),
-       .userspacesize = XT_ALIGN(sizeof(struct ipt_tos_info)),
-       .help          = tos_mt_help,
-       .parse         = tos_mt_parse_v0,
-       .final_check   = tos_mt_check,
-       .print         = tos_mt_print_v0,
-       .save          = tos_mt_save_v0,
-       .extra_opts    = tos_mt_opts,
-};
-
-static struct xtables_match tos_mt_reg = {
-       .version       = XTABLES_VERSION,
-       .name          = "tos",
-       .family        = AF_INET,
-       .revision      = 1,
-       .size          = XT_ALIGN(sizeof(struct xt_tos_match_info)),
-       .userspacesize = XT_ALIGN(sizeof(struct xt_tos_match_info)),
-       .help          = tos_mt_help,
-       .parse         = tos_mt_parse,
-       .final_check   = tos_mt_check,
-       .print         = tos_mt_print,
-       .save          = tos_mt_save,
-       .extra_opts    = tos_mt_opts,
-};
-
-static struct xtables_match tos_mt6_reg = {
-       .version       = XTABLES_VERSION,
-       .name          = "tos",
-       .family        = AF_INET6,
-       .revision      = 1,
-       .size          = XT_ALIGN(sizeof(struct xt_tos_match_info)),
-       .userspacesize = XT_ALIGN(sizeof(struct xt_tos_match_info)),
-       .help          = tos_mt_help,
-       .parse         = tos_mt_parse,
-       .final_check   = tos_mt_check,
-       .print         = tos_mt_print,
-       .save          = tos_mt_save,
-       .extra_opts    = tos_mt_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&tos_mt_reg_v0);
-       xtables_register_match(&tos_mt_reg);
-       xtables_register_match(&tos_mt6_reg);
-}
diff --git a/extensions/libxt_tos.man b/extensions/libxt_tos.man
deleted file mode 100644 (file)
index cd72e95..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-This module matches the 8-bit Type of Service field in the IPv4 header (i.e.
-including the "Precedence" bits) or the (also 8-bit) Priority field in the IPv6
-header.
-.TP
-[\fB!\fP] \fB--tos\fR \fIvalue\fR[\fB/\fR\fImask\fR]
-Matches packets with the given TOS mark value. If a mask is specified, it is
-logically ANDed with the TOS mark before the comparison.
-.TP
-[\fB!\fP] \fB--tos\fR \fIsymbol\fR
-You can specify a symbolic name when using the tos match for IPv4. The list of
-recognized TOS names can be obtained by calling iptables with \fB-m tos -h\fR.
-Note that this implies a mask of 0x3F, i.e. all but the ECN bits.
diff --git a/extensions/libxt_u32.c b/extensions/libxt_u32.c
deleted file mode 100644 (file)
index 3a5cdad..0000000
+++ /dev/null
@@ -1,287 +0,0 @@
-/* Shared library add-on to iptables to add u32 matching,
- * generalized matching on values found at packet offsets
- *
- * Detailed doc is in the kernel module source
- * net/netfilter/xt_u32.c
- *
- * (C) 2002 by Don Cohen <don-netf@isis.cs3-inc.com>
- * Released under the terms of GNU GPL v2
- *
- * Copyright © CC Computer Consultants GmbH, 2007
- * Contact: <jengelh@computergmbh.de>
- */
-#include <sys/types.h>
-#include <ctype.h>
-#include <errno.h>
-#include <getopt.h>
-#include <netdb.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <xtables.h>
-#include "../include/linux/netfilter/xt_u32.h"
-
-static const struct option u32_opts[] = {
-       {"u32", 1, NULL, 'u'},
-       { .name = NULL }
-};
-
-static void u32_help(void)
-{
-       printf(
-               "u32 match options:\n"
-               "[!] --u32 tests\n"
-               "\t\t""tests := location \"=\" value | tests \"&&\" location \"=\" value\n"
-               "\t\t""value := range | value \",\" range\n"
-               "\t\t""range := number | number \":\" number\n"
-               "\t\t""location := number | location operator number\n"
-               "\t\t""operator := \"&\" | \"<<\" | \">>\" | \"@\"\n");
-}
-
-static void u32_dump(const struct xt_u32 *data)
-{
-       const struct xt_u32_test *ct;
-       unsigned int testind, i;
-
-       for (testind = 0; testind < data->ntests; ++testind) {
-               ct = &data->tests[testind];
-
-               if (testind > 0)
-                       printf("&&");
-
-               printf("0x%x", ct->location[0].number);
-               for (i = 1; i < ct->nnums; ++i) {
-                       switch (ct->location[i].nextop) {
-                       case XT_U32_AND:
-                               printf("&");
-                               break;
-                       case XT_U32_LEFTSH:
-                               printf("<<");
-                               break;
-                       case XT_U32_RIGHTSH:
-                               printf(">>");
-                               break;
-                       case XT_U32_AT:
-                               printf("@");
-                               break;
-                       }
-                       printf("0x%x", ct->location[i].number);
-               }
-
-               printf("=");
-               for (i = 0; i < ct->nvalues; ++i) {
-                       if (i > 0)
-                               printf(",");
-                       if (ct->value[i].min == ct->value[i].max)
-                               printf("0x%x", ct->value[i].min);
-                       else
-                               printf("0x%x:0x%x", ct->value[i].min,
-                                      ct->value[i].max);
-               }
-       }
-       printf(" ");
-}
-
-/* string_to_number() is not quite what we need here ... */
-static u_int32_t parse_number(char **s, int pos)
-{
-       u_int32_t number;
-       char *end;
-
-       errno  = 0;
-       number = strtoul(*s, &end, 0);
-       if (end == *s)
-               exit_error(PARAMETER_PROBLEM,
-                          "u32: at char %d: expected number", pos);
-       if (errno != 0)
-               exit_error(PARAMETER_PROBLEM,
-                          "u32: at char %d: error reading number", pos);
-       *s = end;
-       return number;
-}
-
-/* Function which parses command options; returns true if it ate an option */
-static int u32_parse(int c, char **argv, int invert, unsigned int *flags,
-                    const void *entry, struct xt_entry_match **match)
-{
-       struct xt_u32 *data = (void *)(*match)->data;
-       unsigned int testind = 0, locind = 0, valind = 0;
-       struct xt_u32_test *ct = &data->tests[testind]; /* current test */
-       char *arg = argv[optind-1]; /* the argument string */
-       char *start = arg;
-       int state = 0;
-
-       if (c != 'u')
-               return 0;
-
-       data->invert = invert;
-
-       /*
-        * states:
-        * 0 = looking for numbers and operations,
-        * 1 = looking for ranges
-        */
-       while (1) {
-               /* read next operand/number or range */
-               while (isspace(*arg))
-                       ++arg;
-
-               if (*arg == '\0') {
-                       /* end of argument found */
-                       if (state == 0)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "u32: abrupt end of input after location specifier");
-                       if (valind == 0)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "u32: test ended with no value specified");
-
-                       ct->nnums    = locind;
-                       ct->nvalues  = valind;
-                       data->ntests = ++testind;
-
-                       if (testind > XT_U32_MAXSIZE)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "u32: at char %u: too many \"&&\"s",
-                                          (unsigned int)(arg - start));
-                       return 1;
-               }
-
-               if (state == 0) {
-                       /*
-                        * reading location: read a number if nothing read yet,
-                        * otherwise either op number or = to end location spec
-                        */
-                       if (*arg == '=') {
-                               if (locind == 0) {
-                                       exit_error(PARAMETER_PROBLEM,
-                                                  "u32: at char %u: "
-                                                  "location spec missing",
-                                                  (unsigned int)(arg - start));
-                               } else {
-                                       ++arg;
-                                       state = 1;
-                               }
-                       } else {
-                               if (locind != 0) {
-                                       /* need op before number */
-                                       if (*arg == '&') {
-                                               ct->location[locind].nextop = XT_U32_AND;
-                                       } else if (*arg == '<') {
-                                               if (*++arg != '<')
-                                                       exit_error(PARAMETER_PROBLEM,
-                                                                  "u32: at char %u: a second '<' was expected", (unsigned int)(arg - start));
-                                               ct->location[locind].nextop = XT_U32_LEFTSH;
-                                       } else if (*arg == '>') {
-                                               if (*++arg != '>')
-                                                       exit_error(PARAMETER_PROBLEM,
-                                                                  "u32: at char %u: a second '>' was expected", (unsigned int)(arg - start));
-                                               ct->location[locind].nextop = XT_U32_RIGHTSH;
-                                       } else if (*arg == '@') {
-                                               ct->location[locind].nextop = XT_U32_AT;
-                                       } else {
-                                               exit_error(PARAMETER_PROBLEM,
-                                                       "u32: at char %u: operator expected", (unsigned int)(arg - start));
-                                       }
-                                       ++arg;
-                               }
-                               /* now a number; string_to_number skips white space? */
-                               ct->location[locind].number =
-                                       parse_number(&arg, arg - start);
-                               if (++locind > XT_U32_MAXSIZE)
-                                       exit_error(PARAMETER_PROBLEM,
-                                                  "u32: at char %u: too many operators", (unsigned int)(arg - start));
-                       }
-               } else {
-                       /*
-                        * state 1 - reading values: read a range if nothing
-                        * read yet, otherwise either ,range or && to end
-                        * test spec
-                        */
-                       if (*arg == '&') {
-                               if (*++arg != '&')
-                                       exit_error(PARAMETER_PROBLEM,
-                                                  "u32: at char %u: a second '&' was expected", (unsigned int)(arg - start));
-                               if (valind == 0) {
-                                       exit_error(PARAMETER_PROBLEM,
-                                                  "u32: at char %u: value spec missing", (unsigned int)(arg - start));
-                               } else {
-                                       ct->nnums   = locind;
-                                       ct->nvalues = valind;
-                                       ct = &data->tests[++testind];
-                                       if (testind > XT_U32_MAXSIZE)
-                                               exit_error(PARAMETER_PROBLEM,
-                                                          "u32: at char %u: too many \"&&\"s", (unsigned int)(arg - start));
-                                       ++arg;
-                                       state  = 0;
-                                       locind = 0;
-                                       valind = 0;
-                               }
-                       } else { /* read value range */
-                               if (valind > 0) { /* need , before number */
-                                       if (*arg != ',')
-                                               exit_error(PARAMETER_PROBLEM,
-                                                          "u32: at char %u: expected \",\" or \"&&\"", (unsigned int)(arg - start));
-                                       ++arg;
-                               }
-                               ct->value[valind].min =
-                                       parse_number(&arg, arg - start);
-
-                               while (isspace(*arg))
-                                       ++arg;
-
-                               if (*arg == ':') {
-                                       ++arg;
-                                       ct->value[valind].max =
-                                               parse_number(&arg, arg-start);
-                               } else {
-                                       ct->value[valind].max =
-                                               ct->value[valind].min;
-                               }
-
-                               if (++valind > XT_U32_MAXSIZE)
-                                       exit_error(PARAMETER_PROBLEM,
-                                                  "u32: at char %u: too many \",\"s", (unsigned int)(arg - start));
-                       }
-               }
-       }
-}
-
-static void u32_print(const void *ip, const struct xt_entry_match *match,
-                      int numeric)
-{
-       const struct xt_u32 *data = (const void *)match->data;
-       printf("u32 ");
-       if (data->invert)
-               printf("! ");
-       u32_dump(data);
-       return;
-}
-
-static void u32_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct xt_u32 *data = (const void *)match->data;
-       if (data->invert)
-               printf("! ");
-       printf("--u32 ");
-       u32_dump(data);
-       return;
-}
-
-static struct xtables_match u32_match = {
-       .name          = "u32",
-       .family        = AF_UNSPEC,
-       .version       = XTABLES_VERSION,
-       .size          = XT_ALIGN(sizeof(struct xt_u32)),
-       .userspacesize = XT_ALIGN(sizeof(struct xt_u32)),
-       .help          = u32_help,
-       .parse         = u32_parse,
-       .print         = u32_print,
-       .save          = u32_save,
-       .extra_opts    = u32_opts,
-};
-
-void _init(void)
-{
-       xtables_register_match(&u32_match);
-}
diff --git a/extensions/libxt_u32.man b/extensions/libxt_u32.man
deleted file mode 100644 (file)
index 8e00cc1..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-U32 tests whether quantities of up to 4 bytes extracted from a packet have
-specified values. The specification of what to extract is general enough to
-find data at given offsets from tcp headers or payloads.
-.TP
-[\fB!\fP] \fB--u32\fP \fItests\fP
-The argument amounts to a program in a small language described below.
-.IP
-tests := location "=" value | tests "&&" location "=" value
-.IP
-value := range | value "," range
-.IP
-range := number | number ":" number
-.PP
-a single number, \fIn\fR, is interpreted the same as \fIn:n\fR. \fIn:m\fR is
-interpreted as the range of numbers \fB>=n\fR and \fB<=m\fR.
-.IP "" 4
-location := number | location operator number
-.IP "" 4
-operator := "&" | "<<" | ">>" | "@"
-.PP
-The operators \fB&\fR, \fB<<\fR, \fB>>\fR and \fB&&\fR mean the same as in C.
-The \fB=\fR is really a set membership operator and the value syntax describes
-a set. The \fB@\fR operator is what allows moving to the next header and is
-described further below.
-.PP
-There are currently some artificial implementation limits on the size of the
-tests:
-.IP "    *"
-no more than 10 of "\fB=\fR" (and 9 "\fB&&\fR"s) in the u32 argument
-.IP "    *"
-no more than 10 ranges (and 9 commas) per value
-.IP "    *"
-no more than 10 numbers (and 9 operators) per location
-.PP
-To describe the meaning of location, imagine the following machine that
-interprets it. There are three registers:
-.IP
-A is of type \fBchar *\fR, initially the address of the IP header
-.IP
-B and C are unsigned 32 bit integers, initially zero
-.PP
-The instructions are:
-.IP
-number B = number;
-.IP
-C = (*(A+B)<<24) + (*(A+B+1)<<16) + (*(A+B+2)<<8) + *(A+B+3)
-.IP
-&number C = C & number
-.IP
-<< number C = C << number
-.IP
->> number C = C >> number
-.IP
-@number A = A + C; then do the instruction number
-.PP
-Any access of memory outside [skb->data,skb->end] causes the match to fail.
-Otherwise the result of the computation is the final value of C.
-.PP
-Whitespace is allowed but not required in the tests. However, the characters
-that do occur there are likely to require shell quoting, so it is a good idea
-to enclose the arguments in quotes.
-.PP
-Example:
-.IP
-match IP packets with total length >= 256
-.IP
-The IP header contains a total length field in bytes 2-3.
-.IP
---u32 "\fB0 & 0xFFFF = 0x100:0xFFFF\fR"
-.IP
-read bytes 0-3
-.IP
-AND that with 0xFFFF (giving bytes 2-3), and test whether that is in the range
-[0x100:0xFFFF]
-.PP
-Example: (more realistic, hence more complicated)
-.IP
-match ICMP packets with icmp type 0
-.IP
-First test that it is an ICMP packet, true iff byte 9 (protocol) = 1
-.IP
---u32 "\fB6 & 0xFF = 1 &&\fR ...
-.IP
-read bytes 6-9, use \fB&\fR to throw away bytes 6-8 and compare the result to
-1. Next test that it is not a fragment. (If so, it might be part of such a
-packet but we cannot always tell.) N.B.: This test is generally needed if you
-want to match anything beyond the IP header. The last 6 bits of byte 6 and all
-of byte 7 are 0 iff this is a complete packet (not a fragment). Alternatively,
-you can allow first fragments by only testing the last 5 bits of byte 6.
-.IP
- ... \fB4 & 0x3FFF = 0 &&\fR ...
-.IP
-Last test: the first byte past the IP header (the type) is 0. This is where we
-have to use the @syntax. The length of the IP header (IHL) in 32 bit words is
-stored in the right half of byte 0 of the IP header itself.
-.IP
- ... \fB0 >> 22 & 0x3C @ 0 >> 24 = 0\fR"
-.IP
-The first 0 means read bytes 0-3, \fB>>22\fR means shift that 22 bits to the
-right. Shifting 24 bits would give the first byte, so only 22 bits is four
-times that plus a few more bits. \fB&3C\fR then eliminates the two extra bits
-on the right and the first four bits of the first byte. For instance, if IHL=5,
-then the IP header is 20 (4 x 5) bytes long. In this case, bytes 0-1 are (in
-binary) xxxx0101 yyzzzzzz, \fB>>22\fR gives the 10 bit value xxxx0101yy and
-\fB&3C\fR gives 010100. \fB@\fR means to use this number as a new offset into
-the packet, and read four bytes starting from there. This is the first 4 bytes
-of the ICMP payload, of which byte 0 is the ICMP type. Therefore, we simply
-shift the value 24 to the right to throw out all but the first byte and compare
-the result with 0.
-.PP
-Example:
-.IP
-TCP payload bytes 8-12 is any of 1, 2, 5 or 8
-.IP
-First we test that the packet is a tcp packet (similar to ICMP).
-.IP
---u32 "\fB6 & 0xFF = 6 &&\fR ...
-.IP
-Next, test that it is not a fragment (same as above).
-.IP
- ... \fB0 >> 22 & 0x3C @ 12 >> 26 & 0x3C @ 8 = 1,2,5,8\fR"
-.IP
-\fB0>>22&3C\fR as above computes the number of bytes in the IP header. \fB@\fR
-makes this the new offset into the packet, which is the start of the TCP
-header. The length of the TCP header (again in 32 bit words) is the left half
-of byte 12 of the TCP header. The \fB12>>26&3C\fR computes this length in bytes
-(similar to the IP header before). "@" makes this the new offset, which is the
-start of the TCP payload. Finally, 8 reads bytes 8-12 of the payload and
-\fB=\fR checks whether the result is any of 1, 2, 5 or 8.
diff --git a/extensions/libxt_udp.c b/extensions/libxt_udp.c
deleted file mode 100644 (file)
index 9c3665a..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
-/* Shared library add-on to iptables to add UDP support. */
-#include <stdio.h>
-#include <netdb.h>
-#include <string.h>
-#include <stdlib.h>
-#include <getopt.h>
-#include <xtables.h>
-#include <linux/netfilter/xt_tcpudp.h>
-
-/* Function which prints out usage message. */
-static void udp_help(void)
-{
-       printf(
-"udp match options:\n"
-" --source-port [!] port[:port]\n"
-" --sport ...\n"
-"                              match source port(s)\n"
-" --destination-port [!] port[:port]\n"
-" --dport ...\n"
-"                              match destination port(s)\n");
-}
-
-static const struct option udp_opts[] = {
-       { "source-port", 1, NULL, '1' },
-       { "sport", 1, NULL, '1' }, /* synonym */
-       { "destination-port", 1, NULL, '2' },
-       { "dport", 1, NULL, '2' }, /* synonym */
-       { .name = NULL }
-};
-
-static void
-parse_udp_ports(const char *portstring, u_int16_t *ports)
-{
-       char *buffer;
-       char *cp;
-
-       buffer = strdup(portstring);
-       if ((cp = strchr(buffer, ':')) == NULL)
-               ports[0] = ports[1] = parse_port(buffer, "udp");
-       else {
-               *cp = '\0';
-               cp++;
-
-               ports[0] = buffer[0] ? parse_port(buffer, "udp") : 0;
-               ports[1] = cp[0] ? parse_port(cp, "udp") : 0xFFFF;
-
-               if (ports[0] > ports[1])
-                       exit_error(PARAMETER_PROBLEM,
-                                  "invalid portrange (min > max)");
-       }
-       free(buffer);
-}
-
-/* Initialize the match. */
-static void udp_init(struct xt_entry_match *m)
-{
-       struct xt_udp *udpinfo = (struct xt_udp *)m->data;
-
-       udpinfo->spts[1] = udpinfo->dpts[1] = 0xFFFF;
-}
-
-#define UDP_SRC_PORTS 0x01
-#define UDP_DST_PORTS 0x02
-
-/* Function which parses command options; returns true if it
-   ate an option */
-static int
-udp_parse(int c, char **argv, int invert, unsigned int *flags,
-          const void *entry, struct xt_entry_match **match)
-{
-       struct xt_udp *udpinfo = (struct xt_udp *)(*match)->data;
-
-       switch (c) {
-       case '1':
-               if (*flags & UDP_SRC_PORTS)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--source-port' allowed");
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_udp_ports(argv[optind-1], udpinfo->spts);
-               if (invert)
-                       udpinfo->invflags |= XT_UDP_INV_SRCPT;
-               *flags |= UDP_SRC_PORTS;
-               break;
-
-       case '2':
-               if (*flags & UDP_DST_PORTS)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Only one `--destination-port' allowed");
-               check_inverse(optarg, &invert, &optind, 0);
-               parse_udp_ports(argv[optind-1], udpinfo->dpts);
-               if (invert)
-                       udpinfo->invflags |= XT_UDP_INV_DSTPT;
-               *flags |= UDP_DST_PORTS;
-               break;
-
-       default:
-               return 0;
-       }
-
-       return 1;
-}
-
-static char *
-port_to_service(int port)
-{
-       struct servent *service;
-
-       if ((service = getservbyport(htons(port), "udp")))
-               return service->s_name;
-
-       return NULL;
-}
-
-static void
-print_port(u_int16_t port, int numeric)
-{
-       char *service;
-
-       if (numeric || (service = port_to_service(port)) == NULL)
-               printf("%u", port);
-       else
-               printf("%s", service);
-}
-
-static void
-print_ports(const char *name, u_int16_t min, u_int16_t max,
-           int invert, int numeric)
-{
-       const char *inv = invert ? "!" : "";
-
-       if (min != 0 || max != 0xFFFF || invert) {
-               printf("%s", name);
-               if (min == max) {
-                       printf(":%s", inv);
-                       print_port(min, numeric);
-               } else {
-                       printf("s:%s", inv);
-                       print_port(min, numeric);
-                       printf(":");
-                       print_port(max, numeric);
-               }
-               printf(" ");
-       }
-}
-
-/* Prints out the union ipt_matchinfo. */
-static void
-udp_print(const void *ip, const struct xt_entry_match *match, int numeric)
-{
-       const struct xt_udp *udp = (struct xt_udp *)match->data;
-
-       printf("udp ");
-       print_ports("spt", udp->spts[0], udp->spts[1],
-                   udp->invflags & XT_UDP_INV_SRCPT,
-                   numeric);
-       print_ports("dpt", udp->dpts[0], udp->dpts[1],
-                   udp->invflags & XT_UDP_INV_DSTPT,
-                   numeric);
-       if (udp->invflags & ~XT_UDP_INV_MASK)
-               printf("Unknown invflags: 0x%X ",
-                      udp->invflags & ~XT_UDP_INV_MASK);
-}
-
-/* Saves the union ipt_matchinfo in parsable form to stdout. */
-static void udp_save(const void *ip, const struct xt_entry_match *match)
-{
-       const struct xt_udp *udpinfo = (struct xt_udp *)match->data;
-
-       if (udpinfo->spts[0] != 0
-           || udpinfo->spts[1] != 0xFFFF) {
-               if (udpinfo->invflags & XT_UDP_INV_SRCPT)
-                       printf("! ");
-               if (udpinfo->spts[0]
-                   != udpinfo->spts[1])
-                       printf("--sport %u:%u ",
-                              udpinfo->spts[0],
-                              udpinfo->spts[1]);
-               else
-                       printf("--sport %u ",
-                              udpinfo->spts[0]);
-       }
-
-       if (udpinfo->dpts[0] != 0
-           || udpinfo->dpts[1] != 0xFFFF) {
-               if (udpinfo->invflags & XT_UDP_INV_DSTPT)
-                       printf("! ");
-               if (udpinfo->dpts[0]
-                   != udpinfo->dpts[1])
-                       printf("--dport %u:%u ",
-                              udpinfo->dpts[0],
-                              udpinfo->dpts[1]);
-               else
-                       printf("--dport %u ",
-                              udpinfo->dpts[0]);
-       }
-}
-
-static struct xtables_match udp_match = {
-       .family         = AF_INET,
-       .name           = "udp",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_udp)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_udp)),
-       .help           = udp_help,
-       .init           = udp_init,
-       .parse          = udp_parse,
-       .print          = udp_print,
-       .save           = udp_save,
-       .extra_opts     = udp_opts,
-};
-
-static struct xtables_match udp_match6 = {
-       .family         = AF_INET6,
-       .name           = "udp",
-       .version        = XTABLES_VERSION,
-       .size           = XT_ALIGN(sizeof(struct xt_udp)),
-       .userspacesize  = XT_ALIGN(sizeof(struct xt_udp)),
-       .help           = udp_help,
-       .init           = udp_init,
-       .parse          = udp_parse,
-       .print          = udp_print,
-       .save           = udp_save,
-       .extra_opts     = udp_opts,
-};
-
-void
-_init(void)
-{
-       xtables_register_match(&udp_match);
-       xtables_register_match(&udp_match6);
-}
diff --git a/extensions/libxt_udp.man b/extensions/libxt_udp.man
deleted file mode 100644 (file)
index af0682c..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-These extensions can be used if `--protocol udp' is specified.  It
-provides the following options:
-.TP
-[\fB!\fP] \fB--source-port\fP,\fB--sport\fP \fIport\fP[\fB:\fP\fIport\fP]
-Source port or port range specification.
-See the description of the
-.B --source-port
-option of the TCP extension for details.
-.TP
-[\fB!\fP] \fB--destination-port\fP,\fB--dport\fP \fIport\fP[\fB:\fP\fIport\fP]
-Destination port or port range specification.
-See the description of the
-.B --destination-port
-option of the TCP extension for details.
diff --git a/extensions/tos_values.c b/extensions/tos_values.c
deleted file mode 100644 (file)
index 1630834..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-#include <stdbool.h>
-#include <stdint.h>
-#include <stdio.h>
-
-struct tos_value_mask {
-       uint8_t value, mask;
-};
-
-static const struct tos_symbol_info {
-       unsigned char value;
-       const char *name;
-} tos_symbol_names[] = {
-       {IPTOS_LOWDELAY,    "Minimize-Delay"},
-       {IPTOS_THROUGHPUT,  "Maximize-Throughput"},
-       {IPTOS_RELIABILITY, "Maximize-Reliability"},
-       {IPTOS_MINCOST,     "Minimize-Cost"},
-       {IPTOS_NORMALSVC,   "Normal-Service"},
-       { .name = NULL }
-};
-
-/*
- * tos_parse_numeric - parse sth. like "15/255"
- *
- * @s:         input string
- * @info:      accompanying structure
- * @bits:      number of bits that are allowed
- *             (8 for IPv4 TOS field, 4 for IPv6 Priority Field)
- */
-static bool tos_parse_numeric(const char *str, struct tos_value_mask *tvm,
-                              unsigned int bits)
-{
-       const unsigned int max = (1 << bits) - 1;
-       unsigned int value;
-       char *end;
-
-       strtonum(str, &end, &value, 0, max);
-       tvm->value = value;
-       tvm->mask  = max;
-
-       if (*end == '/') {
-               const char *p = end + 1;
-
-               if (!strtonum(p, &end, &value, 0, max))
-                       exit_error(PARAMETER_PROBLEM, "Illegal value: \"%s\"",
-                                  str);
-               tvm->mask = value;
-       }
-
-       if (*end != '\0')
-               exit_error(PARAMETER_PROBLEM, "Illegal value: \"%s\"", str);
-       return true;
-}
-
-static bool tos_parse_symbolic(const char *str, struct tos_value_mask *tvm,
-    unsigned int def_mask)
-{
-       const unsigned int max = 255;
-       const struct tos_symbol_info *symbol;
-
-       if (strtonum(str, NULL, NULL, 0, max))
-               return tos_parse_numeric(str, tvm, max);
-
-       /* Do not consider ECN bits */
-       tvm->mask = def_mask;
-       for (symbol = tos_symbol_names; symbol->name != NULL; ++symbol)
-               if (strcasecmp(str, symbol->name) == 0) {
-                       tvm->value = symbol->value;
-                       return true;
-               }
-
-       exit_error(PARAMETER_PROBLEM, "Symbolic name \"%s\" is unknown", str);
-       return false;
-}
-
-static bool tos_try_print_symbolic(const char *prefix,
-    u_int8_t value, u_int8_t mask)
-{
-       const struct tos_symbol_info *symbol;
-
-       if (mask != 0x3F)
-               return false;
-
-       for (symbol = tos_symbol_names; symbol->name != NULL; ++symbol)
-               if (value == symbol->value) {
-                       printf("%s%s ", prefix, symbol->name);
-                       return true;
-               }
-
-       return false;
-}
diff --git a/include/ip6tables.h b/include/ip6tables.h
deleted file mode 100644 (file)
index 077fee9..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef _IP6TABLES_USER_H
-#define _IP6TABLES_USER_H
-
-#include <xtables.h>
-
-#include "libiptc/libip6tc.h"
-
-#ifndef IP6T_SO_GET_REVISION_MATCH /* Old kernel source. */
-#define IP6T_SO_GET_REVISION_MATCH     68
-#define IP6T_SO_GET_REVISION_TARGET    69
-#endif /* IP6T_SO_GET_REVISION_MATCH   Old kernel source */
-
-#define ip6tables_rule_match   xtables_rule_match
-#define ip6t_tryload           xt_tryload
-
-extern int line;
-
-/* Your shared library should call one of these. */
-extern int do_command6(int argc, char *argv[], char **table,
-                      ip6tc_handle_t *handle);
-
-extern int for_each_chain(int (*fn)(const ip6t_chainlabel, int, ip6tc_handle_t *), int verbose, int builtinstoo, ip6tc_handle_t *handle);
-extern int flush_entries(const ip6t_chainlabel chain, int verbose, ip6tc_handle_t *handle);
-extern int delete_chain(const ip6t_chainlabel chain, int verbose, ip6tc_handle_t *handle);
-void print_rule(const struct ip6t_entry *e, ip6tc_handle_t *h, const char *chain, int counters);
-
-#endif /*_IP6TABLES_USER_H*/
diff --git a/include/iptables.h b/include/iptables.h
deleted file mode 100644 (file)
index ecc7168..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-#ifndef _IPTABLES_USER_H
-#define _IPTABLES_USER_H
-
-#include "xtables.h"
-#include "libiptc/libiptc.h"
-
-#ifndef IPT_SO_GET_REVISION_MATCH /* Old kernel source. */
-#define IPT_SO_GET_REVISION_MATCH      (IPT_BASE_CTL + 2)
-#define IPT_SO_GET_REVISION_TARGET     (IPT_BASE_CTL + 3)
-#endif /* IPT_SO_GET_REVISION_MATCH   Old kernel source */
-
-#define iptables_rule_match    xtables_rule_match
-#define ipt_tryload            xt_tryload
-
-extern int line;
-
-/* Your shared library should call one of these. */
-extern int do_command(int argc, char *argv[], char **table,
-                     iptc_handle_t *handle);
-extern int delete_chain(const ipt_chainlabel chain, int verbose,
-                       iptc_handle_t *handle);
-extern int flush_entries(const ipt_chainlabel chain, int verbose, 
-                       iptc_handle_t *handle);
-extern int for_each_chain(int (*fn)(const ipt_chainlabel, int, iptc_handle_t *),
-               int verbose, int builtinstoo, iptc_handle_t *handle);
-extern void print_rule(const struct ipt_entry *e,
-               iptc_handle_t *handle, const char *chain, int counters);
-
-/* kernel revision handling */
-extern int kernel_version;
-extern void get_kernel_version(void);
-#define LINUX_VERSION(x,y,z)   (0x10000*(x) + 0x100*(y) + z)
-#define LINUX_VERSION_MAJOR(x) (((x)>>16) & 0xFF)
-#define LINUX_VERSION_MINOR(x) (((x)>> 8) & 0xFF)
-#define LINUX_VERSION_PATCH(x) ( (x)      & 0xFF)
-
-#endif /*_IPTABLES_USER_H*/
diff --git a/include/libipq/libipq.h b/include/libipq/libipq.h
deleted file mode 100644 (file)
index 3cd1329..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * libipq.h
- *
- * IPQ library for userspace.
- *
- * Author: James Morris <jmorris@intercode.com.au>
- *
- * Copyright (c) 2000-2001 Netfilter Core Team
- *
- * 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 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.
- *
- */
-#ifndef _LIBIPQ_H
-#define _LIBIPQ_H
-
-#include <errno.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/uio.h>
-#include <asm/types.h>
-#include <linux/netlink.h>
-
-#include <linux/netfilter_ipv4/ip_queue.h>
-typedef unsigned long ipq_id_t;
-
-#ifdef DEBUG_LIBIPQ
-#include <stdio.h>
-#define LDEBUG(x...) fprintf(stderr, ## x)
-#else
-#define LDEBUG(x...)
-#endif /* DEBUG_LIBIPQ */
-
-/* FIXME: glibc sucks */
-#ifndef MSG_TRUNC
-#define MSG_TRUNC 0x20
-#endif
-
-struct ipq_handle
-{
-       int fd;
-       u_int8_t blocking;
-       struct sockaddr_nl local;
-       struct sockaddr_nl peer;
-};
-
-struct ipq_handle *ipq_create_handle(u_int32_t flags, u_int32_t protocol);
-
-int ipq_destroy_handle(struct ipq_handle *h);
-
-ssize_t ipq_read(const struct ipq_handle *h,
-                unsigned char *buf, size_t len, int timeout);
-
-int ipq_set_mode(const struct ipq_handle *h, u_int8_t mode, size_t len);
-
-ipq_packet_msg_t *ipq_get_packet(const unsigned char *buf);
-
-int ipq_message_type(const unsigned char *buf);
-
-int ipq_get_msgerr(const unsigned char *buf);
-
-int ipq_set_verdict(const struct ipq_handle *h,
-                    ipq_id_t id,
-                    unsigned int verdict,
-                    size_t data_len,
-                    unsigned char *buf);
-
-int ipq_ctl(const struct ipq_handle *h, int request, ...);
-
-char *ipq_errstr(void);
-void ipq_perror(const char *s);
-
-#endif /* _LIBIPQ_H */
-
diff --git a/include/libiptc/ipt_kernel_headers.h b/include/libiptc/ipt_kernel_headers.h
deleted file mode 100644 (file)
index 18861fe..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/* This is the userspace/kernel interface for Generic IP Chains,
-   required for libc6. */
-#ifndef _FWCHAINS_KERNEL_HEADERS_H
-#define _FWCHAINS_KERNEL_HEADERS_H
-
-#include <limits.h>
-
-#if defined(__GLIBC__) && __GLIBC__ == 2
-#include <netinet/ip.h>
-#include <netinet/in.h>
-#include <netinet/ip_icmp.h>
-#include <netinet/tcp.h>
-#include <netinet/udp.h>
-#include <net/if.h>
-#include <sys/types.h>
-#else /* libc5 */
-#include <sys/socket.h>
-#include <linux/ip.h>
-#include <linux/in.h>
-#include <linux/if.h>
-#include <linux/icmp.h>
-#include <linux/tcp.h>
-#include <linux/udp.h>
-#include <linux/types.h>
-#include <linux/in6.h>
-#endif
-#endif
diff --git a/include/libiptc/libip6tc.h b/include/libiptc/libip6tc.h
deleted file mode 100644 (file)
index 6e8a565..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-#ifndef _LIBIP6TC_H
-#define _LIBIP6TC_H
-/* Library which manipulates firewall rules. Version 0.2. */
-
-#include <linux/types.h>
-#include <libiptc/ipt_kernel_headers.h>
-#include <linux/netfilter_ipv6/ip6_tables.h>
-
-#ifndef IP6T_MIN_ALIGN
-#define IP6T_MIN_ALIGN (__alignof__(struct ip6t_entry))
-#endif
-#define IP6T_ALIGN(s) (((s) + (IP6T_MIN_ALIGN-1)) & ~(IP6T_MIN_ALIGN-1))
-
-typedef char ip6t_chainlabel[32];
-
-#define IP6TC_LABEL_ACCEPT "ACCEPT"
-#define IP6TC_LABEL_DROP "DROP"
-#define IP6TC_LABEL_QUEUE   "QUEUE"
-#define IP6TC_LABEL_RETURN "RETURN"
-
-/* Transparent handle type. */
-typedef struct ip6tc_handle *ip6tc_handle_t;
-
-/* Does this chain exist? */
-int ip6tc_is_chain(const char *chain, const ip6tc_handle_t handle);
-
-/* Take a snapshot of the rules. Returns NULL on error. */
-ip6tc_handle_t ip6tc_init(const char *tablename);
-
-/* Cleanup after ip6tc_init(). */
-void ip6tc_free(ip6tc_handle_t *h);
-
-/* Iterator functions to run through the chains.  Returns NULL at end. */
-const char *ip6tc_first_chain(ip6tc_handle_t *handle);
-const char *ip6tc_next_chain(ip6tc_handle_t *handle);
-
-/* Get first rule in the given chain: NULL for empty chain. */
-const struct ip6t_entry *ip6tc_first_rule(const char *chain,
-                                         ip6tc_handle_t *handle);
-
-/* Returns NULL when rules run out. */
-const struct ip6t_entry *ip6tc_next_rule(const struct ip6t_entry *prev,
-                                        ip6tc_handle_t *handle);
-
-/* Returns a pointer to the target name of this position. */
-const char *ip6tc_get_target(const struct ip6t_entry *e,
-                            ip6tc_handle_t *handle);
-
-/* Is this a built-in chain? */
-int ip6tc_builtin(const char *chain, const ip6tc_handle_t handle);
-
-/* Get the policy of a given built-in chain */
-const char *ip6tc_get_policy(const char *chain,
-                            struct ip6t_counters *counters,
-                            ip6tc_handle_t *handle);
-
-/* These functions return TRUE for OK or 0 and set errno. If errno ==
-   0, it means there was a version error (ie. upgrade libiptc). */
-/* Rule numbers start at 1 for the first rule. */
-
-/* Insert the entry `fw' in chain `chain' into position `rulenum'. */
-int ip6tc_insert_entry(const ip6t_chainlabel chain,
-                      const struct ip6t_entry *e,
-                      unsigned int rulenum,
-                      ip6tc_handle_t *handle);
-
-/* Atomically replace rule `rulenum' in `chain' with `fw'. */
-int ip6tc_replace_entry(const ip6t_chainlabel chain,
-                       const struct ip6t_entry *e,
-                       unsigned int rulenum,
-                       ip6tc_handle_t *handle);
-
-/* Append entry `fw' to chain `chain'. Equivalent to insert with
-   rulenum = length of chain. */
-int ip6tc_append_entry(const ip6t_chainlabel chain,
-                      const struct ip6t_entry *e,
-                      ip6tc_handle_t *handle);
-
-/* Delete the first rule in `chain' which matches `fw'. */
-int ip6tc_delete_entry(const ip6t_chainlabel chain,
-                      const struct ip6t_entry *origfw,
-                      unsigned char *matchmask,
-                      ip6tc_handle_t *handle);
-
-/* Delete the rule in position `rulenum' in `chain'. */
-int ip6tc_delete_num_entry(const ip6t_chainlabel chain,
-                          unsigned int rulenum,
-                          ip6tc_handle_t *handle);
-
-/* Check the packet `fw' on chain `chain'. Returns the verdict, or
-   NULL and sets errno. */
-const char *ip6tc_check_packet(const ip6t_chainlabel chain,
-                              struct ip6t_entry *,
-                              ip6tc_handle_t *handle);
-
-/* Flushes the entries in the given chain (ie. empties chain). */
-int ip6tc_flush_entries(const ip6t_chainlabel chain,
-                       ip6tc_handle_t *handle);
-
-/* Zeroes the counters in a chain. */
-int ip6tc_zero_entries(const ip6t_chainlabel chain,
-                      ip6tc_handle_t *handle);
-
-/* Creates a new chain. */
-int ip6tc_create_chain(const ip6t_chainlabel chain,
-                      ip6tc_handle_t *handle);
-
-/* Deletes a chain. */
-int ip6tc_delete_chain(const ip6t_chainlabel chain,
-                      ip6tc_handle_t *handle);
-
-/* Renames a chain. */
-int ip6tc_rename_chain(const ip6t_chainlabel oldname,
-                      const ip6t_chainlabel newname,
-                      ip6tc_handle_t *handle);
-
-/* Sets the policy on a built-in chain. */
-int ip6tc_set_policy(const ip6t_chainlabel chain,
-                    const ip6t_chainlabel policy,
-                    struct ip6t_counters *counters,
-                    ip6tc_handle_t *handle);
-
-/* Get the number of references to this chain */
-int ip6tc_get_references(unsigned int *ref, const ip6t_chainlabel chain,
-                        ip6tc_handle_t *handle);
-
-/* read packet and byte counters for a specific rule */
-struct ip6t_counters *ip6tc_read_counter(const ip6t_chainlabel chain,
-                                       unsigned int rulenum,
-                                       ip6tc_handle_t *handle);
-
-/* zero packet and byte counters for a specific rule */
-int ip6tc_zero_counter(const ip6t_chainlabel chain,
-                      unsigned int rulenum,
-                      ip6tc_handle_t *handle);
-
-/* set packet and byte counters for a specific rule */
-int ip6tc_set_counter(const ip6t_chainlabel chain,
-                     unsigned int rulenum,
-                     struct ip6t_counters *counters,
-                     ip6tc_handle_t *handle);
-
-/* Makes the actual changes. */
-int ip6tc_commit(ip6tc_handle_t *handle);
-
-/* Get raw socket. */
-int ip6tc_get_raw_socket(void);
-
-/* Translates errno numbers into more human-readable form than strerror. */
-const char *ip6tc_strerror(int err);
-
-/* Return prefix length, or -1 if not contiguous */
-int ipv6_prefix_length(const struct in6_addr *a);
-
-extern void dump_entries6(const ip6tc_handle_t);
-
-#endif /* _LIBIP6TC_H */
diff --git a/include/libiptc/libiptc.h b/include/libiptc/libiptc.h
deleted file mode 100644 (file)
index 1f6f95d..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-#ifndef _LIBIPTC_H
-#define _LIBIPTC_H
-/* Library which manipulates filtering rules. */
-
-#include <linux/types.h>
-#include <libiptc/ipt_kernel_headers.h>
-#include <linux/netfilter_ipv4/ip_tables.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef IPT_MIN_ALIGN
-/* ipt_entry has pointers and u_int64_t's in it, so if you align to
-   it, you'll also align to any crazy matches and targets someone
-   might write */
-#define IPT_MIN_ALIGN (__alignof__(struct ipt_entry))
-#endif
-
-#define IPT_ALIGN(s) (((s) + ((IPT_MIN_ALIGN)-1)) & ~((IPT_MIN_ALIGN)-1))
-
-typedef char ipt_chainlabel[32];
-
-#define IPTC_LABEL_ACCEPT  "ACCEPT"
-#define IPTC_LABEL_DROP    "DROP"
-#define IPTC_LABEL_QUEUE   "QUEUE"
-#define IPTC_LABEL_RETURN  "RETURN"
-
-/* Transparent handle type. */
-typedef struct iptc_handle *iptc_handle_t;
-
-/* Does this chain exist? */
-int iptc_is_chain(const char *chain, const iptc_handle_t handle);
-
-/* Take a snapshot of the rules.  Returns NULL on error. */
-iptc_handle_t iptc_init(const char *tablename);
-
-/* Cleanup after iptc_init(). */
-void iptc_free(iptc_handle_t *h);
-
-/* Iterator functions to run through the chains.  Returns NULL at end. */
-const char *iptc_first_chain(iptc_handle_t *handle);
-const char *iptc_next_chain(iptc_handle_t *handle);
-
-/* Get first rule in the given chain: NULL for empty chain. */
-const struct ipt_entry *iptc_first_rule(const char *chain,
-                                       iptc_handle_t *handle);
-
-/* Returns NULL when rules run out. */
-const struct ipt_entry *iptc_next_rule(const struct ipt_entry *prev,
-                                      iptc_handle_t *handle);
-
-/* Returns a pointer to the target name of this entry. */
-const char *iptc_get_target(const struct ipt_entry *e,
-                           iptc_handle_t *handle);
-
-/* Is this a built-in chain? */
-int iptc_builtin(const char *chain, const iptc_handle_t handle);
-
-/* Get the policy of a given built-in chain */
-const char *iptc_get_policy(const char *chain,
-                           struct ipt_counters *counter,
-                           iptc_handle_t *handle);
-
-/* These functions return TRUE for OK or 0 and set errno.  If errno ==
-   0, it means there was a version error (ie. upgrade libiptc). */
-/* Rule numbers start at 1 for the first rule. */
-
-/* Insert the entry `e' in chain `chain' into position `rulenum'. */
-int iptc_insert_entry(const ipt_chainlabel chain,
-                     const struct ipt_entry *e,
-                     unsigned int rulenum,
-                     iptc_handle_t *handle);
-
-/* Atomically replace rule `rulenum' in `chain' with `e'. */
-int iptc_replace_entry(const ipt_chainlabel chain,
-                      const struct ipt_entry *e,
-                      unsigned int rulenum,
-                      iptc_handle_t *handle);
-
-/* Append entry `e' to chain `chain'.  Equivalent to insert with
-   rulenum = length of chain. */
-int iptc_append_entry(const ipt_chainlabel chain,
-                     const struct ipt_entry *e,
-                     iptc_handle_t *handle);
-
-/* Delete the first rule in `chain' which matches `e', subject to
-   matchmask (array of length == origfw) */
-int iptc_delete_entry(const ipt_chainlabel chain,
-                     const struct ipt_entry *origfw,
-                     unsigned char *matchmask,
-                     iptc_handle_t *handle);
-
-/* Delete the rule in position `rulenum' in `chain'. */
-int iptc_delete_num_entry(const ipt_chainlabel chain,
-                         unsigned int rulenum,
-                         iptc_handle_t *handle);
-
-/* Check the packet `e' on chain `chain'.  Returns the verdict, or
-   NULL and sets errno. */
-const char *iptc_check_packet(const ipt_chainlabel chain,
-                             struct ipt_entry *entry,
-                             iptc_handle_t *handle);
-
-/* Flushes the entries in the given chain (ie. empties chain). */
-int iptc_flush_entries(const ipt_chainlabel chain,
-                      iptc_handle_t *handle);
-
-/* Zeroes the counters in a chain. */
-int iptc_zero_entries(const ipt_chainlabel chain,
-                     iptc_handle_t *handle);
-
-/* Creates a new chain. */
-int iptc_create_chain(const ipt_chainlabel chain,
-                     iptc_handle_t *handle);
-
-/* Deletes a chain. */
-int iptc_delete_chain(const ipt_chainlabel chain,
-                     iptc_handle_t *handle);
-
-/* Renames a chain. */
-int iptc_rename_chain(const ipt_chainlabel oldname,
-                     const ipt_chainlabel newname,
-                     iptc_handle_t *handle);
-
-/* Sets the policy on a built-in chain. */
-int iptc_set_policy(const ipt_chainlabel chain,
-                   const ipt_chainlabel policy,
-                   struct ipt_counters *counters,
-                   iptc_handle_t *handle);
-
-/* Get the number of references to this chain */
-int iptc_get_references(unsigned int *ref,
-                       const ipt_chainlabel chain,
-                       iptc_handle_t *handle);
-
-/* read packet and byte counters for a specific rule */
-struct ipt_counters *iptc_read_counter(const ipt_chainlabel chain,
-                                      unsigned int rulenum,
-                                      iptc_handle_t *handle);
-
-/* zero packet and byte counters for a specific rule */
-int iptc_zero_counter(const ipt_chainlabel chain,
-                     unsigned int rulenum,
-                     iptc_handle_t *handle);
-
-/* set packet and byte counters for a specific rule */
-int iptc_set_counter(const ipt_chainlabel chain,
-                    unsigned int rulenum,
-                    struct ipt_counters *counters,
-                    iptc_handle_t *handle);
-
-/* Makes the actual changes. */
-int iptc_commit(iptc_handle_t *handle);
-
-/* Get raw socket. */
-int iptc_get_raw_socket(void);
-
-/* Translates errno numbers into more human-readable form than strerror. */
-const char *iptc_strerror(int err);
-
-extern void dump_entries(const iptc_handle_t);
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* _LIBIPTC_H */
diff --git a/include/libiptc/libxtc.h b/include/libiptc/libxtc.h
deleted file mode 100644 (file)
index 031afb5..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-#ifndef _LIBXTC_H
-#define _LIBXTC_H
-/* Library which manipulates filtering rules. */
-
-#include <libiptc/ipt_kernel_headers.h>
-#include <linux/netfilter/x_tables.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef XT_MIN_ALIGN
-/* xt_entry has pointers and u_int64_t's in it, so if you align to
-   it, you'll also align to any crazy matches and targets someone
-   might write */
-#define XT_MIN_ALIGN (__alignof__(struct xt_entry))
-#endif
-
-#ifndef XT_ALIGN
-#define XT_ALIGN(s) (((s) + ((XT_MIN_ALIGN)-1)) & ~((XT_MIN_ALIGN)-1))
-#endif
-
-typedef char xt_chainlabel[32];
-
-#define XTC_LABEL_ACCEPT  "ACCEPT"
-#define XTC_LABEL_DROP    "DROP"
-#define XTC_LABEL_QUEUE   "QUEUE"
-#define XTC_LABEL_RETURN  "RETURN"
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _LIBXTC_H */
diff --git a/include/libipulog/libipulog.h b/include/libipulog/libipulog.h
deleted file mode 100644 (file)
index 3f4cc2c..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef _LIBIPULOG_H
-#define _LIBIPULOG_H
-
-/* libipulog.h,v 1.3 2001/05/21 19:15:16 laforge Exp */
-
-#include <errno.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/uio.h>
-#include <asm/types.h>
-#include <linux/netlink.h>
-#include <net/if.h>
-#include <linux/netfilter_ipv4/ipt_ULOG.h>
-
-/* FIXME: glibc sucks */
-#ifndef MSG_TRUNC 
-#define MSG_TRUNC      0x20
-#endif
-
-struct ipulog_handle;
-
-u_int32_t ipulog_group2gmask(u_int32_t group);
-
-struct ipulog_handle *ipulog_create_handle(u_int32_t gmask);
-
-void ipulog_destroy_handle(struct ipulog_handle *h);
-
-ssize_t ipulog_read(struct ipulog_handle *h,
-                   unsigned char *buf, size_t len, int timeout);
-
-ulog_packet_msg_t *ipulog_get_packet(struct ipulog_handle *h,
-                                    const unsigned char *buf,
-                                    size_t len);
-
-void ipulog_perror(const char *s);
-
-#endif /* _LIBULOG_H */
diff --git a/include/linux/netfilter.h b/include/linux/netfilter.h
deleted file mode 100644 (file)
index 4196a51..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#ifndef __LINUX_NETFILTER_H
-#define __LINUX_NETFILTER_H
-
-
-/* Responses from hook functions. */
-#define NF_DROP 0
-#define NF_ACCEPT 1
-#define NF_STOLEN 2
-#define NF_QUEUE 3
-#define NF_REPEAT 4
-#define NF_STOP 5
-#define NF_MAX_VERDICT NF_STOP
-
-/* we overload the higher bits for encoding auxiliary data such as the queue
- * number. Not nice, but better than additional function arguments. */
-#define NF_VERDICT_MASK 0x0000ffff
-#define NF_VERDICT_BITS 16
-
-#define NF_VERDICT_QMASK 0xffff0000
-#define NF_VERDICT_QBITS 16
-
-#define NF_QUEUE_NR(x) ((((x) << NF_VERDICT_BITS) & NF_VERDICT_QMASK) | NF_QUEUE)
-
-/* only for userspace compatibility */
-/* Generic cache responses from hook functions.
-   <= 0x2000 is used for protocol-flags. */
-#define NFC_UNKNOWN 0x4000
-#define NFC_ALTERED 0x8000
-
-enum nf_inet_hooks {
-       NF_INET_PRE_ROUTING,
-       NF_INET_LOCAL_IN,
-       NF_INET_FORWARD,
-       NF_INET_LOCAL_OUT,
-       NF_INET_POST_ROUTING,
-       NF_INET_NUMHOOKS
-};
-
-union nf_inet_addr {
-       __u32           all[4];
-       __be32          ip;
-       __be32          ip6[4];
-       struct in_addr  in;
-       struct in6_addr in6;
-};
-
-#endif /*__LINUX_NETFILTER_H*/
diff --git a/include/linux/netfilter/nf_conntrack_common.h b/include/linux/netfilter/nf_conntrack_common.h
deleted file mode 100644 (file)
index b887a99..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-#ifndef _NF_CONNTRACK_COMMON_H
-#define _NF_CONNTRACK_COMMON_H
-/* Connection state tracking for netfilter.  This is separated from,
-   but required by, the NAT layer; it can also be used by an iptables
-   extension. */
-enum ip_conntrack_info
-{
-       /* Part of an established connection (either direction). */
-       IP_CT_ESTABLISHED,
-
-       /* Like NEW, but related to an existing connection, or ICMP error
-          (in either direction). */
-       IP_CT_RELATED,
-
-       /* Started a new connection to track (only
-           IP_CT_DIR_ORIGINAL); may be a retransmission. */
-       IP_CT_NEW,
-
-       /* >= this indicates reply direction */
-       IP_CT_IS_REPLY,
-
-       /* Number of distinct IP_CT types (no NEW in reply dirn). */
-       IP_CT_NUMBER = IP_CT_IS_REPLY * 2 - 1
-};
-
-/* Bitset representing status of connection. */
-enum ip_conntrack_status {
-       /* It's an expected connection: bit 0 set.  This bit never changed */
-       IPS_EXPECTED_BIT = 0,
-       IPS_EXPECTED = (1 << IPS_EXPECTED_BIT),
-
-       /* We've seen packets both ways: bit 1 set.  Can be set, not unset. */
-       IPS_SEEN_REPLY_BIT = 1,
-       IPS_SEEN_REPLY = (1 << IPS_SEEN_REPLY_BIT),
-
-       /* Conntrack should never be early-expired. */
-       IPS_ASSURED_BIT = 2,
-       IPS_ASSURED = (1 << IPS_ASSURED_BIT),
-
-       /* Connection is confirmed: originating packet has left box */
-       IPS_CONFIRMED_BIT = 3,
-       IPS_CONFIRMED = (1 << IPS_CONFIRMED_BIT),
-
-       /* Connection needs src nat in orig dir.  This bit never changed. */
-       IPS_SRC_NAT_BIT = 4,
-       IPS_SRC_NAT = (1 << IPS_SRC_NAT_BIT),
-
-       /* Connection needs dst nat in orig dir.  This bit never changed. */
-       IPS_DST_NAT_BIT = 5,
-       IPS_DST_NAT = (1 << IPS_DST_NAT_BIT),
-
-       /* Both together. */
-       IPS_NAT_MASK = (IPS_DST_NAT | IPS_SRC_NAT),
-
-       /* Connection needs TCP sequence adjusted. */
-       IPS_SEQ_ADJUST_BIT = 6,
-       IPS_SEQ_ADJUST = (1 << IPS_SEQ_ADJUST_BIT),
-
-       /* NAT initialization bits. */
-       IPS_SRC_NAT_DONE_BIT = 7,
-       IPS_SRC_NAT_DONE = (1 << IPS_SRC_NAT_DONE_BIT),
-
-       IPS_DST_NAT_DONE_BIT = 8,
-       IPS_DST_NAT_DONE = (1 << IPS_DST_NAT_DONE_BIT),
-
-       /* Both together */
-       IPS_NAT_DONE_MASK = (IPS_DST_NAT_DONE | IPS_SRC_NAT_DONE),
-
-       /* Connection is dying (removed from lists), can not be unset. */
-       IPS_DYING_BIT = 9,
-       IPS_DYING = (1 << IPS_DYING_BIT),
-
-       /* Connection has fixed timeout. */
-       IPS_FIXED_TIMEOUT_BIT = 10,
-       IPS_FIXED_TIMEOUT = (1 << IPS_FIXED_TIMEOUT_BIT),
-};
-
-/* Connection tracking event bits */
-enum ip_conntrack_events
-{
-       /* New conntrack */
-       IPCT_NEW_BIT = 0,
-       IPCT_NEW = (1 << IPCT_NEW_BIT),
-
-       /* Expected connection */
-       IPCT_RELATED_BIT = 1,
-       IPCT_RELATED = (1 << IPCT_RELATED_BIT),
-
-       /* Destroyed conntrack */
-       IPCT_DESTROY_BIT = 2,
-       IPCT_DESTROY = (1 << IPCT_DESTROY_BIT),
-
-       /* Timer has been refreshed */
-       IPCT_REFRESH_BIT = 3,
-       IPCT_REFRESH = (1 << IPCT_REFRESH_BIT),
-
-       /* Status has changed */
-       IPCT_STATUS_BIT = 4,
-       IPCT_STATUS = (1 << IPCT_STATUS_BIT),
-
-       /* Update of protocol info */
-       IPCT_PROTOINFO_BIT = 5,
-       IPCT_PROTOINFO = (1 << IPCT_PROTOINFO_BIT),
-
-       /* Volatile protocol info */
-       IPCT_PROTOINFO_VOLATILE_BIT = 6,
-       IPCT_PROTOINFO_VOLATILE = (1 << IPCT_PROTOINFO_VOLATILE_BIT),
-
-       /* New helper for conntrack */
-       IPCT_HELPER_BIT = 7,
-       IPCT_HELPER = (1 << IPCT_HELPER_BIT),
-
-       /* Update of helper info */
-       IPCT_HELPINFO_BIT = 8,
-       IPCT_HELPINFO = (1 << IPCT_HELPINFO_BIT),
-
-       /* Volatile helper info */
-       IPCT_HELPINFO_VOLATILE_BIT = 9,
-       IPCT_HELPINFO_VOLATILE = (1 << IPCT_HELPINFO_VOLATILE_BIT),
-
-       /* NAT info */
-       IPCT_NATINFO_BIT = 10,
-       IPCT_NATINFO = (1 << IPCT_NATINFO_BIT),
-
-       /* Counter highest bit has been set */
-       IPCT_COUNTER_FILLING_BIT = 11,
-       IPCT_COUNTER_FILLING = (1 << IPCT_COUNTER_FILLING_BIT),
-
-       /* Mark is set */
-       IPCT_MARK_BIT = 12,
-       IPCT_MARK = (1 << IPCT_MARK_BIT),
-
-       /* NAT sequence adjustment */
-       IPCT_NATSEQADJ_BIT = 13,
-       IPCT_NATSEQADJ = (1 << IPCT_NATSEQADJ_BIT),
-
-       /* Secmark is set */
-       IPCT_SECMARK_BIT = 14,
-       IPCT_SECMARK = (1 << IPCT_SECMARK_BIT),
-};
-
-enum ip_conntrack_expect_events {
-       IPEXP_NEW_BIT = 0,
-       IPEXP_NEW = (1 << IPEXP_NEW_BIT),
-};
-
-
-#endif /* _NF_CONNTRACK_COMMON_H */
diff --git a/include/linux/netfilter/nf_conntrack_tuple.h b/include/linux/netfilter/nf_conntrack_tuple.h
deleted file mode 100644 (file)
index cd5044e..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Definitions and Declarations for tuple.
- *
- * 16 Dec 2003: Yasuyuki Kozakai @USAGI <yasuyuki.kozakai@toshiba.co.jp>
- *     - generalize L3 protocol dependent part.
- *
- * Derived from include/linux/netfiter_ipv4/ip_conntrack_tuple.h
- */
-
-#ifndef _NF_CONNTRACK_TUPLE_H
-#define _NF_CONNTRACK_TUPLE_H
-
-#include <linux/netfilter/nf_conntrack_tuple_common.h>
-
-/* A `tuple' is a structure containing the information to uniquely
-  identify a connection.  ie. if two packets have the same tuple, they
-  are in the same connection; if not, they are not.
-
-  We divide the structure along "manipulatable" and
-  "non-manipulatable" lines, for the benefit of the NAT code.
-*/
-
-#define NF_CT_TUPLE_L3SIZE     4
-
-/* The l3 protocol-specific manipulable parts of the tuple: always in
-   network order! */
-union nf_conntrack_address {
-       u_int32_t all[NF_CT_TUPLE_L3SIZE];
-       __be32 ip;
-       __be32 ip6[4];
-};
-
-/* The protocol-specific manipulable parts of the tuple: always in
-   network order! */
-union nf_conntrack_man_proto
-{
-       /* Add other protocols here. */
-       u_int16_t all;
-
-       struct {
-               __be16 port;
-       } tcp;
-       struct {
-               __be16 port;
-       } udp;
-       struct {
-               __be16 id;
-       } icmp;
-       struct {
-               __be16 port;
-       } sctp;
-       struct {
-               __be16 key;     /* GRE key is 32bit, PPtP only uses 16bit */
-       } gre;
-};
-
-/* The manipulable part of the tuple. */
-struct nf_conntrack_man
-{
-       union nf_conntrack_address u3;
-       union nf_conntrack_man_proto u;
-       /* Layer 3 protocol */
-       u_int16_t l3num;
-};
-
-/* This contains the information to distinguish a connection. */
-struct nf_conntrack_tuple
-{
-       struct nf_conntrack_man src;
-
-       /* These are the parts of the tuple which are fixed. */
-       struct {
-               union nf_conntrack_address u3;
-               union {
-                       /* Add other protocols here. */
-                       u_int16_t all;
-
-                       struct {
-                               __be16 port;
-                       } tcp;
-                       struct {
-                               __be16 port;
-                       } udp;
-                       struct {
-                               u_int8_t type, code;
-                       } icmp;
-                       struct {
-                               __be16 port;
-                       } sctp;
-                       struct {
-                               __be16 key;
-                       } gre;
-               } u;
-
-               /* The protocol. */
-               u_int8_t protonum;
-
-               /* The direction (for tuplehash) */
-               u_int8_t dir;
-       } dst;
-};
-
-#endif /* _NF_CONNTRACK_TUPLE_H */
diff --git a/include/linux/netfilter/nf_conntrack_tuple_common.h b/include/linux/netfilter/nf_conntrack_tuple_common.h
deleted file mode 100644 (file)
index 8e145f0..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _NF_CONNTRACK_TUPLE_COMMON_H
-#define _NF_CONNTRACK_TUPLE_COMMON_H
-
-enum ip_conntrack_dir
-{
-       IP_CT_DIR_ORIGINAL,
-       IP_CT_DIR_REPLY,
-       IP_CT_DIR_MAX
-};
-
-#define CTINFO2DIR(ctinfo) ((ctinfo) >= IP_CT_IS_REPLY ? IP_CT_DIR_REPLY : IP_CT_DIR_ORIGINAL)
-
-#endif /* _NF_CONNTRACK_TUPLE_COMMON_H */
diff --git a/include/linux/netfilter/nf_nat.h b/include/linux/netfilter/nf_nat.h
deleted file mode 100644 (file)
index 5d3b5e0..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-#ifndef _NF_NAT_H
-#define _NF_NAT_H
-#include <linux/netfilter_ipv4.h>
-#include <linux/netfilter/nf_conntrack_tuple.h>
-
-#define NF_NAT_MAPPING_TYPE_MAX_NAMELEN 16
-
-enum nf_nat_manip_type
-{
-       IP_NAT_MANIP_SRC,
-       IP_NAT_MANIP_DST
-};
-
-/* SRC manip occurs POST_ROUTING or LOCAL_IN */
-#define HOOK2MANIP(hooknum) ((hooknum) != NF_IP_POST_ROUTING && (hooknum) != NF_IP_LOCAL_IN)
-
-#define IP_NAT_RANGE_MAP_IPS 1
-#define IP_NAT_RANGE_PROTO_SPECIFIED 2
-#define IP_NAT_RANGE_PROTO_RANDOM 4
-
-/* Single range specification. */
-struct nf_nat_range
-{
-       /* Set to OR of flags above. */
-       unsigned int flags;
-
-       /* Inclusive: network order. */
-       __be32 min_ip, max_ip;
-
-       /* Inclusive: network order */
-       union nf_conntrack_man_proto min, max;
-};
-
-/* For backwards compat: don't use in modern code. */
-struct nf_nat_multi_range_compat
-{
-       unsigned int rangesize; /* Must be 1. */
-
-       /* hangs off end. */
-       struct nf_nat_range range[1];
-};
-
-#define ip_nat_range nf_nat_range
-#define ip_nat_multi_range nf_nat_multi_range_compat
-#endif
diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h
deleted file mode 100644 (file)
index 89eae5c..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-#ifndef _X_TABLES_H
-#define _X_TABLES_H
-
-#define XT_FUNCTION_MAXNAMELEN 30
-#define XT_TABLE_MAXNAMELEN 32
-
-struct xt_entry_match
-{
-       union {
-               struct {
-                       u_int16_t match_size;
-
-                       /* Used by userspace */
-                       char name[XT_FUNCTION_MAXNAMELEN-1];
-
-                       u_int8_t revision;
-               } user;
-               struct {
-                       u_int16_t match_size;
-
-                       /* Used inside the kernel */
-                       struct xt_match *match;
-               } kernel;
-
-               /* Total length */
-               u_int16_t match_size;
-       } u;
-
-       unsigned char data[0];
-};
-
-struct xt_entry_target
-{
-       union {
-               struct {
-                       u_int16_t target_size;
-
-                       /* Used by userspace */
-                       char name[XT_FUNCTION_MAXNAMELEN-1];
-
-                       u_int8_t revision;
-               } user;
-               struct {
-                       u_int16_t target_size;
-
-                       /* Used inside the kernel */
-                       struct xt_target *target;
-               } kernel;
-
-               /* Total length */
-               u_int16_t target_size;
-       } u;
-
-       unsigned char data[0];
-};
-
-#define XT_TARGET_INIT(__name, __size)                                        \
-{                                                                             \
-       .target.u.user = {                                                     \
-               .target_size    = XT_ALIGN(__size),                            \
-               .name           = __name,                                      \
-       },                                                                     \
-}
-
-struct xt_standard_target
-{
-       struct xt_entry_target target;
-       int verdict;
-};
-
-/* The argument to IPT_SO_GET_REVISION_*.  Returns highest revision
- * kernel supports, if >= revision. */
-struct xt_get_revision
-{
-       char name[XT_FUNCTION_MAXNAMELEN-1];
-
-       u_int8_t revision;
-};
-
-/* CONTINUE verdict for targets */
-#define XT_CONTINUE 0xFFFFFFFF
-
-/* For standard target */
-#define XT_RETURN (-NF_REPEAT - 1)
-
-/* this is a dummy structure to find out the alignment requirement for a struct
- * containing all the fundamental data types that are used in ipt_entry,
- * ip6t_entry and arpt_entry.  This sucks, and it is a hack.  It will be my
- * personal pleasure to remove it -HW
- */
-struct _xt_align
-{
-       u_int8_t u8;
-       u_int16_t u16;
-       u_int32_t u32;
-       u_int64_t u64;
-};
-
-#define XT_ALIGN(s) (((s) + (__alignof__(struct _xt_align)-1))         \
-                       & ~(__alignof__(struct _xt_align)-1))
-
-/* Standard return verdict, or do jump. */
-#define XT_STANDARD_TARGET ""
-/* Error verdict. */
-#define XT_ERROR_TARGET "ERROR"
-
-#define SET_COUNTER(c,b,p) do { (c).bcnt = (b); (c).pcnt = (p); } while(0)
-#define ADD_COUNTER(c,b,p) do { (c).bcnt += (b); (c).pcnt += (p); } while(0)
-
-struct xt_counters
-{
-       u_int64_t pcnt, bcnt;                   /* Packet and byte counters */
-};
-
-/* The argument to IPT_SO_ADD_COUNTERS. */
-struct xt_counters_info
-{
-       /* Which table. */
-       char name[XT_TABLE_MAXNAMELEN];
-
-       unsigned int num_counters;
-
-       /* The counters (actually `number' of these). */
-       struct xt_counters counters[0];
-};
-
-#define XT_INV_PROTO           0x40    /* Invert the sense of PROTO. */
-
-/* fn returns 0 to continue iteration */
-#define XT_MATCH_ITERATE(type, e, fn, args...)                 \
-({                                                             \
-       unsigned int __i;                                       \
-       int __ret = 0;                                          \
-       struct xt_entry_match *__m;                             \
-                                                               \
-       for (__i = sizeof(type);                                \
-            __i < (e)->target_offset;                          \
-            __i += __m->u.match_size) {                        \
-               __m = (void *)e + __i;                          \
-                                                               \
-               __ret = fn(__m , ## args);                      \
-               if (__ret != 0)                                 \
-                       break;                                  \
-       }                                                       \
-       __ret;                                                  \
-})
-
-/* fn returns 0 to continue iteration */
-#define XT_ENTRY_ITERATE_CONTINUE(type, entries, size, n, fn, args...) \
-({                                                             \
-       unsigned int __i, __n;                                  \
-       int __ret = 0;                                          \
-       type *__entry;                                          \
-                                                               \
-       for (__i = 0, __n = 0; __i < (size);                    \
-            __i += __entry->next_offset, __n++) {              \
-               __entry = (void *)(entries) + __i;              \
-               if (__n < n)                                    \
-                       continue;                               \
-                                                               \
-               __ret = fn(__entry , ## args);                  \
-               if (__ret != 0)                                 \
-                       break;                                  \
-       }                                                       \
-       __ret;                                                  \
-})
-
-/* fn returns 0 to continue iteration */
-#define XT_ENTRY_ITERATE(type, entries, size, fn, args...) \
-       XT_ENTRY_ITERATE_CONTINUE(type, entries, size, 0, fn, args)
-
-
-#endif /* _X_TABLES_H */
diff --git a/include/linux/netfilter/xt_CLASSIFY.h b/include/linux/netfilter/xt_CLASSIFY.h
deleted file mode 100644 (file)
index 63056b4..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef _XT_CLASSIFY_H
-#define _XT_CLASSIFY_H
-
-struct xt_classify_target_info {
-       u_int32_t priority;
-       u_int8_t add_mark;
-};
-
-#endif /*_XT_CLASSIFY_H */
diff --git a/include/linux/netfilter/xt_CLASSIFY.h.orig b/include/linux/netfilter/xt_CLASSIFY.h.orig
deleted file mode 100644 (file)
index 5811135..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _XT_CLASSIFY_H
-#define _XT_CLASSIFY_H
-
-struct xt_classify_target_info {
-       u_int32_t priority;
-};
-
-#endif /*_XT_CLASSIFY_H */
diff --git a/include/linux/netfilter/xt_CONNMARK.h b/include/linux/netfilter/xt_CONNMARK.h
deleted file mode 100644 (file)
index 4e58ba4..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-#ifndef _XT_CONNMARK_H_target
-#define _XT_CONNMARK_H_target
-
-/* Copyright (C) 2002,2004 MARA Systems AB <http://www.marasystems.com>
- * by Henrik Nordstrom <hno@marasystems.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 of the License, or
- * (at your option) any later version.
- */
-
-enum {
-       XT_CONNMARK_SET = 0,
-       XT_CONNMARK_SAVE,
-       XT_CONNMARK_RESTORE
-};
-
-struct xt_connmark_target_info {
-       unsigned long mark;
-       unsigned long mask;
-       u_int8_t mode;
-};
-
-struct xt_connmark_tginfo1 {
-       u_int32_t ctmark, ctmask, nfmask;
-       u_int8_t mode;
-};
-
-#endif /*_XT_CONNMARK_H_target*/
diff --git a/include/linux/netfilter/xt_CONNSECMARK.h b/include/linux/netfilter/xt_CONNSECMARK.h
deleted file mode 100644 (file)
index c6bd754..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _XT_CONNSECMARK_H_target
-#define _XT_CONNSECMARK_H_target
-
-enum {
-       CONNSECMARK_SAVE = 1,
-       CONNSECMARK_RESTORE,
-};
-
-struct xt_connsecmark_target_info {
-       u_int8_t mode;
-};
-
-#endif /*_XT_CONNSECMARK_H_target */
diff --git a/include/linux/netfilter/xt_DSCP.h b/include/linux/netfilter/xt_DSCP.h
deleted file mode 100644 (file)
index 14da196..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/* x_tables module for setting the IPv4/IPv6 DSCP field
- *
- * (C) 2002 Harald Welte <laforge@gnumonks.org>
- * based on ipt_FTOS.c (C) 2000 by Matthew G. Marsh <mgm@paktronix.com>
- * This software is distributed under GNU GPL v2, 1991
- *
- * See RFC2474 for a description of the DSCP field within the IP Header.
- *
- * xt_DSCP.h,v 1.7 2002/03/14 12:03:13 laforge Exp
-*/
-#ifndef _XT_DSCP_TARGET_H
-#define _XT_DSCP_TARGET_H
-#include <linux/netfilter/xt_dscp.h>
-
-/* target info */
-struct xt_DSCP_info {
-       u_int8_t dscp;
-};
-
-struct xt_tos_target_info {
-       u_int8_t tos_value;
-       u_int8_t tos_mask;
-};
-
-#endif /* _XT_DSCP_TARGET_H */
diff --git a/include/linux/netfilter/xt_MARK.h b/include/linux/netfilter/xt_MARK.h
deleted file mode 100644 (file)
index 36d7287..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef _XT_MARK_H_target
-#define _XT_MARK_H_target
-
-/* Version 0 */
-struct xt_mark_target_info {
-       unsigned long mark;
-};
-
-/* Version 1 */
-enum {
-       XT_MARK_SET=0,
-       XT_MARK_AND,
-       XT_MARK_OR,
-       IPT_MARK_COPYXID
-};
-
-struct xt_mark_target_info_v1 {
-       unsigned long mark;
-       u_int8_t mode;
-};
-
-struct xt_mark_tginfo2 {
-       u_int32_t mark, mask;
-};
-
-#endif /*_XT_MARK_H_target */
diff --git a/include/linux/netfilter/xt_MARK.h.orig b/include/linux/netfilter/xt_MARK.h.orig
deleted file mode 100644 (file)
index 778b278..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef _XT_MARK_H_target
-#define _XT_MARK_H_target
-
-/* Version 0 */
-struct xt_mark_target_info {
-       unsigned long mark;
-};
-
-/* Version 1 */
-enum {
-       XT_MARK_SET=0,
-       XT_MARK_AND,
-       XT_MARK_OR,
-};
-
-struct xt_mark_target_info_v1 {
-       unsigned long mark;
-       u_int8_t mode;
-};
-
-struct xt_mark_tginfo2 {
-       u_int32_t mark, mask;
-};
-
-#endif /*_XT_MARK_H_target */
diff --git a/include/linux/netfilter/xt_NFLOG.h b/include/linux/netfilter/xt_NFLOG.h
deleted file mode 100644 (file)
index cdcd0ed..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef _XT_NFLOG_TARGET
-#define _XT_NFLOG_TARGET
-
-#define XT_NFLOG_DEFAULT_GROUP         0x1
-#define XT_NFLOG_DEFAULT_THRESHOLD     1
-
-#define XT_NFLOG_MASK                  0x0
-
-struct xt_nflog_info {
-       u_int32_t       len;
-       u_int16_t       group;
-       u_int16_t       threshold;
-       u_int16_t       flags;
-       u_int16_t       pad;
-       char            prefix[64];
-};
-
-#endif /* _XT_NFLOG_TARGET */
diff --git a/include/linux/netfilter/xt_NFQUEUE.h b/include/linux/netfilter/xt_NFQUEUE.h
deleted file mode 100644 (file)
index 9a9af79..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-/* iptables module for using NFQUEUE mechanism
- *
- * (C) 2005 Harald Welte <laforge@netfilter.org>
- *
- * This software is distributed under GNU GPL v2, 1991
- * 
-*/
-#ifndef _XT_NFQ_TARGET_H
-#define _XT_NFQ_TARGET_H
-
-/* target info */
-struct xt_NFQ_info {
-       u_int16_t queuenum;
-};
-
-#endif /* _XT_NFQ_TARGET_H */
diff --git a/include/linux/netfilter/xt_RATEEST.h b/include/linux/netfilter/xt_RATEEST.h
deleted file mode 100644 (file)
index f79e313..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _XT_RATEEST_TARGET_H
-#define _XT_RATEEST_TARGET_H
-
-struct xt_rateest_target_info {
-       char                    name[IFNAMSIZ];
-       int8_t                  interval;
-       u_int8_t                ewma_log;
-
-       /* Used internally by the kernel */
-       struct xt_rateest       *est __attribute__((aligned(8)));
-};
-
-#endif /* _XT_RATEEST_TARGET_H */
diff --git a/include/linux/netfilter/xt_SECMARK.h b/include/linux/netfilter/xt_SECMARK.h
deleted file mode 100644 (file)
index c53fbff..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef _XT_SECMARK_H_target
-#define _XT_SECMARK_H_target
-
-/*
- * This is intended for use by various security subsystems (but not
- * at the same time).
- *
- * 'mode' refers to the specific security subsystem which the
- * packets are being marked for.
- */
-#define SECMARK_MODE_SEL       0x01            /* SELinux */
-#define SECMARK_SELCTX_MAX     256
-
-struct xt_secmark_target_selinux_info {
-       u_int32_t selsid;
-       char selctx[SECMARK_SELCTX_MAX];
-};
-
-struct xt_secmark_target_info {
-       u_int8_t mode;
-       union {
-               struct xt_secmark_target_selinux_info sel;
-       } u;
-};
-
-#endif /*_XT_SECMARK_H_target */
diff --git a/include/linux/netfilter/xt_TCPMSS.h b/include/linux/netfilter/xt_TCPMSS.h
deleted file mode 100644 (file)
index 53a292c..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef _XT_TCPMSS_H
-#define _XT_TCPMSS_H
-
-struct xt_tcpmss_info {
-       u_int16_t mss;
-};
-
-#define XT_TCPMSS_CLAMP_PMTU 0xffff
-
-#endif /* _XT_TCPMSS_H */
diff --git a/include/linux/netfilter/xt_TCPOPTSTRIP.h b/include/linux/netfilter/xt_TCPOPTSTRIP.h
deleted file mode 100644 (file)
index 2db5432..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _XT_TCPOPTSTRIP_H
-#define _XT_TCPOPTSTRIP_H
-
-#define tcpoptstrip_set_bit(bmap, idx) \
-       (bmap[(idx) >> 5] |= 1U << (idx & 31))
-#define tcpoptstrip_test_bit(bmap, idx) \
-       (((1U << (idx & 31)) & bmap[(idx) >> 5]) != 0)
-
-struct xt_tcpoptstrip_target_info {
-       u_int32_t strip_bmap[8];
-};
-
-#endif /* _XT_TCPOPTSTRIP_H */
diff --git a/include/linux/netfilter/xt_comment.h b/include/linux/netfilter/xt_comment.h
deleted file mode 100644 (file)
index eacfedc..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef _XT_COMMENT_H
-#define _XT_COMMENT_H
-
-#define XT_MAX_COMMENT_LEN 256
-
-struct xt_comment_info {
-       unsigned char comment[XT_MAX_COMMENT_LEN];
-};
-
-#endif /* XT_COMMENT_H */
diff --git a/include/linux/netfilter/xt_connbytes.h b/include/linux/netfilter/xt_connbytes.h
deleted file mode 100644 (file)
index c022c98..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef _XT_CONNBYTES_H
-#define _XT_CONNBYTES_H
-
-enum xt_connbytes_what {
-       XT_CONNBYTES_PKTS,
-       XT_CONNBYTES_BYTES,
-       XT_CONNBYTES_AVGPKT,
-};
-
-enum xt_connbytes_direction {
-       XT_CONNBYTES_DIR_ORIGINAL,
-       XT_CONNBYTES_DIR_REPLY,
-       XT_CONNBYTES_DIR_BOTH,
-};
-
-struct xt_connbytes_info
-{
-       struct {
-               aligned_u64 from;       /* count to be matched */
-               aligned_u64 to;         /* count to be matched */
-       } count;
-       u_int8_t what;          /* ipt_connbytes_what */
-       u_int8_t direction;     /* ipt_connbytes_direction */
-};
-#endif
diff --git a/include/linux/netfilter/xt_connlimit.h b/include/linux/netfilter/xt_connlimit.h
deleted file mode 100644 (file)
index 90ae8b4..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef _XT_CONNLIMIT_H
-#define _XT_CONNLIMIT_H
-
-struct xt_connlimit_data;
-
-struct xt_connlimit_info {
-       union {
-               u_int32_t v4_mask;
-               u_int32_t v6_mask[4];
-       };
-       unsigned int limit, inverse;
-
-       /* this needs to be at the end */
-       struct xt_connlimit_data *data __attribute__((aligned(8)));
-};
-
-#endif /* _XT_CONNLIMIT_H */
diff --git a/include/linux/netfilter/xt_connmark.h b/include/linux/netfilter/xt_connmark.h
deleted file mode 100644 (file)
index 359ef86..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef _XT_CONNMARK_H
-#define _XT_CONNMARK_H
-
-/* Copyright (C) 2002,2004 MARA Systems AB <http://www.marasystems.com>
- * by Henrik Nordstrom <hno@marasystems.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 of the License, or
- * (at your option) any later version.
- */
-
-struct xt_connmark_info {
-       unsigned long mark, mask;
-       u_int8_t invert;
-};
-
-struct xt_connmark_mtinfo1 {
-       u_int32_t mark, mask;
-       u_int8_t invert;
-};
-
-#endif /*_XT_CONNMARK_H*/
diff --git a/include/linux/netfilter/xt_conntrack.h b/include/linux/netfilter/xt_conntrack.h
deleted file mode 100644 (file)
index f3fd83e..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/* Header file for kernel module to match connection tracking information.
- * GPL (C) 2001  Marc Boucher (marc@mbsi.ca).
- */
-
-#ifndef _XT_CONNTRACK_H
-#define _XT_CONNTRACK_H
-
-#include <linux/netfilter/nf_conntrack_tuple_common.h>
-
-#define XT_CONNTRACK_STATE_BIT(ctinfo) (1 << ((ctinfo)%IP_CT_IS_REPLY+1))
-#define XT_CONNTRACK_STATE_INVALID (1 << 0)
-
-#define XT_CONNTRACK_STATE_SNAT (1 << (IP_CT_NUMBER + 1))
-#define XT_CONNTRACK_STATE_DNAT (1 << (IP_CT_NUMBER + 2))
-#define XT_CONNTRACK_STATE_UNTRACKED (1 << (IP_CT_NUMBER + 3))
-
-/* flags, invflags: */
-enum {
-       XT_CONNTRACK_STATE        = 1 << 0,
-       XT_CONNTRACK_PROTO        = 1 << 1,
-       XT_CONNTRACK_ORIGSRC      = 1 << 2,
-       XT_CONNTRACK_ORIGDST      = 1 << 3,
-       XT_CONNTRACK_REPLSRC      = 1 << 4,
-       XT_CONNTRACK_REPLDST      = 1 << 5,
-       XT_CONNTRACK_STATUS       = 1 << 6,
-       XT_CONNTRACK_EXPIRES      = 1 << 7,
-       XT_CONNTRACK_ORIGSRC_PORT = 1 << 8,
-       XT_CONNTRACK_ORIGDST_PORT = 1 << 9,
-       XT_CONNTRACK_REPLSRC_PORT = 1 << 10,
-       XT_CONNTRACK_REPLDST_PORT = 1 << 11,
-       XT_CONNTRACK_DIRECTION    = 1 << 12,
-};
-
-/* This is exposed to userspace, so remains frozen in time. */
-struct ip_conntrack_old_tuple
-{
-       struct {
-               __be32 ip;
-               union {
-                       __u16 all;
-               } u;
-       } src;
-
-       struct {
-               __be32 ip;
-               union {
-                       __u16 all;
-               } u;
-
-               /* The protocol. */
-               __u16 protonum;
-       } dst;
-};
-
-struct xt_conntrack_info
-{
-       unsigned int statemask, statusmask;
-
-       struct ip_conntrack_old_tuple tuple[IP_CT_DIR_MAX];
-       struct in_addr sipmsk[IP_CT_DIR_MAX], dipmsk[IP_CT_DIR_MAX];
-
-       unsigned long expires_min, expires_max;
-
-       /* Flags word */
-       u_int8_t flags;
-       /* Inverse flags */
-       u_int8_t invflags;
-};
-
-struct xt_conntrack_mtinfo1 {
-       union nf_inet_addr origsrc_addr, origsrc_mask;
-       union nf_inet_addr origdst_addr, origdst_mask;
-       union nf_inet_addr replsrc_addr, replsrc_mask;
-       union nf_inet_addr repldst_addr, repldst_mask;
-       u_int32_t expires_min, expires_max;
-       u_int16_t l4proto;
-       __be16 origsrc_port, origdst_port;
-       __be16 replsrc_port, repldst_port;
-       u_int16_t match_flags, invert_flags;
-       u_int8_t state_mask, status_mask;
-};
-
-#endif /*_XT_CONNTRACK_H*/
diff --git a/include/linux/netfilter/xt_dccp.h b/include/linux/netfilter/xt_dccp.h
deleted file mode 100644 (file)
index e0221b9..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef _XT_DCCP_H_
-#define _XT_DCCP_H_
-
-#define XT_DCCP_SRC_PORTS              0x01
-#define XT_DCCP_DEST_PORTS             0x02
-#define XT_DCCP_TYPE                   0x04
-#define XT_DCCP_OPTION                 0x08
-
-#define XT_DCCP_VALID_FLAGS            0x0f
-
-struct xt_dccp_info {
-       u_int16_t dpts[2];  /* Min, Max */
-       u_int16_t spts[2];  /* Min, Max */
-
-       u_int16_t flags;
-       u_int16_t invflags;
-
-       u_int16_t typemask;
-       u_int8_t option;
-};
-
-#endif /* _XT_DCCP_H_ */
-
diff --git a/include/linux/netfilter/xt_dscp.h b/include/linux/netfilter/xt_dscp.h
deleted file mode 100644 (file)
index f49bc1a..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/* x_tables module for matching the IPv4/IPv6 DSCP field
- *
- * (C) 2002 Harald Welte <laforge@gnumonks.org>
- * This software is distributed under GNU GPL v2, 1991
- *
- * See RFC2474 for a description of the DSCP field within the IP Header.
- *
- * xt_dscp.h,v 1.3 2002/08/05 19:00:21 laforge Exp
-*/
-#ifndef _XT_DSCP_H
-#define _XT_DSCP_H
-
-#define XT_DSCP_MASK   0xfc    /* 11111100 */
-#define XT_DSCP_SHIFT  2
-#define XT_DSCP_MAX    0x3f    /* 00111111 */
-
-/* match info */
-struct xt_dscp_info {
-       u_int8_t dscp;
-       u_int8_t invert;
-};
-
-struct xt_tos_match_info {
-       u_int8_t tos_mask;
-       u_int8_t tos_value;
-       u_int8_t invert;
-};
-
-#endif /* _XT_DSCP_H */
diff --git a/include/linux/netfilter/xt_esp.h b/include/linux/netfilter/xt_esp.h
deleted file mode 100644 (file)
index 9380fb1..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef _XT_ESP_H
-#define _XT_ESP_H
-
-struct xt_esp
-{
-       u_int32_t spis[2];      /* Security Parameter Index */
-       u_int8_t  invflags;     /* Inverse flags */
-};
-
-/* Values for "invflags" field in struct xt_esp. */
-#define XT_ESP_INV_SPI 0x01    /* Invert the sense of spi. */
-#define XT_ESP_INV_MASK        0x01    /* All possible flags. */
-
-#endif /*_XT_ESP_H*/
diff --git a/include/linux/netfilter/xt_hashlimit.h b/include/linux/netfilter/xt_hashlimit.h
deleted file mode 100644 (file)
index 51b18d8..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-#ifndef _XT_HASHLIMIT_H
-#define _XT_HASHLIMIT_H
-
-/* timings are in milliseconds. */
-#define XT_HASHLIMIT_SCALE 10000
-/* 1/10,000 sec period => max of 10,000/sec.  Min rate is then 429490
-   seconds, or one every 59 hours. */
-
-/* details of this structure hidden by the implementation */
-struct xt_hashlimit_htable;
-
-enum {
-       XT_HASHLIMIT_HASH_DIP = 1 << 0,
-       XT_HASHLIMIT_HASH_DPT = 1 << 1,
-       XT_HASHLIMIT_HASH_SIP = 1 << 2,
-       XT_HASHLIMIT_HASH_SPT = 1 << 3,
-       XT_HASHLIMIT_INVERT   = 1 << 4,
-};
-
-struct hashlimit_cfg {
-       u_int32_t mode;   /* bitmask of XT_HASHLIMIT_HASH_* */
-       u_int32_t avg;    /* Average secs between packets * scale */
-       u_int32_t burst;  /* Period multiplier for upper limit. */
-
-       /* user specified */
-       u_int32_t size;         /* how many buckets */
-       u_int32_t max;          /* max number of entries */
-       u_int32_t gc_interval;  /* gc interval */
-       u_int32_t expire;       /* when do entries expire? */
-};
-
-struct xt_hashlimit_info {
-       char name [IFNAMSIZ];           /* name */
-       struct hashlimit_cfg cfg;
-
-       /* Used internally by the kernel */
-       struct xt_hashlimit_htable *hinfo;
-       union {
-               void *ptr;
-               struct xt_hashlimit_info *master;
-       } u;
-};
-
-struct hashlimit_cfg1 {
-       u_int32_t mode;   /* bitmask of XT_HASHLIMIT_HASH_* */
-       u_int32_t avg;    /* Average secs between packets * scale */
-       u_int32_t burst;  /* Period multiplier for upper limit. */
-
-       /* user specified */
-       u_int32_t size;         /* how many buckets */
-       u_int32_t max;          /* max number of entries */
-       u_int32_t gc_interval;  /* gc interval */
-       u_int32_t expire;       /* when do entries expire? */
-
-       u_int8_t srcmask, dstmask;
-};
-
-struct xt_hashlimit_mtinfo1 {
-       char name[IFNAMSIZ];
-       struct hashlimit_cfg1 cfg;
-
-       /* Used internally by the kernel */
-       struct xt_hashlimit_htable *hinfo __attribute__((aligned(8)));
-};
-
-#endif /*_XT_HASHLIMIT_H*/
diff --git a/include/linux/netfilter/xt_helper.h b/include/linux/netfilter/xt_helper.h
deleted file mode 100644 (file)
index 6b42763..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _XT_HELPER_H
-#define _XT_HELPER_H
-
-struct xt_helper_info {
-       int invert;
-       char name[30];
-};
-#endif /* _XT_HELPER_H */
diff --git a/include/linux/netfilter/xt_iprange.h b/include/linux/netfilter/xt_iprange.h
deleted file mode 100644 (file)
index a4299c7..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef _LINUX_NETFILTER_XT_IPRANGE_H
-#define _LINUX_NETFILTER_XT_IPRANGE_H 1
-
-enum {
-       IPRANGE_SRC     = 1 << 0,       /* match source IP address */
-       IPRANGE_DST     = 1 << 1,       /* match destination IP address */
-       IPRANGE_SRC_INV = 1 << 4,       /* negate the condition */
-       IPRANGE_DST_INV = 1 << 5,       /* -"- */
-};
-
-struct xt_iprange_mtinfo {
-       union nf_inet_addr src_min, src_max;
-       union nf_inet_addr dst_min, dst_max;
-       u_int8_t flags;
-};
-
-#endif /* _LINUX_NETFILTER_XT_IPRANGE_H */
diff --git a/include/linux/netfilter/xt_length.h b/include/linux/netfilter/xt_length.h
deleted file mode 100644 (file)
index 7c2b439..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef _XT_LENGTH_H
-#define _XT_LENGTH_H
-
-struct xt_length_info {
-    u_int16_t  min, max;
-    u_int8_t   invert;
-};
-
-#endif /*_XT_LENGTH_H*/
diff --git a/include/linux/netfilter/xt_limit.h b/include/linux/netfilter/xt_limit.h
deleted file mode 100644 (file)
index b3ce653..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef _XT_RATE_H
-#define _XT_RATE_H
-
-/* timings are in milliseconds. */
-#define XT_LIMIT_SCALE 10000
-
-/* 1/10,000 sec period => max of 10,000/sec.  Min rate is then 429490
-   seconds, or one every 59 hours. */
-struct xt_rateinfo {
-       u_int32_t avg;    /* Average secs between packets * scale */
-       u_int32_t burst;  /* Period multiplier for upper limit. */
-
-       /* Used internally by the kernel */
-       unsigned long prev;
-       u_int32_t credit;
-       u_int32_t credit_cap, cost;
-
-       /* Ugly, ugly fucker. */
-       struct xt_rateinfo *master;
-};
-#endif /*_XT_RATE_H*/
diff --git a/include/linux/netfilter/xt_mac.h b/include/linux/netfilter/xt_mac.h
deleted file mode 100644 (file)
index b892cdc..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _XT_MAC_H
-#define _XT_MAC_H
-
-struct xt_mac_info {
-    unsigned char srcaddr[ETH_ALEN];
-    int invert;
-};
-#endif /*_XT_MAC_H*/
diff --git a/include/linux/netfilter/xt_mark.h b/include/linux/netfilter/xt_mark.h
deleted file mode 100644 (file)
index fae74bc..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef _XT_MARK_H
-#define _XT_MARK_H
-
-struct xt_mark_info {
-    unsigned long mark, mask;
-    u_int8_t invert;
-};
-
-struct xt_mark_mtinfo1 {
-       u_int32_t mark, mask;
-       u_int8_t invert;
-};
-
-#endif /*_XT_MARK_H*/
diff --git a/include/linux/netfilter/xt_multiport.h b/include/linux/netfilter/xt_multiport.h
deleted file mode 100644 (file)
index d49ee41..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-#ifndef _XT_MULTIPORT_H
-#define _XT_MULTIPORT_H
-
-enum xt_multiport_flags
-{
-       XT_MULTIPORT_SOURCE,
-       XT_MULTIPORT_DESTINATION,
-       XT_MULTIPORT_EITHER
-};
-
-#define XT_MULTI_PORTS 15
-
-/* Must fit inside union xt_matchinfo: 16 bytes */
-struct xt_multiport
-{
-       u_int8_t flags;                         /* Type of comparison */
-       u_int8_t count;                         /* Number of ports */
-       u_int16_t ports[XT_MULTI_PORTS];        /* Ports */
-};
-
-struct xt_multiport_v1
-{
-       u_int8_t flags;                         /* Type of comparison */
-       u_int8_t count;                         /* Number of ports */
-       u_int16_t ports[XT_MULTI_PORTS];        /* Ports */
-       u_int8_t pflags[XT_MULTI_PORTS];        /* Port flags */
-       u_int8_t invert;                        /* Invert flag */
-};
-
-#endif /*_XT_MULTIPORT_H*/
diff --git a/include/linux/netfilter/xt_owner.h b/include/linux/netfilter/xt_owner.h
deleted file mode 100644 (file)
index c84e52c..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef _XT_OWNER_MATCH_H
-#define _XT_OWNER_MATCH_H
-
-enum {
-       XT_OWNER_UID    = 1 << 0,
-       XT_OWNER_GID    = 1 << 1,
-       XT_OWNER_SOCKET = 1 << 2,
-};
-
-struct xt_owner_match_info {
-       u_int32_t uid_min, uid_max;
-       u_int32_t gid_min, gid_max;
-       u_int8_t match, invert;
-};
-
-#endif /* _XT_OWNER_MATCH_H */
diff --git a/include/linux/netfilter/xt_physdev.h b/include/linux/netfilter/xt_physdev.h
deleted file mode 100644 (file)
index 9d33619..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef _XT_PHYSDEV_H
-#define _XT_PHYSDEV_H
-
-
-#define XT_PHYSDEV_OP_IN               0x01
-#define XT_PHYSDEV_OP_OUT              0x02
-#define XT_PHYSDEV_OP_BRIDGED          0x04
-#define XT_PHYSDEV_OP_ISIN             0x08
-#define XT_PHYSDEV_OP_ISOUT            0x10
-#define XT_PHYSDEV_OP_MASK             (0x20 - 1)
-
-struct xt_physdev_info {
-       char physindev[IFNAMSIZ];
-       char in_mask[IFNAMSIZ];
-       char physoutdev[IFNAMSIZ];
-       char out_mask[IFNAMSIZ];
-       u_int8_t invert;
-       u_int8_t bitmask;
-};
-
-#endif /*_XT_PHYSDEV_H*/
diff --git a/include/linux/netfilter/xt_pkttype.h b/include/linux/netfilter/xt_pkttype.h
deleted file mode 100644 (file)
index f265cf5..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _XT_PKTTYPE_H
-#define _XT_PKTTYPE_H
-
-struct xt_pkttype_info {
-       int     pkttype;
-       int     invert;
-};
-#endif /*_XT_PKTTYPE_H*/
diff --git a/include/linux/netfilter/xt_policy.h b/include/linux/netfilter/xt_policy.h
deleted file mode 100644 (file)
index 303e380..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-#ifndef _XT_POLICY_H
-#define _XT_POLICY_H
-
-#define XT_POLICY_MAX_ELEM     4
-
-enum xt_policy_flags
-{
-       XT_POLICY_MATCH_IN      = 0x1,
-       XT_POLICY_MATCH_OUT     = 0x2,
-       XT_POLICY_MATCH_NONE    = 0x4,
-       XT_POLICY_MATCH_STRICT  = 0x8,
-};
-
-enum xt_policy_modes
-{
-       XT_POLICY_MODE_TRANSPORT,
-       XT_POLICY_MODE_TUNNEL
-};
-
-struct xt_policy_spec
-{
-       u_int8_t        saddr:1,
-                       daddr:1,
-                       proto:1,
-                       mode:1,
-                       spi:1,
-                       reqid:1;
-};
-
-union xt_policy_addr
-{
-       struct in_addr  a4;
-       struct in6_addr a6;
-};
-
-struct xt_policy_elem
-{
-       union {
-               struct {
-                       union xt_policy_addr saddr;
-                       union xt_policy_addr smask;
-                       union xt_policy_addr daddr;
-                       union xt_policy_addr dmask;
-               };
-       };
-       __be32                  spi;
-       u_int32_t               reqid;
-       u_int8_t                proto;
-       u_int8_t                mode;
-
-       struct xt_policy_spec   match;
-       struct xt_policy_spec   invert;
-};
-
-struct xt_policy_info
-{
-       struct xt_policy_elem pol[XT_POLICY_MAX_ELEM];
-       u_int16_t flags;
-       u_int16_t len;
-};
-
-#endif /* _XT_POLICY_H */
diff --git a/include/linux/netfilter/xt_quota.h b/include/linux/netfilter/xt_quota.h
deleted file mode 100644 (file)
index acd7fd7..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef _XT_QUOTA_H
-#define _XT_QUOTA_H
-
-enum xt_quota_flags {
-       XT_QUOTA_INVERT         = 0x1,
-};
-#define XT_QUOTA_MASK          0x1
-
-struct xt_quota_info {
-       u_int32_t               flags;
-       u_int32_t               pad;
-       aligned_u64             quota;
-       struct xt_quota_info    *master;
-};
-
-#endif /* _XT_QUOTA_H */
diff --git a/include/linux/netfilter/xt_rateest.h b/include/linux/netfilter/xt_rateest.h
deleted file mode 100644 (file)
index 2010cb7..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-#ifndef _XT_RATEEST_MATCH_H
-#define _XT_RATEEST_MATCH_H
-
-enum xt_rateest_match_flags {
-       XT_RATEEST_MATCH_INVERT = 1<<0,
-       XT_RATEEST_MATCH_ABS    = 1<<1,
-       XT_RATEEST_MATCH_REL    = 1<<2,
-       XT_RATEEST_MATCH_DELTA  = 1<<3,
-       XT_RATEEST_MATCH_BPS    = 1<<4,
-       XT_RATEEST_MATCH_PPS    = 1<<5,
-};
-
-enum xt_rateest_match_mode {
-       XT_RATEEST_MATCH_NONE,
-       XT_RATEEST_MATCH_EQ,
-       XT_RATEEST_MATCH_LT,
-       XT_RATEEST_MATCH_GT,
-};
-
-struct xt_rateest_match_info {
-       char                    name1[IFNAMSIZ];
-       char                    name2[IFNAMSIZ];
-       u_int16_t               flags;
-       u_int16_t               mode;
-       u_int32_t               bps1;
-       u_int32_t               pps1;
-       u_int32_t               bps2;
-       u_int32_t               pps2;
-
-       /* Used internally by the kernel */
-       struct xt_rateest       *est1 __attribute__((aligned(8)));
-       struct xt_rateest       *est2 __attribute__((aligned(8)));
-};
-
-#endif /* _XT_RATEEST_MATCH_H */
diff --git a/include/linux/netfilter/xt_realm.h b/include/linux/netfilter/xt_realm.h
deleted file mode 100644 (file)
index 220e872..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef _XT_REALM_H
-#define _XT_REALM_H
-
-struct xt_realm_info {
-       u_int32_t id;
-       u_int32_t mask;
-       u_int8_t invert;
-};
-
-#endif /* _XT_REALM_H */
diff --git a/include/linux/netfilter/xt_sctp.h b/include/linux/netfilter/xt_sctp.h
deleted file mode 100644 (file)
index 62ffdcb..0000000
+++ /dev/null
@@ -1,94 +0,0 @@
-#ifndef _XT_SCTP_H_
-#define _XT_SCTP_H_
-
-#define XT_SCTP_SRC_PORTS              0x01
-#define XT_SCTP_DEST_PORTS             0x02
-#define XT_SCTP_CHUNK_TYPES            0x04
-
-#define XT_SCTP_VALID_FLAGS            0x07
-
-/* temporary */
-#define SCTP_ARRAY_SIZE(x) (sizeof(x) / sizeof(*(x)))
-
-
-struct xt_sctp_flag_info {
-       u_int8_t chunktype;
-       u_int8_t flag;
-       u_int8_t flag_mask;
-};
-
-#define XT_NUM_SCTP_FLAGS      4
-
-struct xt_sctp_info {
-       u_int16_t dpts[2];  /* Min, Max */
-       u_int16_t spts[2];  /* Min, Max */
-
-       u_int32_t chunkmap[256 / sizeof (u_int32_t)];  /* Bit mask of chunks to be matched according to RFC 2960 */
-
-#define SCTP_CHUNK_MATCH_ANY   0x01  /* Match if any of the chunk types are present */
-#define SCTP_CHUNK_MATCH_ALL   0x02  /* Match if all of the chunk types are present */
-#define SCTP_CHUNK_MATCH_ONLY  0x04  /* Match if these are the only chunk types present */
-
-       u_int32_t chunk_match_type;
-       struct xt_sctp_flag_info flag_info[XT_NUM_SCTP_FLAGS];
-       int flag_count;
-
-       u_int32_t flags;
-       u_int32_t invflags;
-};
-
-#define bytes(type) (sizeof(type) * 8)
-
-#define SCTP_CHUNKMAP_SET(chunkmap, type)              \
-       do {                                            \
-               (chunkmap)[type / bytes(u_int32_t)] |=  \
-                       1 << (type % bytes(u_int32_t)); \
-       } while (0)
-
-#define SCTP_CHUNKMAP_CLEAR(chunkmap, type)                    \
-       do {                                                    \
-               (chunkmap)[type / bytes(u_int32_t)] &=          \
-                       ~(1 << (type % bytes(u_int32_t)));      \
-       } while (0)
-
-#define SCTP_CHUNKMAP_IS_SET(chunkmap, type)                   \
-({                                                             \
-       ((chunkmap)[type / bytes (u_int32_t)] &                 \
-               (1 << (type % bytes (u_int32_t)))) ? 1: 0;      \
-})
-
-#define SCTP_CHUNKMAP_RESET(chunkmap) \
-       memset((chunkmap), 0, sizeof(chunkmap))
-
-#define SCTP_CHUNKMAP_SET_ALL(chunkmap) \
-       memset((chunkmap), ~0U, sizeof(chunkmap))
-
-#define SCTP_CHUNKMAP_COPY(destmap, srcmap) \
-       memcpy((destmap), (srcmap), sizeof(srcmap))
-
-#define SCTP_CHUNKMAP_IS_CLEAR(chunkmap) \
-       __sctp_chunkmap_is_clear((chunkmap), SCTP_ARRAY_SIZE(chunkmap))
-static inline bool
-__sctp_chunkmap_is_clear(const u_int32_t *chunkmap, unsigned int n)
-{
-       unsigned int i;
-       for (i = 0; i < n; ++i)
-               if (chunkmap[i])
-                       return false;
-       return true;
-}
-
-#define SCTP_CHUNKMAP_IS_ALL_SET(chunkmap) \
-       __sctp_chunkmap_is_all_set((chunkmap), ARRAY_SIZE(chunkmap))
-static inline bool
-__sctp_chunkmap_is_all_set(const u_int32_t *chunkmap, unsigned int n)
-{
-       unsigned int i;
-       for (i = 0; i < n; ++i)
-               if (chunkmap[i] != ~0U)
-                       return false;
-       return true;
-}
-
-#endif /* _XT_SCTP_H_ */
-
diff --git a/include/linux/netfilter/xt_state.h b/include/linux/netfilter/xt_state.h
deleted file mode 100644 (file)
index c06f32e..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _XT_STATE_H
-#define _XT_STATE_H
-
-#define XT_STATE_BIT(ctinfo) (1 << ((ctinfo)%IP_CT_IS_REPLY+1))
-#define XT_STATE_INVALID (1 << 0)
-
-#define XT_STATE_UNTRACKED (1 << (IP_CT_NUMBER + 1))
-
-struct xt_state_info
-{
-       unsigned int statemask;
-};
-#endif /*_XT_STATE_H*/
diff --git a/include/linux/netfilter/xt_statistic.h b/include/linux/netfilter/xt_statistic.h
deleted file mode 100644 (file)
index 3d38bc9..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef _XT_STATISTIC_H
-#define _XT_STATISTIC_H
-
-enum xt_statistic_mode {
-       XT_STATISTIC_MODE_RANDOM,
-       XT_STATISTIC_MODE_NTH,
-       __XT_STATISTIC_MODE_MAX
-};
-#define XT_STATISTIC_MODE_MAX (__XT_STATISTIC_MODE_MAX - 1)
-
-enum xt_statistic_flags {
-       XT_STATISTIC_INVERT             = 0x1,
-};
-#define XT_STATISTIC_MASK              0x1
-
-struct xt_statistic_info {
-       u_int16_t                       mode;
-       u_int16_t                       flags;
-       union {
-               struct {
-                       u_int32_t       probability;
-               } random;
-               struct {
-                       u_int32_t       every;
-                       u_int32_t       packet;
-                       /* Used internally by the kernel */
-                       u_int32_t       count;
-               } nth;
-       } u;
-       struct xt_statistic_info        *master __attribute__((aligned(8)));
-};
-
-#endif /* _XT_STATISTIC_H */
diff --git a/include/linux/netfilter/xt_string.h b/include/linux/netfilter/xt_string.h
deleted file mode 100644 (file)
index bb21dd1..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef _XT_STRING_H
-#define _XT_STRING_H
-
-#define XT_STRING_MAX_PATTERN_SIZE 128
-#define XT_STRING_MAX_ALGO_NAME_SIZE 16
-
-struct xt_string_info
-{
-       u_int16_t from_offset;
-       u_int16_t to_offset;
-       char      algo[XT_STRING_MAX_ALGO_NAME_SIZE];
-       char      pattern[XT_STRING_MAX_PATTERN_SIZE];
-       u_int8_t  patlen;
-       u_int8_t  invert;
-
-       /* Used internally by the kernel */
-       struct ts_config __attribute__((aligned(8))) *config;
-};
-
-#endif /*_XT_STRING_H*/
diff --git a/include/linux/netfilter/xt_tcpmss.h b/include/linux/netfilter/xt_tcpmss.h
deleted file mode 100644 (file)
index e03274c..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef _XT_TCPMSS_MATCH_H
-#define _XT_TCPMSS_MATCH_H
-
-struct xt_tcpmss_match_info {
-    u_int16_t mss_min, mss_max;
-    u_int8_t invert;
-};
-
-#endif /*_XT_TCPMSS_MATCH_H*/
diff --git a/include/linux/netfilter/xt_tcpudp.h b/include/linux/netfilter/xt_tcpudp.h
deleted file mode 100644 (file)
index 78bc65f..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-#ifndef _XT_TCPUDP_H
-#define _XT_TCPUDP_H
-
-/* TCP matching stuff */
-struct xt_tcp
-{
-       u_int16_t spts[2];                      /* Source port range. */
-       u_int16_t dpts[2];                      /* Destination port range. */
-       u_int8_t option;                        /* TCP Option iff non-zero*/
-       u_int8_t flg_mask;                      /* TCP flags mask byte */
-       u_int8_t flg_cmp;                       /* TCP flags compare byte */
-       u_int8_t invflags;                      /* Inverse flags */
-};
-
-/* Values for "inv" field in struct ipt_tcp. */
-#define XT_TCP_INV_SRCPT       0x01    /* Invert the sense of source ports. */
-#define XT_TCP_INV_DSTPT       0x02    /* Invert the sense of dest ports. */
-#define XT_TCP_INV_FLAGS       0x04    /* Invert the sense of TCP flags. */
-#define XT_TCP_INV_OPTION      0x08    /* Invert the sense of option test. */
-#define XT_TCP_INV_MASK                0x0F    /* All possible flags. */
-
-/* UDP matching stuff */
-struct xt_udp
-{
-       u_int16_t spts[2];                      /* Source port range. */
-       u_int16_t dpts[2];                      /* Destination port range. */
-       u_int8_t invflags;                      /* Inverse flags */
-};
-
-/* Values for "invflags" field in struct ipt_udp. */
-#define XT_UDP_INV_SRCPT       0x01    /* Invert the sense of source ports. */
-#define XT_UDP_INV_DSTPT       0x02    /* Invert the sense of dest ports. */
-#define XT_UDP_INV_MASK        0x03    /* All possible flags. */
-
-
-#endif
diff --git a/include/linux/netfilter/xt_time.h b/include/linux/netfilter/xt_time.h
deleted file mode 100644 (file)
index 14b6df4..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef _XT_TIME_H
-#define _XT_TIME_H 1
-
-struct xt_time_info {
-       u_int32_t date_start;
-       u_int32_t date_stop;
-       u_int32_t daytime_start;
-       u_int32_t daytime_stop;
-       u_int32_t monthdays_match;
-       u_int8_t weekdays_match;
-       u_int8_t flags;
-};
-
-enum {
-       /* Match against local time (instead of UTC) */
-       XT_TIME_LOCAL_TZ = 1 << 0,
-
-       /* Shortcuts */
-       XT_TIME_ALL_MONTHDAYS = 0xFFFFFFFE,
-       XT_TIME_ALL_WEEKDAYS  = 0xFE,
-       XT_TIME_MIN_DAYTIME   = 0,
-       XT_TIME_MAX_DAYTIME   = 24 * 60 * 60 - 1,
-};
-
-#endif /* _XT_TIME_H */
diff --git a/include/linux/netfilter/xt_u32.h b/include/linux/netfilter/xt_u32.h
deleted file mode 100644 (file)
index 9947f56..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-#ifndef _XT_U32_H
-#define _XT_U32_H 1
-
-enum xt_u32_ops {
-       XT_U32_AND,
-       XT_U32_LEFTSH,
-       XT_U32_RIGHTSH,
-       XT_U32_AT,
-};
-
-struct xt_u32_location_element {
-       u_int32_t number;
-       u_int8_t nextop;
-};
-
-struct xt_u32_value_element {
-       u_int32_t min;
-       u_int32_t max;
-};
-
-/*
- * Any way to allow for an arbitrary number of elements?
- * For now, I settle with a limit of 10 each.
- */
-#define XT_U32_MAXSIZE 10
-
-struct xt_u32_test {
-       struct xt_u32_location_element location[XT_U32_MAXSIZE+1];
-       struct xt_u32_value_element value[XT_U32_MAXSIZE+1];
-       u_int8_t nnums;
-       u_int8_t nvalues;
-};
-
-struct xt_u32 {
-       struct xt_u32_test tests[XT_U32_MAXSIZE+1];
-       u_int8_t ntests;
-       u_int8_t invert;
-};
-
-#endif /* _XT_U32_H */
diff --git a/include/linux/netfilter_ipv4.h b/include/linux/netfilter_ipv4.h
deleted file mode 100644 (file)
index da7e16c..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-#ifndef __LINUX_IP_NETFILTER_H
-#define __LINUX_IP_NETFILTER_H
-
-/* IPv4-specific defines for netfilter. 
- * (C)1998 Rusty Russell -- This code is GPL.
- */
-
-#include <linux/netfilter.h>
-
-/* only for userspace compatibility */
-/* IP Cache bits. */
-/* Src IP address. */
-#define NFC_IP_SRC             0x0001
-/* Dest IP address. */
-#define NFC_IP_DST             0x0002
-/* Input device. */
-#define NFC_IP_IF_IN           0x0004
-/* Output device. */
-#define NFC_IP_IF_OUT          0x0008
-/* TOS. */
-#define NFC_IP_TOS             0x0010
-/* Protocol. */
-#define NFC_IP_PROTO           0x0020
-/* IP options. */
-#define NFC_IP_OPTIONS         0x0040
-/* Frag & flags. */
-#define NFC_IP_FRAG            0x0080
-
-/* Per-protocol information: only matters if proto match. */
-/* TCP flags. */
-#define NFC_IP_TCPFLAGS                0x0100
-/* Source port. */
-#define NFC_IP_SRC_PT          0x0200
-/* Dest port. */
-#define NFC_IP_DST_PT          0x0400
-/* Something else about the proto */
-#define NFC_IP_PROTO_UNKNOWN   0x2000
-
-/* IP Hooks */
-/* After promisc drops, checksum checks. */
-#define NF_IP_PRE_ROUTING      0
-/* If the packet is destined for this box. */
-#define NF_IP_LOCAL_IN         1
-/* If the packet is destined for another interface. */
-#define NF_IP_FORWARD          2
-/* Packets coming from a local process. */
-#define NF_IP_LOCAL_OUT                3
-/* Packets about to hit the wire. */
-#define NF_IP_POST_ROUTING     4
-#define NF_IP_NUMHOOKS         5
-
-enum nf_ip_hook_priorities {
-       NF_IP_PRI_FIRST = INT_MIN,
-       NF_IP_PRI_CONNTRACK_DEFRAG = -400,
-       NF_IP_PRI_RAW = -300,
-       NF_IP_PRI_SELINUX_FIRST = -225,
-       NF_IP_PRI_CONNTRACK = -200,
-       NF_IP_PRI_MANGLE = -150,
-       NF_IP_PRI_NAT_DST = -100,
-       NF_IP_PRI_FILTER = 0,
-       NF_IP_PRI_NAT_SRC = 100,
-       NF_IP_PRI_SELINUX_LAST = 225,
-       NF_IP_PRI_CONNTRACK_CONFIRM = INT_MAX,
-       NF_IP_PRI_LAST = INT_MAX,
-};
-
-/* Arguments for setsockopt SOL_IP: */
-/* 2.0 firewalling went from 64 through 71 (and +256, +512, etc). */
-/* 2.2 firewalling (+ masq) went from 64 through 76 */
-/* 2.4 firewalling went 64 through 67. */
-#define SO_ORIGINAL_DST 80
-
-
-#endif /*__LINUX_IP_NETFILTER_H*/
diff --git a/include/linux/netfilter_ipv4/ip_set.h b/include/linux/netfilter_ipv4/ip_set.h
deleted file mode 100644 (file)
index 92a746e..0000000
+++ /dev/null
@@ -1,498 +0,0 @@
-#ifndef _IP_SET_H
-#define _IP_SET_H
-
-/* Copyright (C) 2000-2002 Joakim Axelsson <gozem@linux.nu>
- *                         Patrick Schaaf <bof@bof.de>
- *                         Martin Josefsson <gandalf@wlug.westbo.se>
- * Copyright (C) 2003-2004 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.  
- */
-
-#if 0
-#define IP_SET_DEBUG
-#endif
-
-/*
- * A sockopt of such quality has hardly ever been seen before on the open
- * market!  This little beauty, hardly ever used: above 64, so it's
- * traditionally used for firewalling, not touched (even once!) by the
- * 2.0, 2.2 and 2.4 kernels!
- *
- * Comes with its own certificate of authenticity, valid anywhere in the
- * Free world!
- *
- * Rusty, 19.4.2000
- */
-#define SO_IP_SET              83
-
-/*
- * Heavily modify by Joakim Axelsson 08.03.2002
- * - Made it more modulebased
- *
- * Additional heavy modifications by Jozsef Kadlecsik 22.02.2004
- * - bindings added
- * - in order to "deal with" backward compatibility, renamed to ipset
- */
-
-/* 
- * Used so that the kernel module and ipset-binary can match their versions 
- */
-#define IP_SET_PROTOCOL_VERSION 2
-
-#define IP_SET_MAXNAMELEN 32   /* set names and set typenames */
-
-/* Lets work with our own typedef for representing an IP address.
- * We hope to make the code more portable, possibly to IPv6...
- *
- * The representation works in HOST byte order, because most set types
- * will perform arithmetic operations and compare operations.
- * 
- * For now the type is an uint32_t.
- *
- * Make sure to ONLY use the functions when translating and parsing
- * in order to keep the host byte order and make it more portable:
- *  parse_ip()
- *  parse_mask()
- *  parse_ipandmask()
- *  ip_tostring()
- * (Joakim: where are they???)
- */
-
-typedef uint32_t ip_set_ip_t;
-
-/* Sets are identified by an id in kernel space. Tweak with ip_set_id_t
- * and IP_SET_INVALID_ID if you want to increase the max number of sets.
- */
-typedef uint16_t ip_set_id_t;
-
-#define IP_SET_INVALID_ID      65535
-
-/* How deep we follow bindings */
-#define IP_SET_MAX_BINDINGS    6
-
-/*
- * Option flags for kernel operations (ipt_set_info)
- */
-#define IPSET_SRC              0x01    /* Source match/add */
-#define IPSET_DST              0x02    /* Destination match/add */
-#define IPSET_MATCH_INV                0x04    /* Inverse matching */
-
-/*
- * Set features
- */
-#define IPSET_TYPE_IP          0x01    /* IP address type of set */
-#define IPSET_TYPE_PORT                0x02    /* Port type of set */
-#define IPSET_DATA_SINGLE      0x04    /* Single data storage */
-#define IPSET_DATA_DOUBLE      0x08    /* Double data storage */
-
-/* Reserved keywords */
-#define IPSET_TOKEN_DEFAULT    ":default:"
-#define IPSET_TOKEN_ALL                ":all:"
-
-/* SO_IP_SET operation constants, and their request struct types.
- *
- * Operation ids:
- *       0-99:  commands with version checking
- *     100-199: add/del/test/bind/unbind
- *     200-299: list, save, restore
- */
-
-/* Single shot operations: 
- * version, create, destroy, flush, rename and swap 
- *
- * Sets are identified by name.
- */
-
-#define IP_SET_REQ_STD         \
-       unsigned op;            \
-       unsigned version;       \
-       char name[IP_SET_MAXNAMELEN]
-
-#define IP_SET_OP_CREATE       0x00000001      /* Create a new (empty) set */
-struct ip_set_req_create {
-       IP_SET_REQ_STD;
-       char typename[IP_SET_MAXNAMELEN];
-};
-
-#define IP_SET_OP_DESTROY      0x00000002      /* Remove a (empty) set */
-struct ip_set_req_std {
-       IP_SET_REQ_STD;
-};
-
-#define IP_SET_OP_FLUSH                0x00000003      /* Remove all IPs in a set */
-/* Uses ip_set_req_std */
-
-#define IP_SET_OP_RENAME       0x00000004      /* Rename a set */
-/* Uses ip_set_req_create */
-
-#define IP_SET_OP_SWAP         0x00000005      /* Swap two sets */
-/* Uses ip_set_req_create */
-
-union ip_set_name_index {
-       char name[IP_SET_MAXNAMELEN];
-       ip_set_id_t index;
-};
-
-#define IP_SET_OP_GET_BYNAME   0x00000006      /* Get set index by name */
-struct ip_set_req_get_set {
-       unsigned op;
-       unsigned version;
-       union ip_set_name_index set;
-};
-
-#define IP_SET_OP_GET_BYINDEX  0x00000007      /* Get set name by index */
-/* Uses ip_set_req_get_set */
-
-#define IP_SET_OP_VERSION      0x00000100      /* Ask kernel version */
-struct ip_set_req_version {
-       unsigned op;
-       unsigned version;
-};
-
-/* Double shots operations: 
- * add, del, test, bind and unbind.
- *
- * First we query the kernel to get the index and type of the target set,
- * then issue the command. Validity of IP is checked in kernel in order
- * to minimalize sockopt operations.
- */
-
-/* Get minimal set data for add/del/test/bind/unbind IP */
-#define IP_SET_OP_ADT_GET      0x00000010      /* Get set and type */
-struct ip_set_req_adt_get {
-       unsigned op;
-       unsigned version;
-       union ip_set_name_index set;
-       char typename[IP_SET_MAXNAMELEN];
-};
-
-#define IP_SET_REQ_BYINDEX     \
-       unsigned op;            \
-       ip_set_id_t index;
-
-struct ip_set_req_adt {
-       IP_SET_REQ_BYINDEX;
-};
-
-#define IP_SET_OP_ADD_IP       0x00000101      /* Add an IP to a set */
-/* Uses ip_set_req_adt, with type specific addage */
-
-#define IP_SET_OP_DEL_IP       0x00000102      /* Remove an IP from a set */
-/* Uses ip_set_req_adt, with type specific addage */
-
-#define IP_SET_OP_TEST_IP      0x00000103      /* Test an IP in a set */
-/* Uses ip_set_req_adt, with type specific addage */
-
-#define IP_SET_OP_BIND_SET     0x00000104      /* Bind an IP to a set */
-/* Uses ip_set_req_bind, with type specific addage */
-struct ip_set_req_bind {
-       IP_SET_REQ_BYINDEX;
-       char binding[IP_SET_MAXNAMELEN];
-};
-
-#define IP_SET_OP_UNBIND_SET   0x00000105      /* Unbind an IP from a set */
-/* Uses ip_set_req_bind, with type speficic addage 
- * index = 0 means unbinding for all sets */
-
-#define IP_SET_OP_TEST_BIND_SET        0x00000106      /* Test binding an IP to a set */
-/* Uses ip_set_req_bind, with type specific addage */
-
-/* Multiple shots operations: list, save, restore.
- *
- * - check kernel version and query the max number of sets
- * - get the basic information on all sets
- *   and size required for the next step
- * - get actual set data: header, data, bindings
- */
-
-/* Get max_sets and the index of a queried set
- */
-#define IP_SET_OP_MAX_SETS     0x00000020
-struct ip_set_req_max_sets {
-       unsigned op;
-       unsigned version;
-       ip_set_id_t max_sets;           /* max_sets */
-       ip_set_id_t sets;               /* real number of sets */
-       union ip_set_name_index set;    /* index of set if name used */
-};
-
-/* Get the id and name of the sets plus size for next step */
-#define IP_SET_OP_LIST_SIZE    0x00000201
-#define IP_SET_OP_SAVE_SIZE    0x00000202
-struct ip_set_req_setnames {
-       unsigned op;
-       ip_set_id_t index;              /* set to list/save */
-       size_t size;                    /* size to get setdata/bindings */
-       /* followed by sets number of struct ip_set_name_list */
-};
-
-struct ip_set_name_list {
-       char name[IP_SET_MAXNAMELEN];
-       char typename[IP_SET_MAXNAMELEN];
-       ip_set_id_t index;
-       ip_set_id_t id;
-};
-
-/* The actual list operation */
-#define IP_SET_OP_LIST         0x00000203
-struct ip_set_req_list {
-       IP_SET_REQ_BYINDEX;
-       /* sets number of struct ip_set_list in reply */ 
-};
-
-struct ip_set_list {
-       ip_set_id_t index;
-       ip_set_id_t binding;
-       u_int32_t ref;
-       size_t header_size;     /* Set header data of header_size */
-       size_t members_size;    /* Set members data of members_size */
-       size_t bindings_size;   /* Set bindings data of bindings_size */
-};
-
-struct ip_set_hash_list {
-       ip_set_ip_t ip;
-       ip_set_id_t binding;
-};
-
-/* The save operation */
-#define IP_SET_OP_SAVE         0x00000204
-/* Uses ip_set_req_list, in the reply replaced by
- * sets number of struct ip_set_save plus a marker
- * ip_set_save followed by ip_set_hash_save structures.
- */
-struct ip_set_save {
-       ip_set_id_t index;
-       ip_set_id_t binding;
-       size_t header_size;     /* Set header data of header_size */
-       size_t members_size;    /* Set members data of members_size */
-};
-
-/* At restoring, ip == 0 means default binding for the given set: */
-struct ip_set_hash_save {
-       ip_set_ip_t ip;
-       ip_set_id_t id;
-       ip_set_id_t binding;
-};
-
-/* The restore operation */
-#define IP_SET_OP_RESTORE      0x00000205
-/* Uses ip_set_req_setnames followed by ip_set_restore structures
- * plus a marker ip_set_restore, followed by ip_set_hash_save 
- * structures.
- */
-struct ip_set_restore {
-       char name[IP_SET_MAXNAMELEN];
-       char typename[IP_SET_MAXNAMELEN];
-       ip_set_id_t index;
-       size_t header_size;     /* Create data of header_size */
-       size_t members_size;    /* Set members data of members_size */
-};
-
-static inline int bitmap_bytes(ip_set_ip_t a, ip_set_ip_t b)
-{
-       return 4 * ((((b - a + 8) / 8) + 3) / 4);
-}
-
-#ifdef __KERNEL__
-
-#define ip_set_printk(format, args...)                         \
-       do {                                                    \
-               printk("%s: %s: ", __FILE__, __FUNCTION__);     \
-               printk(format "\n" , ## args);                  \
-       } while (0)
-
-#if defined(IP_SET_DEBUG)
-#define DP(format, args...)                                    \
-       do {                                                    \
-               printk("%s: %s (DBG): ", __FILE__, __FUNCTION__);\
-               printk(format "\n" , ## args);                  \
-       } while (0)
-#define IP_SET_ASSERT(x)                                       \
-       do {                                                    \
-               if (!(x))                                       \
-                       printk("IP_SET_ASSERT: %s:%i(%s)\n",    \
-                               __FILE__, __LINE__, __FUNCTION__); \
-       } while (0)
-#else
-#define DP(format, args...)
-#define IP_SET_ASSERT(x)
-#endif
-
-struct ip_set;
-
-/*
- * The ip_set_type definition - one per set type, e.g. "ipmap".
- *
- * Each individual set has a pointer, set->type, going to one
- * of these structures. Function pointers inside the structure implement
- * the real behaviour of the sets.
- *
- * If not mentioned differently, the implementation behind the function
- * pointers of a set_type, is expected to return 0 if ok, and a negative
- * errno (e.g. -EINVAL) on error.
- */
-struct ip_set_type {
-       struct list_head list;  /* next in list of set types */
-
-       /* test for IP in set (kernel: iptables -m set src|dst)
-        * return 0 if not in set, 1 if in set.
-        */
-       int (*testip_kernel) (struct ip_set *set,
-                             const struct sk_buff * skb, 
-                             ip_set_ip_t *ip,
-                             const u_int32_t *flags,
-                             unsigned char index);
-
-       /* test for IP in set (userspace: ipset -T set IP)
-        * return 0 if not in set, 1 if in set.
-        */
-       int (*testip) (struct ip_set *set,
-                      const void *data, size_t size,
-                      ip_set_ip_t *ip);
-
-       /*
-        * Size of the data structure passed by when
-        * adding/deletin/testing an entry.
-        */
-       size_t reqsize;
-
-       /* Add IP into set (userspace: ipset -A set IP)
-        * Return -EEXIST if the address is already in the set,
-        * and -ERANGE if the address lies outside the set bounds.
-        * If the address was not already in the set, 0 is returned.
-        */
-       int (*addip) (struct ip_set *set, 
-                     const void *data, size_t size,
-                     ip_set_ip_t *ip);
-
-       /* Add IP into set (kernel: iptables ... -j SET set src|dst)
-        * Return -EEXIST if the address is already in the set,
-        * and -ERANGE if the address lies outside the set bounds.
-        * If the address was not already in the set, 0 is returned.
-        */
-       int (*addip_kernel) (struct ip_set *set,
-                            const struct sk_buff * skb, 
-                            ip_set_ip_t *ip,
-                            const u_int32_t *flags,
-                            unsigned char index);
-
-       /* remove IP from set (userspace: ipset -D set --entry x)
-        * Return -EEXIST if the address is NOT in the set,
-        * and -ERANGE if the address lies outside the set bounds.
-        * If the address really was in the set, 0 is returned.
-        */
-       int (*delip) (struct ip_set *set, 
-                     const void *data, size_t size,
-                     ip_set_ip_t *ip);
-
-       /* remove IP from set (kernel: iptables ... -j SET --entry x)
-        * Return -EEXIST if the address is NOT in the set,
-        * and -ERANGE if the address lies outside the set bounds.
-        * If the address really was in the set, 0 is returned.
-        */
-       int (*delip_kernel) (struct ip_set *set,
-                            const struct sk_buff * skb, 
-                            ip_set_ip_t *ip,
-                            const u_int32_t *flags,
-                            unsigned char index);
-
-       /* new set creation - allocated type specific items
-        */
-       int (*create) (struct ip_set *set,
-                      const void *data, size_t size);
-
-       /* retry the operation after successfully tweaking the set
-        */
-       int (*retry) (struct ip_set *set);
-
-       /* set destruction - free type specific items
-        * There is no return value.
-        * Can be called only when child sets are destroyed.
-        */
-       void (*destroy) (struct ip_set *set);
-
-       /* set flushing - reset all bits in the set, or something similar.
-        * There is no return value.
-        */
-       void (*flush) (struct ip_set *set);
-
-       /* Listing: size needed for header
-        */
-       size_t header_size;
-
-       /* Listing: Get the header
-        *
-        * Fill in the information in "data".
-        * This function is always run after list_header_size() under a 
-        * writelock on the set. Therefor is the length of "data" always 
-        * correct. 
-        */
-       void (*list_header) (const struct ip_set *set, 
-                            void *data);
-
-       /* Listing: Get the size for the set members
-        */
-       int (*list_members_size) (const struct ip_set *set);
-
-       /* Listing: Get the set members
-        *
-        * Fill in the information in "data".
-        * This function is always run after list_member_size() under a 
-        * writelock on the set. Therefor is the length of "data" always 
-        * correct. 
-        */
-       void (*list_members) (const struct ip_set *set,
-                             void *data);
-
-       char typename[IP_SET_MAXNAMELEN];
-       unsigned char features;
-       int protocol_version;
-
-       /* Set this to THIS_MODULE if you are a module, otherwise NULL */
-       struct module *me;
-};
-
-extern int ip_set_register_set_type(struct ip_set_type *set_type);
-extern void ip_set_unregister_set_type(struct ip_set_type *set_type);
-
-/* A generic ipset */
-struct ip_set {
-       char name[IP_SET_MAXNAMELEN];   /* the name of the set */
-       rwlock_t lock;                  /* lock for concurrency control */
-       ip_set_id_t id;                 /* set id for swapping */
-       ip_set_id_t binding;            /* default binding for the set */
-       atomic_t ref;                   /* in kernel and in hash references */
-       struct ip_set_type *type;       /* the set types */
-       void *data;                     /* pooltype specific data */
-};
-
-/* Structure to bind set elements to sets */
-struct ip_set_hash {
-       struct list_head list;          /* list of clashing entries in hash */
-       ip_set_ip_t ip;                 /* ip from set */
-       ip_set_id_t id;                 /* set id */
-       ip_set_id_t binding;            /* set we bind the element to */
-};
-
-/* register and unregister set references */
-extern ip_set_id_t ip_set_get_byname(const char name[IP_SET_MAXNAMELEN]);
-extern ip_set_id_t ip_set_get_byindex(ip_set_id_t id);
-extern void ip_set_put(ip_set_id_t id);
-
-/* API for iptables set match, and SET target */
-extern void ip_set_addip_kernel(ip_set_id_t id,
-                               const struct sk_buff *skb,
-                               const u_int32_t *flags);
-extern void ip_set_delip_kernel(ip_set_id_t id,
-                               const struct sk_buff *skb,
-                               const u_int32_t *flags);
-extern int ip_set_testip_kernel(ip_set_id_t id,
-                               const struct sk_buff *skb,
-                               const u_int32_t *flags);
-
-#endif                         /* __KERNEL__ */
-
-#endif /*_IP_SET_H*/
diff --git a/include/linux/netfilter_ipv4/ip_tables.h b/include/linux/netfilter_ipv4/ip_tables.h
deleted file mode 100644 (file)
index fc64b97..0000000
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * 25-Jul-1998 Major changes to allow for ip chain table
- *
- * 3-Jan-2000 Named tables to allow packet selection for different uses.
- */
-
-/*
- *     Format of an IP firewall descriptor
- *
- *     src, dst, src_mask, dst_mask are always stored in network byte order.
- *     flags are stored in host byte order (of course).
- *     Port numbers are stored in HOST byte order.
- */
-
-#ifndef _IPTABLES_H
-#define _IPTABLES_H
-
-#include <linux/netfilter_ipv4.h>
-
-#include <linux/netfilter/x_tables.h>
-
-#define IPT_FUNCTION_MAXNAMELEN XT_FUNCTION_MAXNAMELEN
-#define IPT_TABLE_MAXNAMELEN XT_TABLE_MAXNAMELEN
-#define ipt_match xt_match
-#define ipt_target xt_target
-#define ipt_table xt_table
-#define ipt_get_revision xt_get_revision
-
-/* Yes, Virginia, you have to zero the padding. */
-struct ipt_ip {
-       /* Source and destination IP addr */
-       struct in_addr src, dst;
-       /* Mask for src and dest IP addr */
-       struct in_addr smsk, dmsk;
-       char iniface[IFNAMSIZ], outiface[IFNAMSIZ];
-       unsigned char iniface_mask[IFNAMSIZ], outiface_mask[IFNAMSIZ];
-
-       /* Protocol, 0 = ANY */
-       u_int16_t proto;
-
-       /* Flags word */
-       u_int8_t flags;
-       /* Inverse flags */
-       u_int8_t invflags;
-};
-
-#define ipt_entry_match xt_entry_match
-#define ipt_entry_target xt_entry_target
-#define ipt_standard_target xt_standard_target
-
-#define ipt_counters xt_counters
-
-/* Values for "flag" field in struct ipt_ip (general ip structure). */
-#define IPT_F_FRAG             0x01    /* Set if rule is a fragment rule */
-#define IPT_F_GOTO             0x02    /* Set if jump is a goto */
-#define IPT_F_MASK             0x03    /* All possible flag bits mask. */
-
-/* Values for "inv" field in struct ipt_ip. */
-#define IPT_INV_VIA_IN         0x01    /* Invert the sense of IN IFACE. */
-#define IPT_INV_VIA_OUT                0x02    /* Invert the sense of OUT IFACE */
-#define IPT_INV_TOS            0x04    /* Invert the sense of TOS. */
-#define IPT_INV_SRCIP          0x08    /* Invert the sense of SRC IP. */
-#define IPT_INV_DSTIP          0x10    /* Invert the sense of DST OP. */
-#define IPT_INV_FRAG           0x20    /* Invert the sense of FRAG. */
-#define IPT_INV_PROTO          XT_INV_PROTO
-#define IPT_INV_MASK           0x7F    /* All possible flag bits mask. */
-
-/* This structure defines each of the firewall rules.  Consists of 3
-   parts which are 1) general IP header stuff 2) match specific
-   stuff 3) the target to perform if the rule matches */
-struct ipt_entry
-{
-       struct ipt_ip ip;
-
-       /* Mark with fields that we care about. */
-       unsigned int nfcache;
-
-       /* Size of ipt_entry + matches */
-       u_int16_t target_offset;
-       /* Size of ipt_entry + matches + target */
-       u_int16_t next_offset;
-
-       /* Back pointer */
-       unsigned int comefrom;
-
-       /* Packet and byte counters. */
-       struct xt_counters counters;
-
-       /* The matches (if any), then the target. */
-       unsigned char elems[0];
-};
-
-/*
- * New IP firewall options for [gs]etsockopt at the RAW IP level.
- * Unlike BSD Linux inherits IP options so you don't have to use a raw
- * socket for this. Instead we check rights in the calls.
- *
- * ATTENTION: check linux/in.h before adding new number here.
- */
-#define IPT_BASE_CTL           64
-
-#define IPT_SO_SET_REPLACE     (IPT_BASE_CTL)
-#define IPT_SO_SET_ADD_COUNTERS        (IPT_BASE_CTL + 1)
-#define IPT_SO_SET_MAX         IPT_SO_SET_ADD_COUNTERS
-
-#define IPT_SO_GET_INFO                        (IPT_BASE_CTL)
-#define IPT_SO_GET_ENTRIES             (IPT_BASE_CTL + 1)
-#define IPT_SO_GET_REVISION_MATCH      (IPT_BASE_CTL + 2)
-#define IPT_SO_GET_REVISION_TARGET     (IPT_BASE_CTL + 3)
-#define IPT_SO_GET_MAX                 IPT_SO_GET_REVISION_TARGET
-
-#define IPT_CONTINUE XT_CONTINUE
-#define IPT_RETURN XT_RETURN
-
-#include <linux/netfilter/xt_tcpudp.h>
-#define ipt_udp xt_udp
-#define ipt_tcp xt_tcp
-
-#define IPT_TCP_INV_SRCPT      XT_TCP_INV_SRCPT
-#define IPT_TCP_INV_DSTPT      XT_TCP_INV_DSTPT
-#define IPT_TCP_INV_FLAGS      XT_TCP_INV_FLAGS
-#define IPT_TCP_INV_OPTION     XT_TCP_INV_OPTION
-#define IPT_TCP_INV_MASK       XT_TCP_INV_MASK
-
-#define IPT_UDP_INV_SRCPT      XT_UDP_INV_SRCPT
-#define IPT_UDP_INV_DSTPT      XT_UDP_INV_DSTPT
-#define IPT_UDP_INV_MASK       XT_UDP_INV_MASK
-
-/* ICMP matching stuff */
-struct ipt_icmp
-{
-       u_int8_t type;                          /* type to match */
-       u_int8_t code[2];                       /* range of code */
-       u_int8_t invflags;                      /* Inverse flags */
-};
-
-/* Values for "inv" field for struct ipt_icmp. */
-#define IPT_ICMP_INV   0x01    /* Invert the sense of type/code test */
-
-/* The argument to IPT_SO_GET_INFO */
-struct ipt_getinfo
-{
-       /* Which table: caller fills this in. */
-       char name[IPT_TABLE_MAXNAMELEN];
-
-       /* Kernel fills these in. */
-       /* Which hook entry points are valid: bitmask */
-       unsigned int valid_hooks;
-
-       /* Hook entry points: one per netfilter hook. */
-       unsigned int hook_entry[NF_INET_NUMHOOKS];
-
-       /* Underflow points. */
-       unsigned int underflow[NF_INET_NUMHOOKS];
-
-       /* Number of entries */
-       unsigned int num_entries;
-
-       /* Size of entries. */
-       unsigned int size;
-};
-
-/* The argument to IPT_SO_SET_REPLACE. */
-struct ipt_replace
-{
-       /* Which table. */
-       char name[IPT_TABLE_MAXNAMELEN];
-
-       /* Which hook entry points are valid: bitmask.  You can't
-           change this. */
-       unsigned int valid_hooks;
-
-       /* Number of entries */
-       unsigned int num_entries;
-
-       /* Total size of new entries */
-       unsigned int size;
-
-       /* Hook entry points. */
-       unsigned int hook_entry[NF_INET_NUMHOOKS];
-
-       /* Underflow points. */
-       unsigned int underflow[NF_INET_NUMHOOKS];
-
-       /* Information about old entries: */
-       /* Number of counters (must be equal to current number of entries). */
-       unsigned int num_counters;
-       /* The old entries' counters. */
-       struct xt_counters *counters;
-
-       /* The entries (hang off end: not really an array). */
-       struct ipt_entry entries[0];
-};
-
-/* The argument to IPT_SO_ADD_COUNTERS. */
-#define ipt_counters_info xt_counters_info
-
-/* The argument to IPT_SO_GET_ENTRIES. */
-struct ipt_get_entries
-{
-       /* Which table: user fills this in. */
-       char name[IPT_TABLE_MAXNAMELEN];
-
-       /* User fills this in: total entry size. */
-       unsigned int size;
-
-       /* The entries. */
-       struct ipt_entry entrytable[0];
-};
-
-/* Standard return verdict, or do jump. */
-#define IPT_STANDARD_TARGET XT_STANDARD_TARGET
-/* Error verdict. */
-#define IPT_ERROR_TARGET XT_ERROR_TARGET
-
-/* Helper functions */
-static __inline__ struct ipt_entry_target *
-ipt_get_target(struct ipt_entry *e)
-{
-       return (void *)e + e->target_offset;
-}
-
-/* fn returns 0 to continue iteration */
-#define IPT_MATCH_ITERATE(e, fn, args...) \
-       XT_MATCH_ITERATE(struct ipt_entry, e, fn, ## args)
-
-/* fn returns 0 to continue iteration */
-#define IPT_ENTRY_ITERATE(entries, size, fn, args...) \
-       XT_ENTRY_ITERATE(struct ipt_entry, entries, size, fn, ## args)
-
-/*
- *     Main firewall chains definitions and global var's definitions.
- */
-#endif /* _IPTABLES_H */
diff --git a/include/linux/netfilter_ipv4/ipt_CLUSTERIP.h b/include/linux/netfilter_ipv4/ipt_CLUSTERIP.h
deleted file mode 100644 (file)
index e5a3687..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef _IPT_CLUSTERIP_H_target
-#define _IPT_CLUSTERIP_H_target
-
-enum clusterip_hashmode {
-    CLUSTERIP_HASHMODE_SIP = 0,
-    CLUSTERIP_HASHMODE_SIP_SPT,
-    CLUSTERIP_HASHMODE_SIP_SPT_DPT,
-};
-
-#define CLUSTERIP_HASHMODE_MAX CLUSTERIP_HASHMODE_SIP_SPT_DPT
-
-#define CLUSTERIP_MAX_NODES 16
-
-#define CLUSTERIP_FLAG_NEW 0x00000001
-
-struct clusterip_config;
-
-struct ipt_clusterip_tgt_info {
-
-       u_int32_t flags;
-
-       /* only relevant for new ones */
-       u_int8_t clustermac[6];
-       u_int16_t num_total_nodes;
-       u_int16_t num_local_nodes;
-       u_int16_t local_nodes[CLUSTERIP_MAX_NODES];
-       u_int32_t hash_mode;
-       u_int32_t hash_initval;
-
-       /* Used internally by the kernel */
-       struct clusterip_config *config;
-};
-
-#endif /*_IPT_CLUSTERIP_H_target*/
diff --git a/include/linux/netfilter_ipv4/ipt_DSCP.h b/include/linux/netfilter_ipv4/ipt_DSCP.h
deleted file mode 100644 (file)
index 3491e52..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/* iptables module for setting the IPv4 DSCP field
- *
- * (C) 2002 Harald Welte <laforge@gnumonks.org>
- * based on ipt_FTOS.c (C) 2000 by Matthew G. Marsh <mgm@paktronix.com>
- * This software is distributed under GNU GPL v2, 1991
- * 
- * See RFC2474 for a description of the DSCP field within the IP Header.
- *
- * ipt_DSCP.h,v 1.7 2002/03/14 12:03:13 laforge Exp
-*/
-#ifndef _IPT_DSCP_TARGET_H
-#define _IPT_DSCP_TARGET_H
-#include <linux/netfilter_ipv4/ipt_dscp.h>
-#include <linux/netfilter/xt_DSCP.h>
-
-#define ipt_DSCP_info xt_DSCP_info
-
-#endif /* _IPT_DSCP_TARGET_H */
diff --git a/include/linux/netfilter_ipv4/ipt_ECN.h b/include/linux/netfilter_ipv4/ipt_ECN.h
deleted file mode 100644 (file)
index 94e0d98..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Header file for iptables ipt_ECN target
- *
- * (C) 2002 by Harald Welte <laforge@gnumonks.org>
- *
- * This software is distributed under GNU GPL v2, 1991
- * 
- * ipt_ECN.h,v 1.3 2002/05/29 12:17:40 laforge Exp
-*/
-#ifndef _IPT_ECN_TARGET_H
-#define _IPT_ECN_TARGET_H
-#include <linux/netfilter_ipv4/ipt_DSCP.h>
-
-#define IPT_ECN_IP_MASK        (~IPT_DSCP_MASK)
-
-#define IPT_ECN_OP_SET_IP      0x01    /* set ECN bits of IPv4 header */
-#define IPT_ECN_OP_SET_ECE     0x10    /* set ECE bit of TCP header */
-#define IPT_ECN_OP_SET_CWR     0x20    /* set CWR bit of TCP header */
-
-#define IPT_ECN_OP_MASK                0xce
-
-struct ipt_ECN_info {
-       u_int8_t operation;     /* bitset of operations */
-       u_int8_t ip_ect;        /* ECT codepoint of IPv4 header, pre-shifted */
-       union {
-               struct {
-                       u_int8_t ece:1, cwr:1; /* TCP ECT bits */
-               } tcp;
-       } proto;
-};
-
-#endif /* _IPT_ECN_TARGET_H */
diff --git a/include/linux/netfilter_ipv4/ipt_FTOS.h b/include/linux/netfilter_ipv4/ipt_FTOS.h
deleted file mode 100644 (file)
index 3b04559..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-/* Set TOS field in header to any value
- *
- * (C) 2000 by Matthew G. Marsh <mgm@paktronix.com>
- *
- * This software is distributed under GNU GPL v2, 1991
- * 
- * ipt_FTOS.h borrowed heavily from ipt_TOS.h  11/09/2000
-*/
-#ifndef _IPT_FTOS_H
-#define _IPT_FTOS_H
-
-struct ipt_FTOS_info {
-       u_int8_t ftos;
-};
-
-#endif /*_IPT_FTOS_H*/
diff --git a/include/linux/netfilter_ipv4/ipt_LOG.h b/include/linux/netfilter_ipv4/ipt_LOG.h
deleted file mode 100644 (file)
index 90fa652..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef _IPT_LOG_H
-#define _IPT_LOG_H
-
-/* make sure not to change this without changing netfilter.h:NF_LOG_* (!) */
-#define IPT_LOG_TCPSEQ         0x01    /* Log TCP sequence numbers */
-#define IPT_LOG_TCPOPT         0x02    /* Log TCP options */
-#define IPT_LOG_IPOPT          0x04    /* Log IP options */
-#define IPT_LOG_UID            0x08    /* Log UID owning local socket */
-#define IPT_LOG_NFLOG          0x10    /* Unsupported, don't reuse */
-#define IPT_LOG_MASK           0x1f
-
-struct ipt_log_info {
-       unsigned char level;
-       unsigned char logflags;
-       char prefix[30];
-};
-
-#endif /*_IPT_LOG_H*/
diff --git a/include/linux/netfilter_ipv4/ipt_REJECT.h b/include/linux/netfilter_ipv4/ipt_REJECT.h
deleted file mode 100644 (file)
index 4293a1a..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef _IPT_REJECT_H
-#define _IPT_REJECT_H
-
-enum ipt_reject_with {
-       IPT_ICMP_NET_UNREACHABLE,
-       IPT_ICMP_HOST_UNREACHABLE,
-       IPT_ICMP_PROT_UNREACHABLE,
-       IPT_ICMP_PORT_UNREACHABLE,
-       IPT_ICMP_ECHOREPLY,
-       IPT_ICMP_NET_PROHIBITED,
-       IPT_ICMP_HOST_PROHIBITED,
-       IPT_TCP_RESET,
-       IPT_ICMP_ADMIN_PROHIBITED
-};
-
-struct ipt_reject_info {
-       enum ipt_reject_with with;      /* reject type */
-};
-
-#endif /*_IPT_REJECT_H*/
diff --git a/include/linux/netfilter_ipv4/ipt_SAME.h b/include/linux/netfilter_ipv4/ipt_SAME.h
deleted file mode 100644 (file)
index cc4c0b2..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef _IPT_SAME_H
-#define _IPT_SAME_H
-
-#define IPT_SAME_MAX_RANGE     10
-
-#define IPT_SAME_NODST         0x01
-
-struct ipt_same_info
-{
-       unsigned char info;
-       u_int32_t rangesize;
-       u_int32_t ipnum;
-       u_int32_t *iparray;
-
-       /* hangs off end. */
-       struct ip_nat_range range[IPT_SAME_MAX_RANGE];
-};
-
-#endif /*_IPT_SAME_H*/
diff --git a/include/linux/netfilter_ipv4/ipt_TOS.h b/include/linux/netfilter_ipv4/ipt_TOS.h
deleted file mode 100644 (file)
index 6bf9e1f..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef _IPT_TOS_H_target
-#define _IPT_TOS_H_target
-
-#ifndef IPTOS_NORMALSVC
-#define IPTOS_NORMALSVC 0
-#endif
-
-struct ipt_tos_target_info {
-       u_int8_t tos;
-};
-
-#endif /*_IPT_TOS_H_target*/
diff --git a/include/linux/netfilter_ipv4/ipt_TTL.h b/include/linux/netfilter_ipv4/ipt_TTL.h
deleted file mode 100644 (file)
index ee6611e..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* TTL modification module for IP tables
- * (C) 2000 by Harald Welte <laforge@netfilter.org> */
-
-#ifndef _IPT_TTL_H
-#define _IPT_TTL_H
-
-enum {
-       IPT_TTL_SET = 0,
-       IPT_TTL_INC,
-       IPT_TTL_DEC
-};
-
-#define IPT_TTL_MAXMODE        IPT_TTL_DEC
-
-struct ipt_TTL_info {
-       u_int8_t        mode;
-       u_int8_t        ttl;
-};
-
-
-#endif
diff --git a/include/linux/netfilter_ipv4/ipt_ULOG.h b/include/linux/netfilter_ipv4/ipt_ULOG.h
deleted file mode 100644 (file)
index 417aad2..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Header file for IP tables userspace logging, Version 1.8
- *
- * (C) 2000-2002 by Harald Welte <laforge@gnumonks.org>
- * 
- * Distributed under the terms of GNU GPL */
-
-#ifndef _IPT_ULOG_H
-#define _IPT_ULOG_H
-
-#ifndef NETLINK_NFLOG
-#define NETLINK_NFLOG  5
-#endif
-
-#define ULOG_DEFAULT_NLGROUP   1
-#define ULOG_DEFAULT_QTHRESHOLD        1
-
-#define ULOG_MAC_LEN   80
-#define ULOG_PREFIX_LEN        32
-
-#define ULOG_MAX_QLEN  50
-/* Why 50? Well... there is a limit imposed by the slab cache 131000
- * bytes. So the multipart netlink-message has to be < 131000 bytes.
- * Assuming a standard ethernet-mtu of 1500, we could define this up
- * to 80... but even 50 seems to be big enough. */
-
-/* private data structure for each rule with a ULOG target */
-struct ipt_ulog_info {
-       unsigned int nl_group;
-       size_t copy_range;
-       size_t qthreshold;
-       char prefix[ULOG_PREFIX_LEN];
-};
-
-/* Format of the ULOG packets passed through netlink */
-typedef struct ulog_packet_msg {
-       unsigned long mark;
-       long timestamp_sec;
-       long timestamp_usec;
-       unsigned int hook;
-       char indev_name[IFNAMSIZ];
-       char outdev_name[IFNAMSIZ];
-       size_t data_len;
-       char prefix[ULOG_PREFIX_LEN];
-       unsigned char mac_len;
-       unsigned char mac[ULOG_MAC_LEN];
-       unsigned char payload[0];
-} ulog_packet_msg_t;
-
-#endif /*_IPT_ULOG_H*/
diff --git a/include/linux/netfilter_ipv4/ipt_addrtype.h b/include/linux/netfilter_ipv4/ipt_addrtype.h
deleted file mode 100644 (file)
index 446de6a..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef _IPT_ADDRTYPE_H
-#define _IPT_ADDRTYPE_H
-
-enum {
-       IPT_ADDRTYPE_INVERT_SOURCE      = 0x0001,
-       IPT_ADDRTYPE_INVERT_DEST        = 0x0002,
-       IPT_ADDRTYPE_LIMIT_IFACE_IN     = 0x0004,
-       IPT_ADDRTYPE_LIMIT_IFACE_OUT    = 0x0008,
-};
-
-struct ipt_addrtype_info_v1 {
-       u_int16_t       source;         /* source-type mask */
-       u_int16_t       dest;           /* dest-type mask */
-       u_int32_t       flags;
-};
-
-/* revision 0 */
-struct ipt_addrtype_info {
-       u_int16_t       source;         /* source-type mask */
-       u_int16_t       dest;           /* dest-type mask */
-       u_int32_t       invert_source;
-       u_int32_t       invert_dest;
-};
-
-#endif
diff --git a/include/linux/netfilter_ipv4/ipt_ah.h b/include/linux/netfilter_ipv4/ipt_ah.h
deleted file mode 100644 (file)
index 7b9a2ac..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef _IPT_AH_H
-#define _IPT_AH_H
-
-struct ipt_ah
-{
-       u_int32_t spis[2];                      /* Security Parameter Index */
-       u_int8_t  invflags;                     /* Inverse flags */
-};
-
-
-
-/* Values for "invflags" field in struct ipt_ah. */
-#define IPT_AH_INV_SPI         0x01    /* Invert the sense of spi. */
-#define IPT_AH_INV_MASK        0x01    /* All possible flags. */
-
-#endif /*_IPT_AH_H*/
diff --git a/include/linux/netfilter_ipv4/ipt_connlimit.h b/include/linux/netfilter_ipv4/ipt_connlimit.h
deleted file mode 100644 (file)
index d99193b..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef _IPT_CONNLIMIT_H
-#define _IPT_CONNLIMIT_H
-
-struct ipt_connlimit_data;
-
-struct ipt_connlimit_info {
-       int limit;
-       int inverse;
-       u_int32_t mask;
-       struct ipt_connlimit_data *data;
-};
-#endif /* _IPT_CONNLIMIT_H */
diff --git a/include/linux/netfilter_ipv4/ipt_dscp.h b/include/linux/netfilter_ipv4/ipt_dscp.h
deleted file mode 100644 (file)
index 4b82ca9..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* iptables module for matching the IPv4 DSCP field
- *
- * (C) 2002 Harald Welte <laforge@gnumonks.org>
- * This software is distributed under GNU GPL v2, 1991
- * 
- * See RFC2474 for a description of the DSCP field within the IP Header.
- *
- * ipt_dscp.h,v 1.3 2002/08/05 19:00:21 laforge Exp
-*/
-#ifndef _IPT_DSCP_H
-#define _IPT_DSCP_H
-
-#include <linux/netfilter/xt_dscp.h>
-
-#define IPT_DSCP_MASK  XT_DSCP_MASK
-#define IPT_DSCP_SHIFT XT_DSCP_SHIFT
-#define IPT_DSCP_MAX   XT_DSCP_MAX
-
-#define ipt_dscp_info  xt_dscp_info
-
-#endif /* _IPT_DSCP_H */
diff --git a/include/linux/netfilter_ipv4/ipt_dstlimit.h b/include/linux/netfilter_ipv4/ipt_dstlimit.h
deleted file mode 100644 (file)
index 1a88f6b..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef _IPT_DSTLIMIT_H
-#define _IPT_DSTLIMIT_H
-
-/* timings are in milliseconds. */
-#define IPT_DSTLIMIT_SCALE 10000
-/* 1/10,000 sec period => max of 10,000/sec.  Min rate is then 429490
-   seconds, or one every 59 hours. */
-
-/* details of this structure hidden by the implementation */
-struct ipt_dstlimit_htable;
-
-#define IPT_DSTLIMIT_HASH_DIP  0x0001
-#define IPT_DSTLIMIT_HASH_DPT  0x0002
-#define IPT_DSTLIMIT_HASH_SIP  0x0004
-
-struct dstlimit_cfg {
-       u_int32_t mode;   /* bitmask of IPT_DSTLIMIT_HASH_* */
-       u_int32_t avg;    /* Average secs between packets * scale */
-       u_int32_t burst;  /* Period multiplier for upper limit. */
-
-       /* user specified */
-       u_int32_t size;         /* how many buckets */
-       u_int32_t max;          /* max number of entries */
-       u_int32_t gc_interval;  /* gc interval */
-       u_int32_t expire;       /* when do entries expire? */
-};
-
-struct ipt_dstlimit_info {
-       char name [IFNAMSIZ];           /* name */
-       struct dstlimit_cfg cfg;
-       struct ipt_dstlimit_htable *hinfo;
-
-       /* Used internally by the kernel */
-       union {
-               void *ptr;
-               struct ipt_dstlimit_info *master;
-       } u;
-};
-#endif /*_IPT_DSTLIMIT_H*/
diff --git a/include/linux/netfilter_ipv4/ipt_ecn.h b/include/linux/netfilter_ipv4/ipt_ecn.h
deleted file mode 100644 (file)
index 1f0d9a4..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* iptables module for matching the ECN header in IPv4 and TCP header
- *
- * (C) 2002 Harald Welte <laforge@gnumonks.org>
- *
- * This software is distributed under GNU GPL v2, 1991
- * 
- * ipt_ecn.h,v 1.4 2002/08/05 19:39:00 laforge Exp
-*/
-#ifndef _IPT_ECN_H
-#define _IPT_ECN_H
-#include <linux/netfilter_ipv4/ipt_dscp.h>
-
-#define IPT_ECN_IP_MASK        (~IPT_DSCP_MASK)
-
-#define IPT_ECN_OP_MATCH_IP    0x01
-#define IPT_ECN_OP_MATCH_ECE   0x10
-#define IPT_ECN_OP_MATCH_CWR   0x20
-
-#define IPT_ECN_OP_MATCH_MASK  0xce
-
-/* match info */
-struct ipt_ecn_info {
-       u_int8_t operation;
-       u_int8_t invert;
-       u_int8_t ip_ect;
-       union {
-               struct {
-                       u_int8_t ect;
-               } tcp;
-       } proto;
-};
-
-#endif /* _IPT_ECN_H */
diff --git a/include/linux/netfilter_ipv4/ipt_iprange.h b/include/linux/netfilter_ipv4/ipt_iprange.h
deleted file mode 100644 (file)
index 5f1aebd..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef _IPT_IPRANGE_H
-#define _IPT_IPRANGE_H
-
-#include <linux/types.h>
-#include <linux/netfilter/xt_iprange.h>
-
-struct ipt_iprange {
-       /* Inclusive: network order. */
-       __be32 min_ip, max_ip;
-};
-
-struct ipt_iprange_info
-{
-       struct ipt_iprange src;
-       struct ipt_iprange dst;
-
-       /* Flags from above */
-       u_int8_t flags;
-};
-
-#endif /* _IPT_IPRANGE_H */
diff --git a/include/linux/netfilter_ipv4/ipt_owner.h b/include/linux/netfilter_ipv4/ipt_owner.h
deleted file mode 100644 (file)
index 92f4bda..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef _IPT_OWNER_H
-#define _IPT_OWNER_H
-
-/* match and invert flags */
-#define IPT_OWNER_UID  0x01
-#define IPT_OWNER_GID  0x02
-#define IPT_OWNER_PID  0x04
-#define IPT_OWNER_SID  0x08
-#define IPT_OWNER_COMM 0x10
-
-struct ipt_owner_info {
-    uid_t uid;
-    gid_t gid;
-    pid_t pid;
-    pid_t sid;
-    char comm[16];
-    u_int8_t match, invert;    /* flags */
-};
-
-#endif /*_IPT_OWNER_H*/
diff --git a/include/linux/netfilter_ipv4/ipt_policy.h b/include/linux/netfilter_ipv4/ipt_policy.h
deleted file mode 100644 (file)
index 1037fb2..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef _IPT_POLICY_H
-#define _IPT_POLICY_H
-
-#include <linux/netfilter/xt_policy.h>
-
-#define IPT_POLICY_MAX_ELEM            XT_POLICY_MAX_ELEM
-
-/* ipt_policy_flags */
-#define IPT_POLICY_MATCH_IN            XT_POLICY_MATCH_IN
-#define IPT_POLICY_MATCH_OUT           XT_POLICY_MATCH_OUT
-#define IPT_POLICY_MATCH_NONE          XT_POLICY_MATCH_NONE
-#define IPT_POLICY_MATCH_STRICT                XT_POLICY_MATCH_STRICT
-
-/* ipt_policy_modes */
-#define IPT_POLICY_MODE_TRANSPORT      XT_POLICY_MODE_TRANSPORT
-#define IPT_POLICY_MODE_TUNNEL         XT_POLICY_MODE_TUNNEL
-
-#define ipt_policy_spec                        xt_policy_spec
-#define ipt_policy_addr                        xt_policy_addr
-#define ipt_policy_elem                        xt_policy_elem
-#define ipt_policy_info                        xt_policy_info
-
-#endif /* _IPT_POLICY_H */
diff --git a/include/linux/netfilter_ipv4/ipt_realm.h b/include/linux/netfilter_ipv4/ipt_realm.h
deleted file mode 100644 (file)
index b3996ea..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef _IPT_REALM_H
-#define _IPT_REALM_H
-
-#include <linux/netfilter/xt_realm.h>
-#define ipt_realm_info xt_realm_info
-
-#endif /* _IPT_REALM_H */
diff --git a/include/linux/netfilter_ipv4/ipt_recent.h b/include/linux/netfilter_ipv4/ipt_recent.h
deleted file mode 100644 (file)
index 6508a45..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef _IPT_RECENT_H
-#define _IPT_RECENT_H
-
-#define RECENT_NAME    "ipt_recent"
-#define RECENT_VER     "v0.3.1"
-
-#define IPT_RECENT_CHECK  1
-#define IPT_RECENT_SET    2
-#define IPT_RECENT_UPDATE 4
-#define IPT_RECENT_REMOVE 8
-#define IPT_RECENT_TTL   16
-
-#define IPT_RECENT_SOURCE 0
-#define IPT_RECENT_DEST   1
-
-#define IPT_RECENT_NAME_LEN 200
-
-struct ipt_recent_info {
-       u_int32_t   seconds;
-       u_int32_t   hit_count;
-       u_int8_t    check_set;
-       u_int8_t    invert;
-       char        name[IPT_RECENT_NAME_LEN];
-       u_int8_t    side;
-};
-
-#endif /*_IPT_RECENT_H*/
diff --git a/include/linux/netfilter_ipv4/ipt_rpc.h b/include/linux/netfilter_ipv4/ipt_rpc.h
deleted file mode 100644 (file)
index c204b7f..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/* RPC extension for IP netfilter matching, Version 2.2
- * (C) 2000 by Marcelo Barbosa Lima <marcelo.lima@dcc.unicamp.br>
- *     - original rpc tracking module
- *     - "recent" connection handling for kernel 2.3+ netfilter
- *
- * (C) 2001 by Rusty Russell <rusty@rustcorp.com.au>
- *     - upgraded conntrack modules to oldnat api - kernel 2.4.0+
- *
- * (C) 2002 by Ian (Larry) Latter <Ian.Latter@mq.edu.au>
- *     - upgraded conntrack modules to newnat api - kernel 2.4.20+
- *     - extended matching to support filtering on procedures
- *
- * ipt_rpc.h.c,v 2.2 2003/01/12 18:30:00
- *
- *     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 of the License, or (at your option) any later version.
- **
- */
-
-#ifndef _IPT_RPC_H
-#define _IPT_RPC_H
-
-struct ipt_rpc_data;
-
-struct ipt_rpc_info {
-       int inverse;
-       int strict;
-       const char c_procs[1408];
-       int i_procs;
-       struct ipt_rpc_data *data;
-};
-
-#endif /* _IPT_RPC_H */
diff --git a/include/linux/netfilter_ipv4/ipt_set.h b/include/linux/netfilter_ipv4/ipt_set.h
deleted file mode 100644 (file)
index 2a18b93..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef _IPT_SET_H
-#define _IPT_SET_H
-
-#include <linux/netfilter_ipv4/ip_set.h>
-
-struct ipt_set_info {
-       ip_set_id_t index;
-       u_int32_t flags[IP_SET_MAX_BINDINGS + 1];
-};
-
-/* match info */
-struct ipt_set_info_match {
-       struct ipt_set_info match_set;
-};
-
-struct ipt_set_info_target {
-       struct ipt_set_info add_set;
-       struct ipt_set_info del_set;
-};
-
-#endif /*_IPT_SET_H*/
diff --git a/include/linux/netfilter_ipv4/ipt_tos.h b/include/linux/netfilter_ipv4/ipt_tos.h
deleted file mode 100644 (file)
index a21f5df..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _IPT_TOS_H
-#define _IPT_TOS_H
-
-struct ipt_tos_info {
-    u_int8_t tos;
-    u_int8_t invert;
-};
-
-#ifndef IPTOS_NORMALSVC
-#define IPTOS_NORMALSVC 0
-#endif
-
-#endif /*_IPT_TOS_H*/
diff --git a/include/linux/netfilter_ipv4/ipt_ttl.h b/include/linux/netfilter_ipv4/ipt_ttl.h
deleted file mode 100644 (file)
index ee24fd8..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* IP tables module for matching the value of the TTL
- * (C) 2000 by Harald Welte <laforge@gnumonks.org> */
-
-#ifndef _IPT_TTL_H
-#define _IPT_TTL_H
-
-enum {
-       IPT_TTL_EQ = 0,         /* equals */
-       IPT_TTL_NE,             /* not equals */
-       IPT_TTL_LT,             /* less than */
-       IPT_TTL_GT,             /* greater than */
-};
-
-
-struct ipt_ttl_info {
-       u_int8_t        mode;
-       u_int8_t        ttl;
-};
-
-
-#endif
diff --git a/include/linux/netfilter_ipv6.h b/include/linux/netfilter_ipv6.h
deleted file mode 100644 (file)
index 70465c3..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-#ifndef __LINUX_IP6_NETFILTER_H
-#define __LINUX_IP6_NETFILTER_H
-
-/* IPv6-specific defines for netfilter. 
- * (C)1998 Rusty Russell -- This code is GPL.
- * (C)1999 David Jeffery
- *   this header was blatantly ripped from netfilter_ipv4.h 
- *   it's amazing what adding a bunch of 6s can do =8^)
- */
-
-#include <linux/netfilter.h>
-
-/* only for userspace compatibility */
-/* IP Cache bits. */
-/* Src IP address. */
-#define NFC_IP6_SRC              0x0001
-/* Dest IP address. */
-#define NFC_IP6_DST              0x0002
-/* Input device. */
-#define NFC_IP6_IF_IN            0x0004
-/* Output device. */
-#define NFC_IP6_IF_OUT           0x0008
-/* TOS. */
-#define NFC_IP6_TOS              0x0010
-/* Protocol. */
-#define NFC_IP6_PROTO            0x0020
-/* IP options. */
-#define NFC_IP6_OPTIONS          0x0040
-/* Frag & flags. */
-#define NFC_IP6_FRAG             0x0080
-
-
-/* Per-protocol information: only matters if proto match. */
-/* TCP flags. */
-#define NFC_IP6_TCPFLAGS         0x0100
-/* Source port. */
-#define NFC_IP6_SRC_PT           0x0200
-/* Dest port. */
-#define NFC_IP6_DST_PT           0x0400
-/* Something else about the proto */
-#define NFC_IP6_PROTO_UNKNOWN    0x2000
-
-/* IP6 Hooks */
-/* After promisc drops, checksum checks. */
-#define NF_IP6_PRE_ROUTING     0
-/* If the packet is destined for this box. */
-#define NF_IP6_LOCAL_IN                1
-/* If the packet is destined for another interface. */
-#define NF_IP6_FORWARD         2
-/* Packets coming from a local process. */
-#define NF_IP6_LOCAL_OUT               3
-/* Packets about to hit the wire. */
-#define NF_IP6_POST_ROUTING    4
-#define NF_IP6_NUMHOOKS                5
-
-
-enum nf_ip6_hook_priorities {
-       NF_IP6_PRI_FIRST = INT_MIN,
-       NF_IP6_PRI_CONNTRACK_DEFRAG = -400,
-       NF_IP6_PRI_SELINUX_FIRST = -225,
-       NF_IP6_PRI_CONNTRACK = -200,
-       NF_IP6_PRI_MANGLE = -150,
-       NF_IP6_PRI_NAT_DST = -100,
-       NF_IP6_PRI_FILTER = 0,
-       NF_IP6_PRI_NAT_SRC = 100,
-       NF_IP6_PRI_SELINUX_LAST = 225,
-       NF_IP6_PRI_LAST = INT_MAX,
-};
-
-#ifdef CONFIG_NETFILTER
-extern int ip6_route_me_harder(struct sk_buff *skb);
-extern __sum16 nf_ip6_checksum(struct sk_buff *skb, unsigned int hook,
-                                   unsigned int dataoff, u_int8_t protocol);
-
-extern int ipv6_netfilter_init(void);
-extern void ipv6_netfilter_fini(void);
-#else /* CONFIG_NETFILTER */
-static __inline__ int ipv6_netfilter_init(void) { return 0; }
-static __inline__ void ipv6_netfilter_fini(void) { return; }
-#endif /* CONFIG_NETFILTER */
-
-#endif /*__LINUX_IP6_NETFILTER_H*/
diff --git a/include/linux/netfilter_ipv6/ip6_tables.h b/include/linux/netfilter_ipv6/ip6_tables.h
deleted file mode 100644 (file)
index 68b22fc..0000000
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * 25-Jul-1998 Major changes to allow for ip chain table
- *
- * 3-Jan-2000 Named tables to allow packet selection for different uses.
- */
-
-/*
- *     Format of an IP6 firewall descriptor
- *
- *     src, dst, src_mask, dst_mask are always stored in network byte order.
- *     flags are stored in host byte order (of course).
- *     Port numbers are stored in HOST byte order.
- */
-
-#ifndef _IP6_TABLES_H
-#define _IP6_TABLES_H
-
-#include <linux/netfilter_ipv6.h>
-
-#include <linux/netfilter/x_tables.h>
-
-#define IP6T_FUNCTION_MAXNAMELEN XT_FUNCTION_MAXNAMELEN
-#define IP6T_TABLE_MAXNAMELEN XT_TABLE_MAXNAMELEN
-
-#define ip6t_match xt_match
-#define ip6t_target xt_target
-#define ip6t_table xt_table
-#define ip6t_get_revision xt_get_revision
-
-/* Yes, Virginia, you have to zero the padding. */
-struct ip6t_ip6 {
-       /* Source and destination IP6 addr */
-       struct in6_addr src, dst;               
-       /* Mask for src and dest IP6 addr */
-       struct in6_addr smsk, dmsk;
-       char iniface[IFNAMSIZ], outiface[IFNAMSIZ];
-       unsigned char iniface_mask[IFNAMSIZ], outiface_mask[IFNAMSIZ];
-
-       /* Upper protocol number
-        * - The allowed value is 0 (any) or protocol number of last parsable
-        *   header, which is 50 (ESP), 59 (No Next Header), 135 (MH), or
-        *   the non IPv6 extension headers.
-        * - The protocol numbers of IPv6 extension headers except of ESP and
-        *   MH do not match any packets.
-        * - You also need to set IP6T_FLAGS_PROTO to "flags" to check protocol.
-        */
-       u_int16_t proto;
-       /* TOS to match iff flags & IP6T_F_TOS */
-       u_int8_t tos;
-
-       /* Flags word */
-       u_int8_t flags;
-       /* Inverse flags */
-       u_int8_t invflags;
-};
-
-#define ip6t_entry_match xt_entry_match
-#define ip6t_entry_target xt_entry_target
-#define ip6t_standard_target xt_standard_target
-
-#define ip6t_counters  xt_counters
-
-/* Values for "flag" field in struct ip6t_ip6 (general ip6 structure). */
-#define IP6T_F_PROTO           0x01    /* Set if rule cares about upper 
-                                          protocols */
-#define IP6T_F_TOS             0x02    /* Match the TOS. */
-#define IP6T_F_GOTO            0x04    /* Set if jump is a goto */
-#define IP6T_F_MASK            0x07    /* All possible flag bits mask. */
-
-/* Values for "inv" field in struct ip6t_ip6. */
-#define IP6T_INV_VIA_IN                0x01    /* Invert the sense of IN IFACE. */
-#define IP6T_INV_VIA_OUT               0x02    /* Invert the sense of OUT IFACE */
-#define IP6T_INV_TOS           0x04    /* Invert the sense of TOS. */
-#define IP6T_INV_SRCIP         0x08    /* Invert the sense of SRC IP. */
-#define IP6T_INV_DSTIP         0x10    /* Invert the sense of DST OP. */
-#define IP6T_INV_FRAG          0x20    /* Invert the sense of FRAG. */
-#define IP6T_INV_PROTO         XT_INV_PROTO
-#define IP6T_INV_MASK          0x7F    /* All possible flag bits mask. */
-
-/* This structure defines each of the firewall rules.  Consists of 3
-   parts which are 1) general IP header stuff 2) match specific
-   stuff 3) the target to perform if the rule matches */
-struct ip6t_entry
-{
-       struct ip6t_ip6 ipv6;
-
-       /* Mark with fields that we care about. */
-       unsigned int nfcache;
-
-       /* Size of ipt_entry + matches */
-       u_int16_t target_offset;
-       /* Size of ipt_entry + matches + target */
-       u_int16_t next_offset;
-
-       /* Back pointer */
-       unsigned int comefrom;
-
-       /* Packet and byte counters. */
-       struct xt_counters counters;
-
-       /* The matches (if any), then the target. */
-       unsigned char elems[0];
-};
-
-/* Standard entry */
-struct ip6t_standard
-{
-       struct ip6t_entry entry;
-       struct ip6t_standard_target target;
-};
-
-struct ip6t_error_target
-{
-       struct ip6t_entry_target target;
-       char errorname[IP6T_FUNCTION_MAXNAMELEN];
-};
-
-struct ip6t_error
-{
-       struct ip6t_entry entry;
-       struct ip6t_error_target target;
-};
-
-#define IP6T_ENTRY_INIT(__size)                                                       \
-{                                                                             \
-       .target_offset  = sizeof(struct ip6t_entry),                           \
-       .next_offset    = (__size),                                            \
-}
-
-#define IP6T_STANDARD_INIT(__verdict)                                         \
-{                                                                             \
-       .entry          = IP6T_ENTRY_INIT(sizeof(struct ip6t_standard)),       \
-       .target         = XT_TARGET_INIT(IP6T_STANDARD_TARGET,                 \
-                                        sizeof(struct ip6t_standard_target)), \
-       .target.verdict = -(__verdict) - 1,                                    \
-}
-
-#define IP6T_ERROR_INIT                                                               \
-{                                                                             \
-       .entry          = IP6T_ENTRY_INIT(sizeof(struct ip6t_error)),          \
-       .target         = XT_TARGET_INIT(IP6T_ERROR_TARGET,                    \
-                                        sizeof(struct ip6t_error_target)),    \
-       .target.errorname = "ERROR",                                           \
-}
-
-/*
- * New IP firewall options for [gs]etsockopt at the RAW IP level.
- * Unlike BSD Linux inherits IP options so you don't have to use
- * a raw socket for this. Instead we check rights in the calls.
- *
- * ATTENTION: check linux/in6.h before adding new number here.
- */
-#define IP6T_BASE_CTL                  64
-
-#define IP6T_SO_SET_REPLACE            (IP6T_BASE_CTL)
-#define IP6T_SO_SET_ADD_COUNTERS       (IP6T_BASE_CTL + 1)
-#define IP6T_SO_SET_MAX                        IP6T_SO_SET_ADD_COUNTERS
-
-#define IP6T_SO_GET_INFO               (IP6T_BASE_CTL)
-#define IP6T_SO_GET_ENTRIES            (IP6T_BASE_CTL + 1)
-#define IP6T_SO_GET_REVISION_MATCH     (IP6T_BASE_CTL + 4)
-#define IP6T_SO_GET_REVISION_TARGET    (IP6T_BASE_CTL + 5)
-#define IP6T_SO_GET_MAX                        IP6T_SO_GET_REVISION_TARGET
-
-/* CONTINUE verdict for targets */
-#define IP6T_CONTINUE XT_CONTINUE
-
-/* For standard target */
-#define IP6T_RETURN XT_RETURN
-
-/* TCP/UDP matching stuff */
-#include <linux/netfilter/xt_tcpudp.h>
-
-#define ip6t_tcp xt_tcp
-#define ip6t_udp xt_udp
-
-/* Values for "inv" field in struct ipt_tcp. */
-#define IP6T_TCP_INV_SRCPT     XT_TCP_INV_SRCPT
-#define IP6T_TCP_INV_DSTPT     XT_TCP_INV_DSTPT
-#define IP6T_TCP_INV_FLAGS     XT_TCP_INV_FLAGS
-#define IP6T_TCP_INV_OPTION    XT_TCP_INV_OPTION
-#define IP6T_TCP_INV_MASK      XT_TCP_INV_MASK
-
-/* Values for "invflags" field in struct ipt_udp. */
-#define IP6T_UDP_INV_SRCPT     XT_UDP_INV_SRCPT
-#define IP6T_UDP_INV_DSTPT     XT_UDP_INV_DSTPT
-#define IP6T_UDP_INV_MASK      XT_UDP_INV_MASK
-
-/* ICMP matching stuff */
-struct ip6t_icmp
-{
-       u_int8_t type;                          /* type to match */
-       u_int8_t code[2];                       /* range of code */
-       u_int8_t invflags;                      /* Inverse flags */
-};
-
-/* Values for "inv" field for struct ipt_icmp. */
-#define IP6T_ICMP_INV  0x01    /* Invert the sense of type/code test */
-
-/* The argument to IP6T_SO_GET_INFO */
-struct ip6t_getinfo
-{
-       /* Which table: caller fills this in. */
-       char name[IP6T_TABLE_MAXNAMELEN];
-
-       /* Kernel fills these in. */
-       /* Which hook entry points are valid: bitmask */
-       unsigned int valid_hooks;
-
-       /* Hook entry points: one per netfilter hook. */
-       unsigned int hook_entry[NF_INET_NUMHOOKS];
-
-       /* Underflow points. */
-       unsigned int underflow[NF_INET_NUMHOOKS];
-
-       /* Number of entries */
-       unsigned int num_entries;
-
-       /* Size of entries. */
-       unsigned int size;
-};
-
-/* The argument to IP6T_SO_SET_REPLACE. */
-struct ip6t_replace
-{
-       /* Which table. */
-       char name[IP6T_TABLE_MAXNAMELEN];
-
-       /* Which hook entry points are valid: bitmask.  You can't
-           change this. */
-       unsigned int valid_hooks;
-
-       /* Number of entries */
-       unsigned int num_entries;
-
-       /* Total size of new entries */
-       unsigned int size;
-
-       /* Hook entry points. */
-       unsigned int hook_entry[NF_INET_NUMHOOKS];
-
-       /* Underflow points. */
-       unsigned int underflow[NF_INET_NUMHOOKS];
-
-       /* Information about old entries: */
-       /* Number of counters (must be equal to current number of entries). */
-       unsigned int num_counters;
-       /* The old entries' counters. */
-       struct xt_counters *counters;
-
-       /* The entries (hang off end: not really an array). */
-       struct ip6t_entry entries[0];
-};
-
-/* The argument to IP6T_SO_ADD_COUNTERS. */
-#define ip6t_counters_info xt_counters_info
-
-/* The argument to IP6T_SO_GET_ENTRIES. */
-struct ip6t_get_entries
-{
-       /* Which table: user fills this in. */
-       char name[IP6T_TABLE_MAXNAMELEN];
-
-       /* User fills this in: total entry size. */
-       unsigned int size;
-
-       /* The entries. */
-       struct ip6t_entry entrytable[0];
-};
-
-/* Standard return verdict, or do jump. */
-#define IP6T_STANDARD_TARGET XT_STANDARD_TARGET
-/* Error verdict. */
-#define IP6T_ERROR_TARGET XT_ERROR_TARGET
-
-/* Helper functions */
-static __inline__ struct ip6t_entry_target *
-ip6t_get_target(struct ip6t_entry *e)
-{
-       return (void *)e + e->target_offset;
-}
-
-/* fn returns 0 to continue iteration */
-#define IP6T_MATCH_ITERATE(e, fn, args...) \
-       XT_MATCH_ITERATE(struct ip6t_entry, e, fn, ## args)
-
-/* fn returns 0 to continue iteration */
-#define IP6T_ENTRY_ITERATE(entries, size, fn, args...) \
-       XT_ENTRY_ITERATE(struct ip6t_entry, entries, size, fn, ## args)
-
-/*
- *     Main firewall chains definitions and global var's definitions.
- */
-
-#endif /* _IP6_TABLES_H */
diff --git a/include/linux/netfilter_ipv6/ip6t_HL.h b/include/linux/netfilter_ipv6/ip6t_HL.h
deleted file mode 100644 (file)
index afb7813..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Hop Limit modification module for ip6tables
- * Maciej Soltysiak <solt@dns.toxicfilms.tv>
- * Based on HW's TTL module */
-
-#ifndef _IP6T_HL_H
-#define _IP6T_HL_H
-
-enum {
-       IP6T_HL_SET = 0,
-       IP6T_HL_INC,
-       IP6T_HL_DEC
-};
-
-#define IP6T_HL_MAXMODE        IP6T_HL_DEC
-
-struct ip6t_HL_info {
-       u_int8_t        mode;
-       u_int8_t        hop_limit;
-};
-
-
-#endif
diff --git a/include/linux/netfilter_ipv6/ip6t_LOG.h b/include/linux/netfilter_ipv6/ip6t_LOG.h
deleted file mode 100644 (file)
index 0d0119b..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef _IP6T_LOG_H
-#define _IP6T_LOG_H
-
-/* make sure not to change this without changing netfilter.h:NF_LOG_* (!) */
-#define IP6T_LOG_TCPSEQ                0x01    /* Log TCP sequence numbers */
-#define IP6T_LOG_TCPOPT                0x02    /* Log TCP options */
-#define IP6T_LOG_IPOPT         0x04    /* Log IP options */
-#define IP6T_LOG_UID           0x08    /* Log UID owning local socket */
-#define IP6T_LOG_NFLOG         0x10    /* Unsupported, don't use */
-#define IP6T_LOG_MASK          0x1f
-
-struct ip6t_log_info {
-       unsigned char level;
-       unsigned char logflags;
-       char prefix[30];
-};
-
-#endif /*_IPT_LOG_H*/
diff --git a/include/linux/netfilter_ipv6/ip6t_REJECT.h b/include/linux/netfilter_ipv6/ip6t_REJECT.h
deleted file mode 100644 (file)
index 6be6504..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef _IP6T_REJECT_H
-#define _IP6T_REJECT_H
-
-enum ip6t_reject_with {
-       IP6T_ICMP6_NO_ROUTE,
-       IP6T_ICMP6_ADM_PROHIBITED,
-       IP6T_ICMP6_NOT_NEIGHBOUR,
-       IP6T_ICMP6_ADDR_UNREACH,
-       IP6T_ICMP6_PORT_UNREACH,
-       IP6T_ICMP6_ECHOREPLY,
-       IP6T_TCP_RESET
-};
-
-struct ip6t_reject_info {
-       u_int32_t       with;   /* reject type */
-};
-
-#endif /*_IP6T_REJECT_H*/
diff --git a/include/linux/netfilter_ipv6/ip6t_TCPMSS.h b/include/linux/netfilter_ipv6/ip6t_TCPMSS.h
deleted file mode 100644 (file)
index 412d1cb..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef _IP6T_TCPMSS_H
-#define _IP6T_TCPMSS_H
-
-struct ip6t_tcpmss_info {
-       u_int16_t mss;
-};
-
-#define IP6T_TCPMSS_CLAMP_PMTU 0xffff
-
-#endif /*_IP6T_TCPMSS_H*/
diff --git a/include/linux/netfilter_ipv6/ip6t_ah.h b/include/linux/netfilter_ipv6/ip6t_ah.h
deleted file mode 100644 (file)
index 8531879..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef _IP6T_AH_H
-#define _IP6T_AH_H
-
-struct ip6t_ah
-{
-       u_int32_t spis[2];                      /* Security Parameter Index */
-       u_int32_t hdrlen;                       /* Header Length */
-       u_int8_t  hdrres;                       /* Test of the Reserved Filed */
-       u_int8_t  invflags;                     /* Inverse flags */
-};
-
-#define IP6T_AH_SPI 0x01
-#define IP6T_AH_LEN 0x02
-#define IP6T_AH_RES 0x04
-
-/* Values for "invflags" field in struct ip6t_ah. */
-#define IP6T_AH_INV_SPI                0x01    /* Invert the sense of spi. */
-#define IP6T_AH_INV_LEN                0x02    /* Invert the sense of length. */
-#define IP6T_AH_INV_MASK       0x03    /* All possible flags. */
-
-#endif /*_IP6T_AH_H*/
diff --git a/include/linux/netfilter_ipv6/ip6t_frag.h b/include/linux/netfilter_ipv6/ip6t_frag.h
deleted file mode 100644 (file)
index 66070a0..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef _IP6T_FRAG_H
-#define _IP6T_FRAG_H
-
-struct ip6t_frag
-{
-       u_int32_t ids[2];                       /* Security Parameter Index */
-       u_int32_t hdrlen;                       /* Header Length */
-       u_int8_t  flags;                        /*  */
-       u_int8_t  invflags;                     /* Inverse flags */
-};
-
-#define IP6T_FRAG_IDS          0x01
-#define IP6T_FRAG_LEN          0x02
-#define IP6T_FRAG_RES          0x04
-#define IP6T_FRAG_FST          0x08
-#define IP6T_FRAG_MF           0x10
-#define IP6T_FRAG_NMF                  0x20
-
-/* Values for "invflags" field in struct ip6t_frag. */
-#define IP6T_FRAG_INV_IDS      0x01    /* Invert the sense of ids. */
-#define IP6T_FRAG_INV_LEN      0x02    /* Invert the sense of length. */
-#define IP6T_FRAG_INV_MASK     0x03    /* All possible flags. */
-
-#endif /*_IP6T_FRAG_H*/
diff --git a/include/linux/netfilter_ipv6/ip6t_hl.h b/include/linux/netfilter_ipv6/ip6t_hl.h
deleted file mode 100644 (file)
index 5ef91b8..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/* ip6tables module for matching the Hop Limit value
- * Maciej Soltysiak <solt@dns.toxicfilms.tv>
- * Based on HW's ttl module */
-
-#ifndef _IP6T_HL_H
-#define _IP6T_HL_H
-
-enum {
-       IP6T_HL_EQ = 0,         /* equals */
-       IP6T_HL_NE,             /* not equals */
-       IP6T_HL_LT,             /* less than */
-       IP6T_HL_GT,             /* greater than */
-};
-
-
-struct ip6t_hl_info {
-       u_int8_t        mode;
-       u_int8_t        hop_limit;
-};
-
-
-#endif
diff --git a/include/linux/netfilter_ipv6/ip6t_ipv6header.h b/include/linux/netfilter_ipv6/ip6t_ipv6header.h
deleted file mode 100644 (file)
index 51c53fc..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/* ipv6header match - matches IPv6 packets based
-on whether they contain certain headers */
-
-/* Original idea: Brad Chapman 
- * Rewritten by: Andras Kis-Szabo <kisza@sch.bme.hu> */
-
-
-#ifndef __IPV6HEADER_H
-#define __IPV6HEADER_H
-
-struct ip6t_ipv6header_info
-{
-       u_int8_t matchflags;
-       u_int8_t invflags;
-       u_int8_t modeflag;
-};
-
-#define MASK_HOPOPTS    128
-#define MASK_DSTOPTS    64
-#define MASK_ROUTING    32
-#define MASK_FRAGMENT   16
-#define MASK_AH         8
-#define MASK_ESP        4
-#define MASK_NONE       2
-#define MASK_PROTO      1
-
-#endif /* __IPV6HEADER_H */
diff --git a/include/linux/netfilter_ipv6/ip6t_mh.h b/include/linux/netfilter_ipv6/ip6t_mh.h
deleted file mode 100644 (file)
index b9ca9a5..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef _IP6T_MH_H
-#define _IP6T_MH_H
-
-/* MH matching stuff */
-struct ip6t_mh
-{
-       u_int8_t types[2];      /* MH type range */
-       u_int8_t invflags;      /* Inverse flags */
-};
-
-/* Values for "invflags" field in struct ip6t_mh. */
-#define IP6T_MH_INV_TYPE       0x01    /* Invert the sense of type. */
-#define IP6T_MH_INV_MASK       0x01    /* All possible flags. */
-
-#endif /*_IP6T_MH_H*/
diff --git a/include/linux/netfilter_ipv6/ip6t_opts.h b/include/linux/netfilter_ipv6/ip6t_opts.h
deleted file mode 100644 (file)
index a07e363..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef _IP6T_OPTS_H
-#define _IP6T_OPTS_H
-
-#define IP6T_OPTS_OPTSNR 16
-
-struct ip6t_opts
-{
-       u_int32_t hdrlen;                       /* Header Length */
-       u_int8_t flags;                         /*  */
-       u_int8_t invflags;                      /* Inverse flags */
-       u_int16_t opts[IP6T_OPTS_OPTSNR];       /* opts */
-       u_int8_t optsnr;                        /* Nr of OPts */
-};
-
-#define IP6T_OPTS_LEN          0x01
-#define IP6T_OPTS_OPTS                 0x02
-#define IP6T_OPTS_NSTRICT      0x04
-
-/* Values for "invflags" field in struct ip6t_rt. */
-#define IP6T_OPTS_INV_LEN      0x01    /* Invert the sense of length. */
-#define IP6T_OPTS_INV_MASK     0x01    /* All possible flags. */
-
-#endif /*_IP6T_OPTS_H*/
diff --git a/include/linux/netfilter_ipv6/ip6t_owner.h b/include/linux/netfilter_ipv6/ip6t_owner.h
deleted file mode 100644 (file)
index 19937da..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef _IP6T_OWNER_H
-#define _IP6T_OWNER_H
-
-/* match and invert flags */
-#define IP6T_OWNER_UID 0x01
-#define IP6T_OWNER_GID 0x02
-#define IP6T_OWNER_PID 0x04
-#define IP6T_OWNER_SID 0x08
-
-struct ip6t_owner_info {
-    uid_t uid;
-    gid_t gid;
-    pid_t pid;
-    pid_t sid;
-    u_int8_t match, invert;    /* flags */
-};
-
-#endif /*_IPT_OWNER_H*/
diff --git a/include/linux/netfilter_ipv6/ip6t_policy.h b/include/linux/netfilter_ipv6/ip6t_policy.h
deleted file mode 100644 (file)
index b1c449d..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef _IP6T_POLICY_H
-#define _IP6T_POLICY_H
-
-#include <linux/netfilter/xt_policy.h>
-
-#define IP6T_POLICY_MAX_ELEM           XT_POLICY_MAX_ELEM
-
-/* ip6t_policy_flags */
-#define IP6T_POLICY_MATCH_IN           XT_POLICY_MATCH_IN
-#define IP6T_POLICY_MATCH_OUT          XT_POLICY_MATCH_OUT
-#define IP6T_POLICY_MATCH_NONE         XT_POLICY_MATCH_NONE
-#define IP6T_POLICY_MATCH_STRICT       XT_POLICY_MATCH_STRICT
-
-/* ip6t_policy_modes */
-#define IP6T_POLICY_MODE_TRANSPORT     XT_POLICY_MODE_TRANSPORT
-#define IP6T_POLICY_MODE_TUNNEL                XT_POLICY_MODE_TUNNEL
-
-#define ip6t_policy_spec               xt_policy_spec
-#define ip6t_policy_addr               xt_policy_addr
-#define ip6t_policy_elem               xt_policy_elem
-#define ip6t_policy_info               xt_policy_info
-
-#endif /* _IP6T_POLICY_H */
diff --git a/include/linux/netfilter_ipv6/ip6t_rt.h b/include/linux/netfilter_ipv6/ip6t_rt.h
deleted file mode 100644 (file)
index 5215602..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef _IP6T_RT_H
-#define _IP6T_RT_H
-
-/*#include <linux/in6.h>*/
-
-#define IP6T_RT_HOPS 16
-
-struct ip6t_rt
-{
-       u_int32_t rt_type;                      /* Routing Type */
-       u_int32_t segsleft[2];                  /* Segments Left */
-       u_int32_t hdrlen;                       /* Header Length */
-       u_int8_t  flags;                        /*  */
-       u_int8_t  invflags;                     /* Inverse flags */
-       struct in6_addr addrs[IP6T_RT_HOPS];    /* Hops */
-       u_int8_t addrnr;                        /* Nr of Addresses */
-};
-
-#define IP6T_RT_TYP            0x01
-#define IP6T_RT_SGS            0x02
-#define IP6T_RT_LEN            0x04
-#define IP6T_RT_RES            0x08
-#define IP6T_RT_FST_MASK       0x30
-#define IP6T_RT_FST            0x10
-#define IP6T_RT_FST_NSTRICT    0x20
-
-/* Values for "invflags" field in struct ip6t_rt. */
-#define IP6T_RT_INV_TYP                0x01    /* Invert the sense of type. */
-#define IP6T_RT_INV_SGS                0x02    /* Invert the sense of Segments. */
-#define IP6T_RT_INV_LEN                0x04    /* Invert the sense of length. */
-#define IP6T_RT_INV_MASK       0x07    /* All possible flags. */
-
-#endif /*_IP6T_RT_H*/
diff --git a/include/linux/types.h b/include/linux/types.h
deleted file mode 100644 (file)
index d9e8c4f..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-#ifndef _LINUX_TYPES_H
-#define _LINUX_TYPES_H
-
-
-#include <linux/posix_types.h>
-#include <asm/types.h>
-
-#ifndef __KERNEL_STRICT_NAMES
-
-typedef __u32 __kernel_dev_t;
-
-typedef __kernel_fd_set                fd_set;
-typedef __kernel_dev_t         dev_t;
-typedef __kernel_ino_t         ino_t;
-typedef __kernel_mode_t                mode_t;
-typedef __kernel_nlink_t       nlink_t;
-typedef __kernel_off_t         off_t;
-typedef __kernel_pid_t         pid_t;
-typedef __kernel_daddr_t       daddr_t;
-typedef __kernel_key_t         key_t;
-typedef __kernel_suseconds_t   suseconds_t;
-typedef __kernel_timer_t       timer_t;
-typedef __kernel_clockid_t     clockid_t;
-typedef __kernel_mqd_t         mqd_t;
-
-typedef __kernel_uid_t         uid_t;
-typedef __kernel_gid_t         gid_t;
-
-#if defined(__GNUC__)
-typedef __kernel_loff_t                loff_t;
-#endif
-
-/*
- * The following typedefs are also protected by individual ifdefs for
- * historical reasons:
- */
-#ifndef _SIZE_T
-#define _SIZE_T
-typedef __kernel_size_t                size_t;
-#endif
-
-#ifndef _SSIZE_T
-#define _SSIZE_T
-typedef __kernel_ssize_t       ssize_t;
-#endif
-
-#ifndef _PTRDIFF_T
-#define _PTRDIFF_T
-typedef __kernel_ptrdiff_t     ptrdiff_t;
-#endif
-
-#ifndef _TIME_T
-#define _TIME_T
-typedef __kernel_time_t                time_t;
-#endif
-
-#ifndef _CLOCK_T
-#define _CLOCK_T
-typedef __kernel_clock_t       clock_t;
-#endif
-
-#ifndef _CADDR_T
-#define _CADDR_T
-typedef __kernel_caddr_t       caddr_t;
-#endif
-
-/* bsd */
-typedef unsigned char          u_char;
-typedef unsigned short         u_short;
-typedef unsigned int           u_int;
-typedef unsigned long          u_long;
-
-/* sysv */
-typedef unsigned char          unchar;
-typedef unsigned short         ushort;
-typedef unsigned int           uint;
-typedef unsigned long          ulong;
-
-#ifndef __BIT_TYPES_DEFINED__
-#define __BIT_TYPES_DEFINED__
-
-typedef                __u8            u_int8_t;
-typedef                __s8            int8_t;
-typedef                __u16           u_int16_t;
-typedef                __s16           int16_t;
-typedef                __u32           u_int32_t;
-typedef                __s32           int32_t;
-
-#endif /* !(__BIT_TYPES_DEFINED__) */
-
-typedef                __u8            uint8_t;
-typedef                __u16           uint16_t;
-typedef                __u32           uint32_t;
-
-#if defined(__GNUC__)
-typedef                __u64           uint64_t;
-typedef                __u64           u_int64_t;
-typedef                __s64           int64_t;
-#endif
-
-/* this is a special 64bit data type that is 8-byte aligned */
-#define aligned_u64 __u64 __attribute__((aligned(8)))
-#define aligned_be64 __be64 __attribute__((aligned(8)))
-#define aligned_le64 __le64 __attribute__((aligned(8)))
-
-/**
- * The type used for indexing onto a disc or disc partition.
- *
- * Linux always considers sectors to be 512 bytes long independently
- * of the devices real block size.
- */
-#ifdef CONFIG_LBD
-typedef u64 sector_t;
-#else
-typedef unsigned long sector_t;
-#endif
-
-/*
- * The type of the inode's block count.
- */
-#ifdef CONFIG_LSF
-typedef u64 blkcnt_t;
-#else
-typedef unsigned long blkcnt_t;
-#endif
-
-/*
- * The type of an index into the pagecache.  Use a #define so asm/types.h
- * can override it.
- */
-#ifndef pgoff_t
-#define pgoff_t unsigned long
-#endif
-
-#endif /* __KERNEL_STRICT_NAMES */
-
-/*
- * Below are truly Linux-specific types that should never collide with
- * any application/library that wants linux/types.h.
- */
-
-#ifdef __CHECKER__
-#define __bitwise__ __attribute__((bitwise))
-#else
-#define __bitwise__
-#endif
-#ifdef __CHECK_ENDIAN__
-#define __bitwise __bitwise__
-#else
-#define __bitwise
-#endif
-
-typedef __u16 __bitwise __le16;
-typedef __u16 __bitwise __be16;
-typedef __u32 __bitwise __le32;
-typedef __u32 __bitwise __be32;
-#if defined(__GNUC__)
-typedef __u64 __bitwise __le64;
-typedef __u64 __bitwise __be64;
-#endif
-typedef __u16 __bitwise __sum16;
-typedef __u32 __bitwise __wsum;
-
-
-struct ustat {
-       __kernel_daddr_t        f_tfree;
-       __kernel_ino_t          f_tinode;
-       char                    f_fname[6];
-       char                    f_fpack[6];
-};
-
-#endif /* _LINUX_TYPES_H */
diff --git a/include/xtables.h.in b/include/xtables.h.in
deleted file mode 100644 (file)
index 4ce73e9..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-#ifndef _XTABLES_H
-#define _XTABLES_H
-
-#include <sys/types.h>
-#include <linux/types.h>
-#include <linux/netfilter/x_tables.h>
-#include <libiptc/libxtc.h>
-#include <stdbool.h>
-
-#ifndef IPPROTO_SCTP
-#define IPPROTO_SCTP 132
-#endif
-#ifndef IPPROTO_DCCP
-#define IPPROTO_DCCP 33
-#endif
-#ifndef IPPROTO_UDPLITE
-#define IPPROTO_UDPLITE        136
-#endif
-
-#define XTABLES_VERSION "@PACKAGE_VERSION@"
-#define XTABLES_VERSION_CODE (0x10000 * @XTABLES_VERSION_MAJOR@ + 0x100 * @XTABLES_VERSION_MINOR@ + @XTABLES_VERSION_PATCH@)
-
-#define XTABLES_API_VERSION(x,y,z)    (0x10000*(x) + 0x100*(y) + z)
-
-/* Include file for additions: new matches and targets. */
-struct xtables_match
-{
-       struct xtables_match *next;
-
-       xt_chainlabel name;
-
-       /* Revision of match (0 by default). */
-       u_int8_t revision;
-
-       u_int16_t family;
-
-       const char *version;
-
-       /* Size of match data. */
-       size_t size;
-
-       /* Size of match data relevent for userspace comparison purposes */
-       size_t userspacesize;
-
-       /* Function which prints out usage message. */
-       void (*help)(void);
-
-       /* Initialize the match. */
-       void (*init)(struct xt_entry_match *m);
-
-       /* Function which parses command options; returns true if it
-           ate an option */
-       /* entry is struct ipt_entry for example */
-       int (*parse)(int c, char **argv, int invert, unsigned int *flags,
-                    const void *entry,
-                    struct xt_entry_match **match);
-
-       /* Final check; exit if not ok. */
-       void (*final_check)(unsigned int flags);
-
-       /* Prints out the match iff non-NULL: put space at end */
-       /* ip is struct ipt_ip * for example */
-       void (*print)(const void *ip,
-                     const struct xt_entry_match *match, int numeric);
-
-       /* Saves the match info in parsable form to stdout. */
-       /* ip is struct ipt_ip * for example */
-       void (*save)(const void *ip, const struct xt_entry_match *match);
-
-       /* Pointer to list of extra command-line options */
-       const struct option *extra_opts;
-
-       /* Ignore these men behind the curtain: */
-       unsigned int option_offset;
-       struct xt_entry_match *m;
-       unsigned int mflags;
-#ifdef NO_SHARED_LIBS
-       unsigned int loaded; /* simulate loading so options are merged properly */
-#endif
-};
-
-struct xtables_target
-{
-       struct xtables_target *next;
-
-       xt_chainlabel name;
-
-       /* Revision of target (0 by default). */
-       u_int8_t revision;
-
-       u_int16_t family;
-
-       const char *version;
-
-       /* Size of target data. */
-       size_t size;
-
-       /* Size of target data relevent for userspace comparison purposes */
-       size_t userspacesize;
-
-       /* Function which prints out usage message. */
-       void (*help)(void);
-
-       /* Initialize the target. */
-       void (*init)(struct xt_entry_target *t);
-
-       /* Function which parses command options; returns true if it
-           ate an option */
-       /* entry is struct ipt_entry for example */
-       int (*parse)(int c, char **argv, int invert, unsigned int *flags,
-                    const void *entry,
-                    struct xt_entry_target **targetinfo);
-
-       /* Final check; exit if not ok. */
-       void (*final_check)(unsigned int flags);
-
-       /* Prints out the target iff non-NULL: put space at end */
-       void (*print)(const void *ip,
-                     const struct xt_entry_target *target, int numeric);
-
-       /* Saves the targinfo in parsable form to stdout. */
-       void (*save)(const void *ip,
-                    const struct xt_entry_target *target);
-
-       /* Pointer to list of extra command-line options */
-       const struct option *extra_opts;
-
-       /* Ignore these men behind the curtain: */
-       unsigned int option_offset;
-       struct xt_entry_target *t;
-       unsigned int tflags;
-       unsigned int used;
-#ifdef NO_SHARED_LIBS
-       unsigned int loaded; /* simulate loading so options are merged properly */
-#endif
-};
-
-/* Your shared library should call one of these. */
-extern void xtables_register_match(struct xtables_match *me);
-extern void xtables_register_target(struct xtables_target *me);
-
-extern int string_to_number_ll(const char *s,
-                              unsigned long long min,
-                              unsigned long long max,
-                              unsigned long long *ret);
-extern int string_to_number_l(const char *s,
-                             unsigned long min,
-                             unsigned long max,
-                             unsigned long *ret);
-extern int string_to_number(const char *s,
-                           unsigned int min,
-                           unsigned int max,
-                           unsigned int *ret);
-extern bool strtonuml(const char *, char **, unsigned long *,
-       unsigned long, unsigned long);
-extern bool strtonum(const char *, char **, unsigned int *,
-       unsigned int, unsigned int);
-extern int service_to_port(const char *name, const char *proto);
-extern u_int16_t parse_port(const char *port, const char *proto);
-extern void
-parse_interface(const char *arg, char *vianame, unsigned char *mask);
-
-enum exittype {
-       OTHER_PROBLEM = 1,
-       PARAMETER_PROBLEM,
-       VERSION_PROBLEM,
-       RESOURCE_PROBLEM,
-       P_ONLY_ONCE,
-       P_NO_INVERT,
-       P_BAD_VALUE,
-       P_ONE_ACTION,
-};
-
-/* this is a special 64bit data type that is 8-byte aligned */
-#define aligned_u64 u_int64_t __attribute__((aligned(8)))
-
-int check_inverse(const char option[], int *invert, int *my_optind, int argc);
-void exit_error(enum exittype, const char *, ...)__attribute__((noreturn,
-                                                         format(printf,2,3)));
-extern void param_act(unsigned int, const char *, ...);
-extern const char *program_name, *program_version;
-
-extern const char *ipaddr_to_numeric(const struct in_addr *);
-extern const char *ipaddr_to_anyname(const struct in_addr *);
-extern const char *ipmask_to_numeric(const struct in_addr *);
-extern struct in_addr *numeric_to_ipaddr(const char *);
-extern struct in_addr *numeric_to_ipmask(const char *);
-extern void ipparse_hostnetworkmask(const char *, struct in_addr **,
-       struct in_addr *, unsigned int *);
-
-extern struct in6_addr *numeric_to_ip6addr(const char *);
-extern const char *ip6addr_to_numeric(const struct in6_addr *);
-extern const char *ip6addr_to_anyname(const struct in6_addr *);
-extern const char *ip6mask_to_numeric(const struct in6_addr *);
-extern void ip6parse_hostnetworkmask(const char *, struct in6_addr **,
-       struct in6_addr *, unsigned int *);
-
-/**
- * Print the specified value to standard output, quoting dangerous
- * characters if required.
- */
-extern void save_string(const char *value);
-
-#ifdef NO_SHARED_LIBS
-#      ifdef _INIT
-#              undef _init
-#              define _init _INIT
-#      endif
-       extern void init_extensions(void);
-#else
-#      define _init __attribute__((constructor)) _INIT
-#endif
-
-/* Present in both iptables.c and ip6tables.c */
-extern u_int16_t parse_protocol(const char *s);
-
-#ifdef XTABLES_INTERNAL
-#      include <xtables/internal.h>
-#endif
-
-#endif /* _XTABLES_H */
diff --git a/include/xtables/internal.h b/include/xtables/internal.h
deleted file mode 100644 (file)
index 24a5078..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-#ifndef _XTABLES_INTERNAL_H
-#define _XTABLES_INTERNAL_H 1
-
-#ifndef XT_LIB_DIR
-#      define XT_LIB_DIR "/usr/local/lib/iptables"
-#endif
-
-/* protocol family dependent informations */
-struct afinfo {
-       /* protocol family */
-       int family;
-
-       /* prefix of library name (ex "libipt_" */
-       char *libprefix;
-
-       /* used by setsockopt (ex IPPROTO_IP */
-       int ipproto;
-
-       /* kernel module (ex "ip_tables" */
-       char *kmod;
-
-       /* optname to check revision support of match */
-       int so_rev_match;
-
-       /* optname to check revision support of match */
-       int so_rev_target;
-};
-
-enum xt_tryload {
-       DONT_LOAD,
-       DURING_LOAD,
-       TRY_LOAD,
-       LOAD_MUST_SUCCEED
-};
-
-struct xtables_rule_match {
-       struct xtables_rule_match *next;
-       struct xtables_match *match;
-       /* Multiple matches of the same type: the ones before
-          the current one are completed from parsing point of view */
-       unsigned int completed;
-};
-
-extern char *lib_dir;
-
-extern void *fw_calloc(size_t count, size_t size);
-extern void *fw_malloc(size_t size);
-
-extern const char *modprobe_program;
-extern int xtables_insmod(const char *modname, const char *modprobe, int quiet);
-extern int load_xtables_ko(const char *modprobe, int quiet);
-
-/* This is decleared in ip[6]tables.c */
-extern struct afinfo afinfo;
-
-/* Keeping track of external matches and targets: linked lists.  */
-extern struct xtables_match *xtables_matches;
-extern struct xtables_target *xtables_targets;
-
-extern struct xtables_match *find_match(const char *name, enum xt_tryload,
-                                       struct xtables_rule_match **match);
-extern struct xtables_target *find_target(const char *name, enum xt_tryload);
-
-extern void _init(void);
-
-#endif /* _XTABLES_INTERNAL_H */
diff --git a/install-sh b/install-sh
deleted file mode 100755 (executable)
index 4d4a951..0000000
+++ /dev/null
@@ -1,323 +0,0 @@
-#!/bin/sh
-# install - install a program, script, or datafile
-
-scriptversion=2005-05-14.22
-
-# 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.  It can only install one file at a time, a restriction
-# shared with many OS's install programs.
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
-
-# put in absolute paths if you don't have them in your path; or use env. vars.
-
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
-
-chmodcmd="$chmodprog 0755"
-chowncmd=
-chgrpcmd=
-stripcmd=
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=
-dst=
-dir_arg=
-dstarg=
-no_target_directory=
-
-usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
-   or: $0 [OPTION]... SRCFILES... DIRECTORY
-   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
-   or: $0 [OPTION]... -d DIRECTORIES...
-
-In the 1st form, copy SRCFILE to DSTFILE.
-In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
-In the 4th, create DIRECTORIES.
-
-Options:
--c         (ignored)
--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.
---help     display this help and exit.
---version  display version info and exit.
-
-Environment variables override the default commands:
-  CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
-"
-
-while test -n "$1"; do
-  case $1 in
-    -c) shift
-        continue;;
-
-    -d) dir_arg=true
-        shift
-        continue;;
-
-    -g) chgrpcmd="$chgrpprog $2"
-        shift
-        shift
-        continue;;
-
-    --help) echo "$usage"; exit $?;;
-
-    -m) chmodcmd="$chmodprog $2"
-        shift
-        shift
-        continue;;
-
-    -o) chowncmd="$chownprog $2"
-        shift
-        shift
-        continue;;
-
-    -s) stripcmd=$stripprog
-        shift
-        continue;;
-
-    -t) dstarg=$2
-       shift
-       shift
-       continue;;
-
-    -T) no_target_directory=true
-       shift
-       continue;;
-
-    --version) echo "$0 $scriptversion"; exit $?;;
-
-    *)  # When -d is used, all remaining arguments are directories to create.
-       # When -t is used, the destination is already specified.
-       test -n "$dir_arg$dstarg" && break
-        # Otherwise, the last argument is the destination.  Remove it from $@.
-       for arg
-       do
-          if test -n "$dstarg"; then
-           # $@ is not empty: it contains at least $arg.
-           set fnord "$@" "$dstarg"
-           shift # fnord
-         fi
-         shift # arg
-         dstarg=$arg
-       done
-       break;;
-  esac
-done
-
-if test -z "$1"; 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
-
-for src
-do
-  # Protect names starting with `-'.
-  case $src in
-    -*) src=./$src ;;
-  esac
-
-  if test -n "$dir_arg"; then
-    dst=$src
-    src=
-
-    if test -d "$dst"; then
-      mkdircmd=:
-      chmodcmd=
-    else
-      mkdircmd=$mkdirprog
-    fi
-  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 "$dstarg"; then
-      echo "$0: no destination specified." >&2
-      exit 1
-    fi
-
-    dst=$dstarg
-    # Protect names starting with `-'.
-    case $dst in
-      -*) dst=./$dst ;;
-    esac
-
-    # If destination is a directory, append the input filename; won't work
-    # if double slashes aren't ignored.
-    if test -d "$dst"; then
-      if test -n "$no_target_directory"; then
-       echo "$0: $dstarg: Is a directory" >&2
-       exit 1
-      fi
-      dst=$dst/`basename "$src"`
-    fi
-  fi
-
-  # This sed command emulates the dirname command.
-  dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
-
-  # Make sure that the destination directory exists.
-
-  # Skip lots of stat calls in the usual case.
-  if test ! -d "$dstdir"; then
-    defaultIFS='
-        '
-    IFS="${IFS-$defaultIFS}"
-
-    oIFS=$IFS
-    # Some sh's can't handle IFS=/ for some reason.
-    IFS='%'
-    set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
-    shift
-    IFS=$oIFS
-
-    pathcomp=
-
-    while test $# -ne 0 ; do
-      pathcomp=$pathcomp$1
-      shift
-      if test ! -d "$pathcomp"; then
-        $mkdirprog "$pathcomp"
-       # mkdir can fail with a `File exist' error in case several
-       # install-sh are creating the directory concurrently.  This
-       # is OK.
-       test -d "$pathcomp" || exit
-      fi
-      pathcomp=$pathcomp/
-    done
-  fi
-
-  if test -n "$dir_arg"; then
-    $doit $mkdircmd "$dst" \
-      && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
-      && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
-      && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
-      && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
-
-  else
-    dstfile=`basename "$dst"`
-
-    # 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
-    trap '(exit $?); exit' 1 2 13 15
-
-    # Copy the file name to the temp name.
-    $doit $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 "$dsttmp"; } &&
-
-    # Now rename the file to the real destination.
-    { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 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.
-          {
-            if test -f "$dstdir/$dstfile"; then
-              $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
-              || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
-              || {
-                echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
-                (exit 1); exit 1
-              }
-            else
-              :
-            fi
-          } &&
-
-          # Now rename the file to the real destination.
-          $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
-        }
-    }
-  fi || { (exit 1); exit 1; }
-done
-
-# The final little trick to "correctly" pass the exit status to the exit trap.
-{
-  (exit 0); exit 0
-}
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/ip6tables-multi.c b/ip6tables-multi.c
deleted file mode 100644 (file)
index 0bcface..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <libgen.h>
-
-int ip6tables_main(int argc, char **argv);
-int ip6tables_save_main(int argc, char **argv);
-int ip6tables_restore_main(int argc, char **argv);
-
-int main(int argc, char **argv) {
-  char *progname;
-
-  if (argc == 0) {
-    fprintf(stderr, "no argv[0]?");
-    exit(1);
-  } else {
-    progname = basename(argv[0]);
-
-    if (!strcmp(progname, "ip6tables"))
-      return ip6tables_main(argc, argv);
-    
-    if (!strcmp(progname, "ip6tables-save"))
-      return ip6tables_save_main(argc, argv);
-    
-    if (!strcmp(progname, "ip6tables-restore"))
-      return ip6tables_restore_main(argc, argv);
-    
-    fprintf(stderr, "ip6tables multi-purpose version: unknown applet name %s\n", progname);
-    exit(1);
-  }
-}
diff --git a/ip6tables-multi.h b/ip6tables-multi.h
deleted file mode 100644 (file)
index 551029a..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _IP6TABLES_MULTI_H
-#define _IP6TABLES_MULTI_H 1
-
-extern int ip6tables_main(int, char **);
-extern int ip6tables_save_main(int, char **);
-extern int ip6tables_restore_main(int, char **);
-
-#endif /* _IP6TABLES_MULTI_H */
diff --git a/ip6tables-restore.8 b/ip6tables-restore.8
deleted file mode 100644 (file)
index 43c1268..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-.TH IP6TABLES-RESTORE 8 "Jan 30, 2002" "" ""
-.\"
-.\" Man page written by Harald Welte <laforge@gnumonks.org>
-.\" It is based on the iptables man page.
-.\"
-.\"    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 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, write to the Free Software
-.\"    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-.\"
-.\"
-.SH NAME
-ip6tables-restore \- Restore IPv6 Tables
-.SH SYNOPSIS
-.BR "ip6tables-restore " "[-c] [-n]"
-.br
-.SH DESCRIPTION
-.PP
-.B ip6tables-restore
-is used to restore IPv6 Tables from data specified on STDIN. Use 
-I/O redirection provided by your shell to read from a file
-.TP
-\fB\-c\fR, \fB\-\-counters\fR
-restore the values of all packet and byte counters
-.TP
-\fB\-n\fR, \fB\-\-noflush\fR 
-.TP
-don't flush the previous contents of the table. If not specified, 
-.B ip6tables-restore
-flushes (deletes) all previous contents of the respective IPv6 Table.
-.SH BUGS
-None known as of iptables-1.2.1 release
-.SH AUTHORS
-Harald Welte <laforge@gnumonks.org>
-.br
-Andras Kis-Szabo <kisza@sch.bme.hu>
-.SH SEE ALSO
-.BR ip6tables-save "(8), " ip6tables "(8) "
-.PP
-The iptables-HOWTO, which details more iptables usage, the NAT-HOWTO,
-which details NAT, and the netfilter-hacking-HOWTO which details the
-internals.
diff --git a/ip6tables-restore.c b/ip6tables-restore.c
deleted file mode 100644 (file)
index cd6dd03..0000000
+++ /dev/null
@@ -1,454 +0,0 @@
-/* Code to restore the iptables state, from file by ip6tables-save.
- * Author:  Andras Kis-Szabo <kisza@sch.bme.hu>
- *
- * based on iptables-restore
- * Authors:
- *      Harald Welte <laforge@gnumonks.org>
- *      Rusty Russell <rusty@linuxcare.com.au>
- * This code is distributed under the terms of GNU GPL v2
- *
- * $Id$
- */
-
-#include <getopt.h>
-#include <sys/errno.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "ip6tables.h"
-#include "xtables.h"
-#include "libiptc/libip6tc.h"
-#include "ip6tables-multi.h"
-
-#ifdef DEBUG
-#define DEBUGP(x, args...) fprintf(stderr, x, ## args)
-#else
-#define DEBUGP(x, args...)
-#endif
-
-static int binary = 0, counters = 0, verbose = 0, noflush = 0;
-
-/* Keeping track of external matches and targets.  */
-static const struct option options[] = {
-       {.name = "binary",   .has_arg = false, .val = 'b'},
-       {.name = "counters", .has_arg = false, .val = 'c'},
-       {.name = "verbose",  .has_arg = false, .val = 'v'},
-       {.name = "test",     .has_arg = false, .val = 't'},
-       {.name = "help",     .has_arg = false, .val = 'h'},
-       {.name = "noflush",  .has_arg = false, .val = 'n'},
-       {.name = "modprobe", .has_arg = true,  .val = 'M'},
-       {NULL},
-};
-
-static void print_usage(const char *name, const char *version) __attribute__((noreturn));
-
-static void print_usage(const char *name, const char *version)
-{
-       fprintf(stderr, "Usage: %s [-b] [-c] [-v] [-t] [-h]\n"
-                       "          [ --binary ]\n"
-                       "          [ --counters ]\n"
-                       "          [ --verbose ]\n"
-                       "          [ --test ]\n"
-                       "          [ --help ]\n"
-                       "          [ --noflush ]\n"
-                       "          [ --modprobe=<command>]\n", name);
-
-       exit(1);
-}
-
-static ip6tc_handle_t create_handle(const char *tablename,
-                                    const char *modprobe)
-{
-       ip6tc_handle_t handle;
-
-       handle = ip6tc_init(tablename);
-
-       if (!handle) {
-               /* try to insmod the module if iptc_init failed */
-               load_xtables_ko(modprobe, 0);
-               handle = ip6tc_init(tablename);
-       }
-
-       if (!handle) {
-               exit_error(PARAMETER_PROBLEM, "%s: unable to initialize "
-                       "table '%s'\n", program_name, tablename);
-               exit(1);
-       }
-       return handle;
-}
-
-static int parse_counters(char *string, struct ip6t_counters *ctr)
-{
-       unsigned long long pcnt, bcnt;
-       int ret;
-
-       ret = sscanf(string, "[%llu:%llu]",
-                    (unsigned long long *)&pcnt,
-                    (unsigned long long *)&bcnt);
-       ctr->pcnt = pcnt;
-       ctr->bcnt = bcnt;
-       return ret == 2;
-}
-
-/* global new argv and argc */
-static char *newargv[255];
-static int newargc;
-
-/* function adding one argument to newargv, updating newargc
- * returns true if argument added, false otherwise */
-static int add_argv(char *what) {
-       DEBUGP("add_argv: %s\n", what);
-       if (what && ((newargc + 1) < sizeof(newargv)/sizeof(char *))) {
-               newargv[newargc] = strdup(what);
-               newargc++;
-               return 1;
-       } else
-               return 0;
-}
-
-static void free_argv(void) {
-       int i;
-
-       for (i = 0; i < newargc; i++)
-               free(newargv[i]);
-}
-
-#ifdef IPTABLES_MULTI
-int ip6tables_restore_main(int argc, char *argv[])
-#else
-int main(int argc, char *argv[])
-#endif
-{
-       ip6tc_handle_t handle = NULL;
-       char buffer[10240];
-       int c;
-       char curtable[IP6T_TABLE_MAXNAMELEN + 1];
-       FILE *in;
-       const char *modprobe = NULL;
-       int in_table = 0, testing = 0;
-
-       program_name = "ip6tables-restore";
-       program_version = XTABLES_VERSION;
-       line = 0;
-
-       lib_dir = getenv("XTABLES_LIBDIR");
-       if (lib_dir == NULL) {
-               lib_dir = getenv("IP6TABLES_LIB_DIR");
-               if (lib_dir != NULL)
-                       fprintf(stderr, "IP6TABLES_LIB_DIR is deprecated\n");
-       }
-       if (lib_dir == NULL)
-               lib_dir = XTABLES_LIBDIR;
-
-#ifdef NO_SHARED_LIBS
-       init_extensions();
-#endif
-
-       while ((c = getopt_long(argc, argv, "bcvthnM:", options, NULL)) != -1) {
-               switch (c) {
-                       case 'b':
-                               binary = 1;
-                               break;
-                       case 'c':
-                               counters = 1;
-                               break;
-                       case 'v':
-                               verbose = 1;
-                               break;
-                       case 't':
-                               testing = 1;
-                               break;
-                       case 'h':
-                               print_usage("ip6tables-restore",
-                                           XTABLES_VERSION);
-                               break;
-                       case 'n':
-                               noflush = 1;
-                               break;
-                       case 'M':
-                               modprobe = optarg;
-                               break;
-               }
-       }
-
-       if (optind == argc - 1) {
-               in = fopen(argv[optind], "r");
-               if (!in) {
-                       fprintf(stderr, "Can't open %s: %s\n", argv[optind],
-                               strerror(errno));
-                       exit(1);
-               }
-       }
-       else if (optind < argc) {
-               fprintf(stderr, "Unknown arguments found on commandline\n");
-               exit(1);
-       }
-       else in = stdin;
-
-       /* Grab standard input. */
-       while (fgets(buffer, sizeof(buffer), in)) {
-               int ret = 0;
-
-               line++;
-               if (buffer[0] == '\n')
-                       continue;
-               else if (buffer[0] == '#') {
-                       if (verbose)
-                               fputs(buffer, stdout);
-                       continue;
-               } else if ((strcmp(buffer, "COMMIT\n") == 0) && (in_table)) {
-                       if (!testing) {
-                               DEBUGP("Calling commit\n");
-                               ret = ip6tc_commit(&handle);
-                       } else {
-                               DEBUGP("Not calling commit, testing\n");
-                               ret = 1;
-                       }
-                       in_table = 0;
-               } else if ((buffer[0] == '*') && (!in_table)) {
-                       /* New table */
-                       char *table;
-
-                       table = strtok(buffer+1, " \t\n");
-                       DEBUGP("line %u, table '%s'\n", line, table);
-                       if (!table) {
-                               exit_error(PARAMETER_PROBLEM,
-                                       "%s: line %u table name invalid\n",
-                                       program_name, line);
-                               exit(1);
-                       }
-                       strncpy(curtable, table, IP6T_TABLE_MAXNAMELEN);
-                       curtable[IP6T_TABLE_MAXNAMELEN] = '\0';
-
-                       if (handle)
-                               ip6tc_free(&handle);
-
-                       handle = create_handle(table, modprobe);
-                       if (noflush == 0) {
-                               DEBUGP("Cleaning all chains of table '%s'\n",
-                                       table);
-                               for_each_chain(flush_entries, verbose, 1,
-                                               &handle);
-
-                               DEBUGP("Deleting all user-defined chains "
-                                      "of table '%s'\n", table);
-                               for_each_chain(delete_chain, verbose, 0,
-                                               &handle) ;
-                       }
-
-                       ret = 1;
-                       in_table = 1;
-
-               } else if ((buffer[0] == ':') && (in_table)) {
-                       /* New chain. */
-                       char *policy, *chain;
-
-                       chain = strtok(buffer+1, " \t\n");
-                       DEBUGP("line %u, chain '%s'\n", line, chain);
-                       if (!chain) {
-                               exit_error(PARAMETER_PROBLEM,
-                                          "%s: line %u chain name invalid\n",
-                                          program_name, line);
-                               exit(1);
-                       }
-
-                       if (ip6tc_builtin(chain, handle) <= 0) {
-                               if (noflush && ip6tc_is_chain(chain, handle)) {
-                                       DEBUGP("Flushing existing user defined chain '%s'\n", chain);
-                                       if (!ip6tc_flush_entries(chain, &handle))
-                                               exit_error(PARAMETER_PROBLEM,
-                                                          "error flushing chain "
-                                                          "'%s':%s\n", chain,
-                                                          strerror(errno));
-                               } else {
-                                       DEBUGP("Creating new chain '%s'\n", chain);
-                                       if (!ip6tc_create_chain(chain, &handle))
-                                               exit_error(PARAMETER_PROBLEM,
-                                                          "error creating chain "
-                                                          "'%s':%s\n", chain,
-                                                          strerror(errno));
-                               }
-                       }
-
-                       policy = strtok(NULL, " \t\n");
-                       DEBUGP("line %u, policy '%s'\n", line, policy);
-                       if (!policy) {
-                               exit_error(PARAMETER_PROBLEM,
-                                          "%s: line %u policy invalid\n",
-                                          program_name, line);
-                               exit(1);
-                       }
-
-                       if (strcmp(policy, "-") != 0) {
-                               struct ip6t_counters count;
-
-                               if (counters) {
-                                       char *ctrs;
-                                       ctrs = strtok(NULL, " \t\n");
-
-                                       if (!ctrs || !parse_counters(ctrs, &count))
-                                               exit_error(PARAMETER_PROBLEM,
-                                                         "invalid policy counters "
-                                                         "for chain '%s'\n", chain);
-
-                               } else {
-                                       memset(&count, 0,
-                                              sizeof(struct ip6t_counters));
-                               }
-
-                               DEBUGP("Setting policy of chain %s to %s\n",
-                                       chain, policy);
-
-                               if (!ip6tc_set_policy(chain, policy, &count,
-                                                    &handle))
-                                       exit_error(OTHER_PROBLEM,
-                                               "Can't set policy `%s'"
-                                               " on `%s' line %u: %s\n",
-                                               chain, policy, line,
-                                               ip6tc_strerror(errno));
-                       }
-
-                       ret = 1;
-
-               } else if (in_table) {
-                       int a;
-                       char *ptr = buffer;
-                       char *pcnt = NULL;
-                       char *bcnt = NULL;
-                       char *parsestart;
-
-                       /* the parser */
-                       char *curchar;
-                       int quote_open, escaped;
-                       size_t param_len;
-
-                       /* reset the newargv */
-                       newargc = 0;
-
-                       if (buffer[0] == '[') {
-                               /* we have counters in our input */
-                               ptr = strchr(buffer, ']');
-                               if (!ptr)
-                                       exit_error(PARAMETER_PROBLEM,
-                                                  "Bad line %u: need ]\n",
-                                                  line);
-
-                               pcnt = strtok(buffer+1, ":");
-                               if (!pcnt)
-                                       exit_error(PARAMETER_PROBLEM,
-                                                  "Bad line %u: need :\n",
-                                                  line);
-
-                               bcnt = strtok(NULL, "]");
-                               if (!bcnt)
-                                       exit_error(PARAMETER_PROBLEM,
-                                                  "Bad line %u: need ]\n",
-                                                  line);
-
-                               /* start command parsing after counter */
-                               parsestart = ptr + 1;
-                       } else {
-                               /* start command parsing at start of line */
-                               parsestart = buffer;
-                       }
-
-                       add_argv(argv[0]);
-                       add_argv("-t");
-                       add_argv((char *) &curtable);
-
-                       if (counters && pcnt && bcnt) {
-                               add_argv("--set-counters");
-                               add_argv((char *) pcnt);
-                               add_argv((char *) bcnt);
-                       }
-
-                       /* After fighting with strtok enough, here's now
-                        * a 'real' parser. According to Rusty I'm now no
-                        * longer a real hacker, but I can live with that */
-
-                       quote_open = 0;
-                       escaped = 0;
-                       param_len = 0;
-
-                       for (curchar = parsestart; *curchar; curchar++) {
-                               char param_buffer[1024];
-
-                               if (quote_open) {
-                                       if (escaped) {
-                                               param_buffer[param_len++] = *curchar;
-                                               escaped = 0;
-                                               continue;
-                                       } else if (*curchar == '\\') {
-                                               escaped = 1;
-                                               continue;
-                                       } else if (*curchar == '"') {
-                                               quote_open = 0;
-                                               *curchar = ' ';
-                                       } else {
-                                               param_buffer[param_len++] = *curchar;
-                                               continue;
-                                       }
-                               } else {
-                                       if (*curchar == '"') {
-                                               quote_open = 1;
-                                               continue;
-                                       }
-                               }
-
-                               if (*curchar == ' '
-                                   || *curchar == '\t'
-                                   || * curchar == '\n') {
-                                       if (!param_len) {
-                                               /* two spaces? */
-                                               continue;
-                                       }
-
-                                       param_buffer[param_len] = '\0';
-
-                                       /* check if table name specified */
-                                       if (!strncmp(param_buffer, "-t", 3)
-                                            || !strncmp(param_buffer, "--table", 8)) {
-                                               exit_error(PARAMETER_PROBLEM,
-                                                  "Line %u seems to have a "
-                                                  "-t table option.\n", line);
-                                               exit(1);
-                                       }
-
-                                       add_argv(param_buffer);
-                                       param_len = 0;
-                               } else {
-                                       /* regular character, copy to buffer */
-                                       param_buffer[param_len++] = *curchar;
-
-                                       if (param_len >= sizeof(param_buffer))
-                                               exit_error(PARAMETER_PROBLEM, 
-                                                  "Parameter too long!");
-                               }
-                       }
-
-                       DEBUGP("calling do_command6(%u, argv, &%s, handle):\n",
-                               newargc, curtable);
-
-                       for (a = 0; a < newargc; a++)
-                               DEBUGP("argv[%u]: %s\n", a, newargv[a]);
-
-                       ret = do_command6(newargc, newargv,
-                                        &newargv[2], &handle);
-
-                       free_argv();
-                       fflush(stdout);
-               }
-               if (!ret) {
-                       fprintf(stderr, "%s: line %u failed\n",
-                                       program_name, line);
-                       exit(1);
-               }
-       }
-       if (in_table) {
-               fprintf(stderr, "%s: COMMIT expected at line %u\n",
-                               program_name, line + 1);
-               exit(1);
-       }
-
-       return 0;
-}
diff --git a/ip6tables-save.8 b/ip6tables-save.8
deleted file mode 100644 (file)
index c8b3e96..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-.TH IP6TABLES-SAVE 8 "Jan 30, 2002" "" ""
-.\"
-.\" Man page written by Harald Welte <laforge@gnumonks.org>
-.\" It is based on the iptables man page.
-.\"
-.\"    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 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, write to the Free Software
-.\"    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-.\"
-.\"
-.SH NAME
-ip6tables-save \- Save IPv6 Tables
-.SH SYNOPSIS
-.BR "ip6tables-save " "[-c] [-t table]"
-.br
-.SH DESCRIPTION
-.PP
-.B ip6tables-save
-is used to dump the contents of an IPv6 Table in easily parseable format
-to STDOUT. Use I/O-redirection provided by your shell to write to a file.
-.TP
-\fB\-c\fR, \fB\-\-counters\fR
-include the current values of all packet and byte counters in the output
-.TP
-\fB\-t\fR, \fB\-\-table\fR \fBtablename\fR
-.TP
-restrict output to only one table. If not specified, output includes all
-available tables.
-.SH BUGS
-None known as of iptables-1.2.1 release
-.SH AUTHORS
-Harald Welte <laforge@gnumonks.org>
-.br
-Andras Kis-Szabo <kisza@sch.bme.hu>
-.SH SEE ALSO
-.BR ip6tables-restore "(8), " ip6tables "(8) "
-.PP
-The iptables-HOWTO, which details more iptables usage, the NAT-HOWTO,
-which details NAT, and the netfilter-hacking-HOWTO which details the
-internals.
diff --git a/ip6tables-save.c b/ip6tables-save.c
deleted file mode 100644 (file)
index 7b03d7c..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-/* Code to save the ip6tables state, in human readable-form. */
-/* Author:  Andras Kis-Szabo <kisza@sch.bme.hu>
- * Original code: iptables-save
- * Authors: Paul 'Rusty' Russel <rusty@linuxcare.com.au> and
- *          Harald Welte <laforge@gnumonks.org>
- * This code is distributed under the terms of GNU GPL v2
- */
-#include <getopt.h>
-#include <sys/errno.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <netdb.h>
-#include <arpa/inet.h>
-#include "libiptc/libip6tc.h"
-#include "ip6tables.h"
-#include "ip6tables-multi.h"
-
-#ifndef NO_SHARED_LIBS
-#include <dlfcn.h>
-#endif
-
-static int show_binary = 0, show_counters = 0;
-
-static const struct option options[] = {
-       {.name = "binary",   .has_arg = false, .val = 'b'},
-       {.name = "counters", .has_arg = false, .val = 'c'},
-       {.name = "dump",     .has_arg = false, .val = 'd'},
-       {.name = "table",    .has_arg = true,  .val = 't'},
-       {NULL},
-};
-
-
-/* Debugging prototype. */
-static int for_each_table(int (*func)(const char *tablename))
-{
-       int ret = 1;
-       FILE *procfile = NULL;
-       char tablename[IP6T_TABLE_MAXNAMELEN+1];
-
-       procfile = fopen("/proc/net/ip6_tables_names", "r");
-       if (!procfile)
-               exit_error(OTHER_PROBLEM,
-                          "Unable to open /proc/net/ip6_tables_names: %s\n",
-                          strerror(errno));
-
-       while (fgets(tablename, sizeof(tablename), procfile)) {
-               if (tablename[strlen(tablename) - 1] != '\n')
-                       exit_error(OTHER_PROBLEM, 
-                                  "Badly formed tablename `%s'\n",
-                                  tablename);
-               tablename[strlen(tablename) - 1] = '\0';
-               ret &= func(tablename);
-       }
-
-       return ret;
-}
-
-
-static int do_output(const char *tablename)
-{
-       ip6tc_handle_t h;
-       const char *chain = NULL;
-
-       if (!tablename)
-               return for_each_table(&do_output);
-
-       h = ip6tc_init(tablename);
-       if (!h)
-               exit_error(OTHER_PROBLEM, "Can't initialize: %s\n",
-                          ip6tc_strerror(errno));
-
-       if (!show_binary) {
-               time_t now = time(NULL);
-
-               printf("# Generated by ip6tables-save v%s on %s",
-                      XTABLES_VERSION, ctime(&now));
-               printf("*%s\n", tablename);
-
-               /* Dump out chain names first,
-                * thereby preventing dependency conflicts */
-               for (chain = ip6tc_first_chain(&h);
-                    chain;
-                    chain = ip6tc_next_chain(&h)) {
-
-                       printf(":%s ", chain);
-                       if (ip6tc_builtin(chain, h)) {
-                               struct ip6t_counters count;
-                               printf("%s ",
-                                      ip6tc_get_policy(chain, &count, &h));
-                               printf("[%llu:%llu]\n", (unsigned long long)count.pcnt, (unsigned long long)count.bcnt);
-                       } else {
-                               printf("- [0:0]\n");
-                       }
-               }
-
-
-               for (chain = ip6tc_first_chain(&h);
-                    chain;
-                    chain = ip6tc_next_chain(&h)) {
-                       const struct ip6t_entry *e;
-
-                       /* Dump out rules */
-                       e = ip6tc_first_rule(chain, &h);
-                       while(e) {
-                               print_rule(e, &h, chain, show_counters);
-                               e = ip6tc_next_rule(e, &h);
-                       }
-               }
-
-               now = time(NULL);
-               printf("COMMIT\n");
-               printf("# Completed on %s", ctime(&now));
-       } else {
-               /* Binary, huh?  OK. */
-               exit_error(OTHER_PROBLEM, "Binary NYI\n");
-       }
-
-       ip6tc_free(&h);
-
-       return 1;
-}
-
-/* Format:
- * :Chain name POLICY packets bytes
- * rule
- */
-#ifdef IPTABLES_MULTI
-int ip6tables_save_main(int argc, char *argv[])
-#else
-int main(int argc, char *argv[])
-#endif
-{
-       const char *tablename = NULL;
-       int c;
-
-       program_name = "ip6tables-save";
-       program_version = XTABLES_VERSION;
-
-       lib_dir = getenv("XTABLES_LIBDIR");
-       if (lib_dir == NULL) {
-               lib_dir = getenv("IP6TABLES_LIB_DIR");
-               if (lib_dir != NULL)
-                       fprintf(stderr, "IP6TABLES_LIB_DIR is deprecated\n");
-       }
-       if (lib_dir == NULL)
-               lib_dir = XTABLES_LIBDIR;
-
-#ifdef NO_SHARED_LIBS
-       init_extensions();
-#endif
-
-       while ((c = getopt_long(argc, argv, "bcdt:", options, NULL)) != -1) {
-               switch (c) {
-               case 'b':
-                       show_binary = 1;
-                       break;
-
-               case 'c':
-                       show_counters = 1;
-                       break;
-
-               case 't':
-                       /* Select specific table. */
-                       tablename = optarg;
-                       break;
-               case 'd':
-                       do_output(tablename);
-                       exit(0);
-               }
-       }
-
-       if (optind < argc) {
-               fprintf(stderr, "Unknown arguments found on commandline\n");
-               exit(1);
-       }
-
-       return !do_output(tablename);
-}
diff --git a/ip6tables-standalone.c b/ip6tables-standalone.c
deleted file mode 100644 (file)
index 5bdcd4f..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Author: Paul.Russell@rustcorp.com.au and mneuling@radlogic.com.au
- *
- * (C) 2000-2002 by the netfilter coreteam <coreteam@netfilter.org>:
- *                 Paul 'Rusty' Russell <rusty@rustcorp.com.au>
- *                 Marc Boucher <marc+nf@mbsi.ca>
- *                 James Morris <jmorris@intercode.com.au>
- *                 Harald Welte <laforge@gnumonks.org>
- *                 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
- *
- * Based on the ipchains code by Paul Russell and Michael Neuling
- *
- *     iptables -- IP firewall administration for kernels with
- *     firewall table (aimed for the 2.3 kernels)
- *
- *     See the accompanying manual page iptables(8) for information
- *     about proper usage of this program.
- *
- *     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 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, write to the Free Software
- *     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <ip6tables.h>
-#include "ip6tables-multi.h"
-
-#ifdef IPTABLES_MULTI
-int
-ip6tables_main(int argc, char *argv[])
-#else
-int
-main(int argc, char *argv[])
-#endif
-{
-       int ret;
-       char *table = "filter";
-       ip6tc_handle_t handle = NULL;
-
-       program_name = "ip6tables";
-       program_version = XTABLES_VERSION;
-
-       lib_dir = getenv("XTABLES_LIBDIR");
-       if (lib_dir == NULL) {
-               lib_dir = getenv("IP6TABLES_LIB_DIR");
-               if (lib_dir != NULL)
-                       fprintf(stderr, "IP6TABLES_LIB_DIR is deprecated\n");
-       }
-       if (lib_dir == NULL)
-               lib_dir = XTABLES_LIBDIR;
-
-#ifdef NO_SHARED_LIBS
-       init_extensions();
-#endif
-
-       ret = do_command6(argc, argv, &table, &handle);
-       if (ret)
-               ret = ip6tc_commit(&handle);
-
-       if (!ret)
-               fprintf(stderr, "ip6tables: %s\n",
-                       ip6tc_strerror(errno));
-
-       exit(!ret);
-}
diff --git a/ip6tables.8.in b/ip6tables.8.in
deleted file mode 100644 (file)
index 45b14dc..0000000
+++ /dev/null
@@ -1,497 +0,0 @@
-.TH IP6TABLES 8 "Jan 22, 2006" "" ""
-.\"
-.\" Man page written by Andras Kis-Szabo <kisza@sch.bme.hu>
-.\" It is based on iptables man page.
-.\"
-.\" iptables page by Herve Eychenne <rv@wallfire.org>
-.\" It is based on ipchains man page.
-.\"
-.\" ipchains page by Paul ``Rusty'' Russell March 1997
-.\" Based on the original ipfwadm man page by Jos Vos <jos@xos.nl>
-.\"
-.\"    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 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, write to the Free Software
-.\"    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-.\"
-.\"
-.SH NAME
-ip6tables \- IPv6 packet filter administration
-.SH SYNOPSIS
-.BR "ip6tables [-t table] -[AD] " "chain rule-specification [options]"
-.br
-.BR "ip6tables [-t table] -I " "chain [rulenum] rule-specification [options]"
-.br
-.BR "ip6tables [-t table] -R " "chain rulenum rule-specification [options]"
-.br
-.BR "ip6tables [-t table] -D " "chain rulenum [options]"
-.br
-.BR "ip6tables [-t table] -[LFZ] " "[chain] [options]"
-.br
-.BR "ip6tables [-t table] -N " "chain"
-.br
-.BR "ip6tables [-t table] -X " "[chain]"
-.br
-.BR "ip6tables [-t table] -P " "chain target [options]"
-.br
-.BR "ip6tables [-t table] -E " "old-chain-name new-chain-name"
-.SH DESCRIPTION
-.B Ip6tables
-is used to set up, maintain, and inspect the tables of IPv6 packet
-filter rules in the Linux kernel.  Several different tables
-may be defined.  Each table contains a number of built-in
-chains and may also contain user-defined chains.
-
-Each chain is a list of rules which can match a set of packets.  Each
-rule specifies what to do with a packet that matches.  This is called
-a `target', which may be a jump to a user-defined chain in the same
-table.
-
-.SH TARGETS
-A firewall rule specifies criteria for a packet, and a target.  If the
-packet does not match, the next rule in the chain is the examined; if
-it does match, then the next rule is specified by the value of the
-target, which can be the name of a user-defined chain or one of the
-special values 
-.IR ACCEPT ,
-.IR DROP ,
-.IR QUEUE ,
-or
-.IR RETURN .
-.PP
-.I ACCEPT 
-means to let the packet through.
-.I DROP
-means to drop the packet on the floor.
-.I QUEUE
-means to pass the packet to userspace.  (How the packet can be received
-by a userspace process differs by the particular queue handler.  2.4.x
-and 2.6.x kernels up to 2.6.13 include the 
-.B
-ip_queue
-queue handler.  Kernels 2.6.14 and later additionally include the 
-.B
-nfnetlink_queue
-queue handler.  Packets with a target of QUEUE will be sent to queue number '0'
-in this case. Please also see the
-.B
-NFQUEUE
-target as described later in this man page.)
-.I RETURN
-means stop traversing this chain and resume at the next rule in the
-previous (calling) chain.  If the end of a built-in chain is reached
-or a rule in a built-in chain with target
-.I RETURN
-is matched, the target specified by the chain policy determines the
-fate of the packet.
-.SH TABLES
-There are currently two independent tables (which tables are present
-at any time depends on the kernel configuration options and which
-modules are present), as nat table has not been implemented yet.
-.TP
-.BI "-t, --table " "table"
-This option specifies the packet matching table which the command
-should operate on.  If the kernel is configured with automatic module
-loading, an attempt will be made to load the appropriate module for
-that table if it is not already there.
-
-The tables are as follows:
-.RS
-.TP .4i
-.BR "filter" :
-This is the default table (if no -t option is passed).  It contains
-the built-in chains
-.B INPUT
-(for packets coming into the box itself),
-.B FORWARD
-(for packets being routed through the box), and
-.B OUTPUT
-(for locally-generated packets).
-.TP
-.BR "mangle" :
-This table is used for specialized packet alteration.  Until kernel
-2.4.17 it had two built-in chains:
-.B PREROUTING
-(for altering incoming packets before routing) and
-.B OUTPUT
-(for altering locally-generated packets before routing).
-Since kernel 2.4.18, three other built-in chains are also supported:
-.B INPUT
-(for packets coming into the box itself),
-.B FORWARD
-(for altering packets being routed through the box), and
-.B POSTROUTING
-(for altering packets as they are about to go out).
-.TP
-.BR "raw" :
-This table is used mainly for configuring exemptions from connection
-tracking in combination with the NOTRACK target.  It registers at the netfilter
-hooks with higher priority and is thus called before nf_conntrack, or any other
-IP6 tables.  It provides the following built-in chains:
-.B PREROUTING
-(for packets arriving via any network interface)
-.B OUTPUT
-(for packets generated by local processes)
-.RE
-.SH OPTIONS
-The options that are recognized by
-.B ip6tables
-can be divided into several different groups.
-.SS COMMANDS
-These options specify the specific action to perform.  Only one of them
-can be specified on the command line unless otherwise specified
-below.  For all the long versions of the command and option names, you
-need to use only enough letters to ensure that
-.B ip6tables
-can differentiate it from all other options.
-.TP
-.BI "-A, --append " "chain rule-specification"
-Append one or more rules to the end of the selected chain.
-When the source and/or destination names resolve to more than one
-address, a rule will be added for each possible address combination.
-.TP
-.BI "-D, --delete " "chain rule-specification"
-.ns
-.TP
-.BI "-D, --delete " "chain rulenum"
-Delete one or more rules from the selected chain.  There are two
-versions of this command: the rule can be specified as a number in the
-chain (starting at 1 for the first rule) or a rule to match.
-.TP
-.B "-I, --insert"
-Insert one or more rules in the selected chain as the given rule
-number.  So, if the rule number is 1, the rule or rules are inserted
-at the head of the chain.  This is also the default if no rule number
-is specified.
-.TP
-.BI "-R, --replace " "chain rulenum rule-specification"
-Replace a rule in the selected chain.  If the source and/or
-destination names resolve to multiple addresses, the command will
-fail.  Rules are numbered starting at 1.
-.TP
-.BR "-L, --list " "[\fIchain\fP]"
-List all rules in the selected chain.  If no chain is selected, all
-chains are listed.  As every other iptables command, it applies to the
-specified table (filter is the default), so mangle rules get listed by
-.nf
- ip6tables -t mangle -n -L
-.fi
-Please note that it is often used with the
-.B -n
-option, in order to avoid long reverse DNS lookups.
-It is legal to specify the
-.B -Z
-(zero) option as well, in which case the chain(s) will be atomically
-listed and zeroed.  The exact output is affected by the other
-arguments given. The exact rules are suppressed until you use
-.nf
- ip6tables -L -v
-.fi
-.TP
-.BR "-S, --list-rules " "[\fIchain\fP]"
-Print all rules in the selected chain.  If no chain is selected, all
-chains are printed like iptables-save. Like every other iptables command,
-it applies to the specified table (filter is the default).
-.TP
-.BR "-F, --flush " "[\fIchain\fP]"
-Flush the selected chain (all the chains in the table if none is given).
-This is equivalent to deleting all the rules one by one.
-.TP
-.BR "-Z, --zero " "[\fIchain\fP]"
-Zero the packet and byte counters in all chains.  It is legal to
-specify the
-.B "-L, --list"
-(list) option as well, to see the counters immediately before they are
-cleared. (See above.)
-.TP
-.BI "-N, --new-chain " "chain"
-Create a new user-defined chain by the given name.  There must be no
-target of that name already.
-.TP
-.BR "-X, --delete-chain " "[\fIchain\fP]"
-Delete the optional user-defined chain specified.  There must be no references
-to the chain.  If there are, you must delete or replace the referring
-rules before the chain can be deleted.  If no argument is given, it
-will attempt to delete every non-builtin chain in the table.
-.TP
-.BI "-P, --policy " "chain target"
-Set the policy for the chain to the given target.  See the section
-.B TARGETS
-for the legal targets.  Only built-in (non-user-defined) chains can have
-policies, and neither built-in nor user-defined chains can be policy
-targets.
-.TP
-.BI "-E, --rename-chain " "old-chain new-chain"
-Rename the user specified chain to the user supplied name.  This is
-cosmetic, and has no effect on the structure of the table.
-.TP
-.B -h
-Help.
-Give a (currently very brief) description of the command syntax.
-.SS PARAMETERS
-The following parameters make up a rule specification (as used in the
-add, delete, insert, replace and append commands).
-.TP
-.BR "-p, --protocol " "[!] \fIprotocol\fP"
-The protocol of the rule or of the packet to check.
-The specified protocol can be one of
-.IR tcp ,
-.IR udp ,
-.IR icmpv6 ,
-.IR esp ,
-.IR all ,
-or it can be a numeric value, representing one of these protocols or a
-different one. A protocol name from /etc/protocols is also allowed.
-But IPv6 extension headers except
-.IR esp
-are not allowed.
-.IR esp ,
-and
-.IR ipv6-nonext
-can be used with Kernel version 2.6.11 or later.
-A "!" argument before the protocol inverts the
-test.  The number zero is equivalent to
-.IR all .
-Protocol
-.I all
-will match with all protocols and is taken as default when this
-option is omitted.
-.TP
-.BR "-s, --source " "[!] \fIaddress\fP[/\fImask\fP]"
-Source specification.
-.I Address
-can be either a hostname (please note that specifying
-any name to be resolved with a remote query such as DNS is a really bad idea),
-a network IPv6 address (with /mask), or a plain IPv6 address.
-(the network name isn't supported now).
-The
-.I mask
-can be either a network mask or a plain number,
-specifying the number of 1's at the left side of the network mask.
-Thus, a mask of
-.I 64
-is equivalent to
-.IR ffff:ffff:ffff:ffff:0000:0000:0000:0000 .
-A "!" argument before the address specification inverts the sense of
-the address. The flag
-.B --src
-is an alias for this option.
-.TP
-.BR "-d, --destination " "[!] \fIaddress\fP[/\fImask\fP]"
-Destination specification. 
-See the description of the
-.B -s
-(source) flag for a detailed description of the syntax.  The flag
-.B --dst
-is an alias for this option.
-.TP
-.BI "-j, --jump " "target"
-This specifies the target of the rule; i.e., what to do if the packet
-matches it.  The target can be a user-defined chain (other than the
-one this rule is in), one of the special builtin targets which decide
-the fate of the packet immediately, or an extension (see
-.B EXTENSIONS
-below).  If this
-option is omitted in a rule, then matching the rule will have no
-effect on the packet's fate, but the counters on the rule will be
-incremented.
-.TP
-.BR "-i, --in-interface " "[!] \fIname\fP"
-Name of an interface via which a packet is going to be received (only for
-packets entering the 
-.BR INPUT ,
-.B FORWARD
-and
-.B PREROUTING
-chains).  When the "!" argument is used before the interface name, the
-sense is inverted.  If the interface name ends in a "+", then any
-interface which begins with this name will match.  If this option is
-omitted, any interface name will match.
-.TP
-.BR "-o, --out-interface " "[!] \fIname\fP"
-Name of an interface via which a packet is going to be sent (for packets
-entering the
-.BR FORWARD 
-and
-.B OUTPUT
-chains).  When the "!" argument is used before the interface name, the
-sense is inverted.  If the interface name ends in a "+", then any
-interface which begins with this name will match.  If this option is
-omitted, any interface name will match.
-.TP
-.\" Currently not supported (header-based)
-.\" 
-.\" .B "[!] " "-f, --fragment"
-.\" This means that the rule only refers to second and further fragments
-.\" of fragmented packets.  Since there is no way to tell the source or
-.\" destination ports of such a packet (or ICMP type), such a packet will
-.\" not match any rules which specify them.  When the "!" argument
-.\" precedes the "-f" flag, the rule will only match head fragments, or
-.\" unfragmented packets.
-.\" .TP
-.B "-c, --set-counters " "PKTS BYTES"
-This enables the administrator to initialize the packet and byte
-counters of a rule (during
-.B INSERT,
-.B APPEND,
-.B REPLACE
-operations).
-.SS "OTHER OPTIONS"
-The following additional options can be specified:
-.TP
-.B "-v, --verbose"
-Verbose output.  This option makes the list command show the interface
-name, the rule options (if any), and the TOS masks.  The packet and
-byte counters are also listed, with the suffix 'K', 'M' or 'G' for
-1000, 1,000,000 and 1,000,000,000 multipliers respectively (but see
-the
-.B -x
-flag to change this).
-For appending, insertion, deletion and replacement, this causes
-detailed information on the rule or rules to be printed.
-.TP
-.B "-n, --numeric"
-Numeric output.
-IP addresses and port numbers will be printed in numeric format.
-By default, the program will try to display them as host names,
-network names, or services (whenever applicable).
-.TP
-.B "-x, --exact"
-Expand numbers.
-Display the exact value of the packet and byte counters,
-instead of only the rounded number in K's (multiples of 1000)
-M's (multiples of 1000K) or G's (multiples of 1000M).  This option is
-only relevant for the 
-.B -L
-command.
-.TP
-.B "--line-numbers"
-When listing rules, add line numbers to the beginning of each rule,
-corresponding to that rule's position in the chain.
-.TP
-.B "--modprobe=command"
-When adding or inserting rules into a chain, use
-.B command
-to load any necessary modules (targets, match extensions, etc).
-.SH MATCH EXTENSIONS
-ip6tables can use extended packet matching modules.  These are loaded
-in two ways: implicitly, when
-.B -p
-or
-.B --protocol
-is specified, or with the
-.B -m
-or
-.B --match
-options, followed by the matching module name; after these, various
-extra command line options become available, depending on the specific
-module.  You can specify multiple extended match modules in one line,
-and you can use the
-.B -h
-or
-.B --help
-options after the module has been specified to receive help specific
-to that module.
-
-The following are included in the base package, and most of these can
-be preceded by a
-.B !
-to invert the sense of the match.
-.\" @MATCH@
-.SH TARGET EXTENSIONS
-ip6tables can use extended target modules: the following are included
-in the standard distribution.
-.\" @TARGET@
-.SH DIAGNOSTICS
-Various error messages are printed to standard error.  The exit code
-is 0 for correct functioning.  Errors which appear to be caused by
-invalid or abused command line parameters cause an exit code of 2, and
-other errors cause an exit code of 1.
-.SH BUGS
-Bugs?  What's this? ;-)
-Well... the counters are not reliable on sparc64.
-.SH COMPATIBILITY WITH IPCHAINS
-This 
-.B ip6tables
-is very similar to ipchains by Rusty Russell.  The main difference is
-that the chains 
-.B INPUT
-and
-.B OUTPUT
-are only traversed for packets coming into the local host and
-originating from the local host respectively.  Hence every packet only
-passes through one of the three chains (except loopback traffic, which
-involves both INPUT and OUTPUT chains); previously a forwarded packet
-would pass through all three.
-.PP
-The other main difference is that 
-.B -i
-refers to the input interface;
-.B -o
-refers to the output interface, and both are available for packets
-entering the
-.B FORWARD
-chain.
-.\" .PP The various forms of NAT have been separated out; 
-.\" .B iptables 
-.\" is a pure packet filter when using the default `filter' table, with
-.\" optional extension modules.  This should simplify much of the previous
-.\" confusion over the combination of IP masquerading and packet filtering
-.\" seen previously.  So the following options are handled differently:
-.\" .br
-.\" -j MASQ
-.\" .br
-.\" -M -S
-.\" .br
-.\" -M -L
-.\" .br
-There are several other changes in ip6tables.
-.SH SEE ALSO
-.BR ip6tables-save (8),
-.BR ip6tables-restore(8),
-.BR iptables (8),
-.BR iptables-save (8),
-.BR iptables-restore (8),
-.BR libipq (3).
-.P
-The packet-filtering-HOWTO details iptables usage for
-packet filtering, the NAT-HOWTO details NAT,
-the netfilter-extensions-HOWTO details the extensions that are
-not in the standard distribution,
-and the netfilter-hacking-HOWTO details the netfilter internals.
-.br
-See
-.BR "http://www.netfilter.org/" .
-.SH AUTHORS
-Rusty Russell wrote iptables, in early consultation with Michael
-Neuling.
-.PP
-Marc Boucher made Rusty abandon ipnatctl by lobbying for a generic packet
-selection framework in iptables, then wrote the mangle table, the owner match,
-the mark stuff, and ran around doing cool stuff everywhere.
-.PP
-James Morris wrote the TOS target, and tos match.
-.PP
-Jozsef Kadlecsik wrote the REJECT target.
-.PP
-Harald Welte wrote the ULOG and NFQUEUE target, the new libiptc, as well as TTL match+target and libipulog.
-.PP
-The Netfilter Core Team is: Marc Boucher, Martin Josefsson, Yasuyuki Kozakai,
-Jozsef Kadlecsik, Patrick McHardy, James Morris, Pablo Neira Ayuso,
-Harald Welte and Rusty Russell.
-.PP
-ip6tables man page created by Andras Kis-Szabo, based on
-iptables man page written by Herve Eychenne <rv@wallfire.org>.
-.\" .. and did I mention that we are incredibly cool people?
-.\" .. sexy, too ..
-.\" .. witty, charming, powerful ..
-.\" .. and most of all, modest ..
diff --git a/ip6tables.c b/ip6tables.c
deleted file mode 100644 (file)
index e146114..0000000
+++ /dev/null
@@ -1,2097 +0,0 @@
-/* Code to take an ip6tables-style command line and do it. */
-
-/*
- * Author: Paul.Russell@rustcorp.com.au and mneuling@radlogic.com.au
- *
- * (C) 2000-2002 by the netfilter coreteam <coreteam@netfilter.org>:
- *                 Paul 'Rusty' Russell <rusty@rustcorp.com.au>
- *                 Marc Boucher <marc+nf@mbsi.ca>
- *                 James Morris <jmorris@intercode.com.au>
- *                 Harald Welte <laforge@gnumonks.org>
- *                 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
- *
- *     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 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, write to the Free Software
- *     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <getopt.h>
-#include <string.h>
-#include <netdb.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include <limits.h>
-#include <ip6tables.h>
-#include <xtables.h>
-#include <arpa/inet.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include "ip6tables-multi.h"
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-#define FMT_NUMERIC    0x0001
-#define FMT_NOCOUNTS   0x0002
-#define FMT_KILOMEGAGIGA 0x0004
-#define FMT_OPTIONS    0x0008
-#define FMT_NOTABLE    0x0010
-#define FMT_NOTARGET   0x0020
-#define FMT_VIA                0x0040
-#define FMT_NONEWLINE  0x0080
-#define FMT_LINENUMBERS 0x0100
-
-#define FMT_PRINT_RULE (FMT_NOCOUNTS | FMT_OPTIONS | FMT_VIA \
-                       | FMT_NUMERIC | FMT_NOTABLE)
-#define FMT(tab,notab) ((format) & FMT_NOTABLE ? (notab) : (tab))
-
-
-#define CMD_NONE               0x0000U
-#define CMD_INSERT             0x0001U
-#define CMD_DELETE             0x0002U
-#define CMD_DELETE_NUM         0x0004U
-#define CMD_REPLACE            0x0008U
-#define CMD_APPEND             0x0010U
-#define CMD_LIST               0x0020U
-#define CMD_FLUSH              0x0040U
-#define CMD_ZERO               0x0080U
-#define CMD_NEW_CHAIN          0x0100U
-#define CMD_DELETE_CHAIN       0x0200U
-#define CMD_SET_POLICY         0x0400U
-#define CMD_RENAME_CHAIN       0x0800U
-#define CMD_LIST_RULES         0x1000U
-#define NUMBER_OF_CMD  14
-static const char cmdflags[] = { 'I', 'D', 'D', 'R', 'A', 'L', 'F', 'Z',
-                                'N', 'X', 'P', 'E', 'S' };
-
-#define OPTION_OFFSET 256
-
-#define OPT_NONE       0x00000U
-#define OPT_NUMERIC    0x00001U
-#define OPT_SOURCE     0x00002U
-#define OPT_DESTINATION        0x00004U
-#define OPT_PROTOCOL   0x00008U
-#define OPT_JUMP       0x00010U
-#define OPT_VERBOSE    0x00020U
-#define OPT_EXPANDED   0x00040U
-#define OPT_VIANAMEIN  0x00080U
-#define OPT_VIANAMEOUT 0x00100U
-#define OPT_LINENUMBERS 0x00200U
-#define OPT_COUNTERS   0x00400U
-#define NUMBER_OF_OPT  11
-static const char optflags[NUMBER_OF_OPT]
-= { 'n', 's', 'd', 'p', 'j', 'v', 'x', 'i', 'o', '0', 'c'};
-
-static struct option original_opts[] = {
-       {.name = "append",        .has_arg = 1, .val = 'A'},
-       {.name = "delete",        .has_arg = 1, .val = 'D'},
-       {.name = "insert",        .has_arg = 1, .val = 'I'},
-       {.name = "replace",       .has_arg = 1, .val = 'R'},
-       {.name = "list",          .has_arg = 2, .val = 'L'},
-       {.name = "list-rules",    .has_arg = 2, .val = 'S'},
-       {.name = "flush",         .has_arg = 2, .val = 'F'},
-       {.name = "zero",          .has_arg = 2, .val = 'Z'},
-       {.name = "new-chain",     .has_arg = 1, .val = 'N'},
-       {.name = "delete-chain",  .has_arg = 2, .val = 'X'},
-       {.name = "rename-chain",  .has_arg = 1, .val = 'E'},
-       {.name = "policy",        .has_arg = 1, .val = 'P'},
-       {.name = "source",        .has_arg = 1, .val = 's'},
-       {.name = "destination",   .has_arg = 1, .val = 'd'},
-       {.name = "src",           .has_arg = 1, .val = 's'}, /* synonym */
-       {.name = "dst",           .has_arg = 1, .val = 'd'}, /* synonym */
-       {.name = "protocol",      .has_arg = 1, .val = 'p'},
-       {.name = "in-interface",  .has_arg = 1, .val = 'i'},
-       {.name = "jump",          .has_arg = 1, .val = 'j'},
-       {.name = "table",         .has_arg = 1, .val = 't'},
-       {.name = "match",         .has_arg = 1, .val = 'm'},
-       {.name = "numeric",       .has_arg = 0, .val = 'n'},
-       {.name = "out-interface", .has_arg = 1, .val = 'o'},
-       {.name = "verbose",       .has_arg = 0, .val = 'v'},
-       {.name = "exact",         .has_arg = 0, .val = 'x'},
-       {.name = "version",       .has_arg = 0, .val = 'V'},
-       {.name = "help",          .has_arg = 2, .val = 'h'},
-       {.name = "line-numbers",  .has_arg = 0, .val = '0'},
-       {.name = "modprobe",      .has_arg = 1, .val = 'M'},
-       {.name = "set-counters",  .has_arg = 1, .val = 'c'},
-       {NULL},
-};
-
-/* we need this for ip6tables-restore. ip6tables-restore.c sets line to the
- * current line of the input file, in order to give a more precise error
- * message. ip6tables itself doesn't need this, so it is initialized to the
- * magic number of -1 */
-int line = -1;
-
-static struct option *opts = original_opts;
-static unsigned int global_option_offset = 0;
-
-/* Table of legal combinations of commands and options.  If any of the
- * given commands make an option legal, that option is legal (applies to
- * CMD_LIST and CMD_ZERO only).
- * Key:
- *  +  compulsory
- *  x  illegal
- *     optional
- */
-
-static char commands_v_options[NUMBER_OF_CMD][NUMBER_OF_OPT] =
-/* Well, it's better than "Re: Linux vs FreeBSD" */
-{
-       /*     -n  -s  -d  -p  -j  -v  -x  -i  -o --line -c */
-/*INSERT*/    {'x',' ',' ',' ',' ',' ','x',' ',' ','x',' '},
-/*DELETE*/    {'x',' ',' ',' ',' ',' ','x',' ',' ','x','x'},
-/*DELETE_NUM*/{'x','x','x','x','x',' ','x','x','x','x','x'},
-/*REPLACE*/   {'x',' ',' ',' ',' ',' ','x',' ',' ','x',' '},
-/*APPEND*/    {'x',' ',' ',' ',' ',' ','x',' ',' ','x',' '},
-/*LIST*/      {' ','x','x','x','x',' ',' ','x','x',' ','x'},
-/*FLUSH*/     {'x','x','x','x','x',' ','x','x','x','x','x'},
-/*ZERO*/      {'x','x','x','x','x',' ','x','x','x','x','x'},
-/*NEW_CHAIN*/ {'x','x','x','x','x',' ','x','x','x','x','x'},
-/*DEL_CHAIN*/ {'x','x','x','x','x',' ','x','x','x','x','x'},
-/*SET_POLICY*/{'x','x','x','x','x',' ','x','x','x','x',' '},
-/*RENAME*/    {'x','x','x','x','x',' ','x','x','x','x','x'},
-/*LIST_RULES*/{'x','x','x','x','x',' ','x','x','x','x','x'}
-};
-
-static int inverse_for_options[NUMBER_OF_OPT] =
-{
-/* -n */ 0,
-/* -s */ IP6T_INV_SRCIP,
-/* -d */ IP6T_INV_DSTIP,
-/* -p */ IP6T_INV_PROTO,
-/* -j */ 0,
-/* -v */ 0,
-/* -x */ 0,
-/* -i */ IP6T_INV_VIA_IN,
-/* -o */ IP6T_INV_VIA_OUT,
-/*--line*/ 0,
-/* -c */ 0,
-};
-
-const char *program_version;
-const char *program_name;
-
-/* A few hardcoded protocols for 'all' and in case the user has no
-   /etc/protocols */
-struct pprot {
-       char *name;
-       u_int8_t num;
-};
-
-struct afinfo afinfo = {
-       .family         = AF_INET6,
-       .libprefix      = "libip6t_",
-       .ipproto        = IPPROTO_IPV6,
-       .kmod           = "ip6_tables",
-       .so_rev_match   = IP6T_SO_GET_REVISION_MATCH,
-       .so_rev_target  = IP6T_SO_GET_REVISION_TARGET,
-};
-
-/* Primitive headers... */
-/* defined in netinet/in.h */
-#if 0
-#ifndef IPPROTO_ESP
-#define IPPROTO_ESP 50
-#endif
-#ifndef IPPROTO_AH
-#define IPPROTO_AH 51
-#endif
-#endif
-#ifndef IPPROTO_MH
-#define IPPROTO_MH 135
-#endif
-
-static const struct pprot chain_protos[] = {
-       { "tcp", IPPROTO_TCP },
-       { "udp", IPPROTO_UDP },
-       { "udplite", IPPROTO_UDPLITE },
-       { "icmpv6", IPPROTO_ICMPV6 },
-       { "ipv6-icmp", IPPROTO_ICMPV6 },
-       { "esp", IPPROTO_ESP },
-       { "ah", IPPROTO_AH },
-       { "ipv6-mh", IPPROTO_MH },
-       { "mh", IPPROTO_MH },
-       { "all", 0 },
-};
-
-static char *
-proto_to_name(u_int8_t proto, int nolookup)
-{
-       unsigned int i;
-
-       if (proto && !nolookup) {
-               struct protoent *pent = getprotobynumber(proto);
-               if (pent)
-                       return pent->p_name;
-       }
-
-       for (i = 0; i < sizeof(chain_protos)/sizeof(struct pprot); i++)
-               if (chain_protos[i].num == proto)
-                       return chain_protos[i].name;
-
-       return NULL;
-}
-
-static void free_opts(int reset_offset)
-{
-       if (opts != original_opts) {
-               free(opts);
-               opts = original_opts;
-               if (reset_offset)
-                       global_option_offset = 0;
-       }
-}
-
-static void
-exit_tryhelp(int status)
-{
-       if (line != -1)
-               fprintf(stderr, "Error occurred at line: %d\n", line);
-       fprintf(stderr, "Try `%s -h' or '%s --help' for more information.\n",
-                       program_name, program_name );
-       free_opts(1);
-       exit(status);
-}
-
-static void
-exit_printhelp(struct ip6tables_rule_match *matches)
-{
-       struct ip6tables_rule_match *matchp = NULL;
-       struct xtables_target *t = NULL;
-
-       printf("%s v%s\n\n"
-"Usage: %s -[AD] chain rule-specification [options]\n"
-"       %s -[RI] chain rulenum rule-specification [options]\n"
-"       %s -D chain rulenum [options]\n"
-"       %s -[LS] [chain [rulenum]] [options]\n"
-"       %s -[FZ] [chain] [options]\n"
-"       %s -[NX] chain\n"
-"       %s -E old-chain-name new-chain-name\n"
-"       %s -P chain target [options]\n"
-"       %s -h (print this help information)\n\n",
-              program_name, program_version, program_name, program_name,
-              program_name, program_name, program_name, program_name,
-              program_name, program_name, program_name);
-
-       printf(
-"Commands:\n"
-"Either long or short options are allowed.\n"
-"  --append  -A chain          Append to chain\n"
-"  --delete  -D chain          Delete matching rule from chain\n"
-"  --delete  -D chain rulenum\n"
-"                              Delete rule rulenum (1 = first) from chain\n"
-"  --insert  -I chain [rulenum]\n"
-"                              Insert in chain as rulenum (default 1=first)\n"
-"  --replace -R chain rulenum\n"
-"                              Replace rule rulenum (1 = first) in chain\n"
-"  --list    -L [chain [rulenum]]\n"
-"                              List the rules in a chain or all chains\n"
-"  --list-rules -S [chain [rulenum]]\n"
-"                              Print the rules in a chain or all chains\n"
-"  --flush   -F [chain]                Delete all rules in  chain or all chains\n"
-"  --zero    -Z [chain]                Zero counters in chain or all chains\n"
-"  --new     -N chain          Create a new user-defined chain\n"
-"  --delete-chain\n"
-"            -X [chain]                Delete a user-defined chain\n"
-"  --policy  -P chain target\n"
-"                              Change policy on chain to target\n"
-"  --rename-chain\n"
-"            -E old-chain new-chain\n"
-"                              Change chain name, (moving any references)\n"
-
-"Options:\n"
-"  --proto     -p [!] proto    protocol: by number or name, eg. `tcp'\n"
-"  --source    -s [!] address[/mask]\n"
-"                              source specification\n"
-"  --destination -d [!] address[/mask]\n"
-"                              destination specification\n"
-"  --in-interface -i [!] input name[+]\n"
-"                              network interface name ([+] for wildcard)\n"
-"  --jump      -j target\n"
-"                              target for rule (may load target extension)\n"
-"  --match     -m match\n"
-"                              extended match (may load extension)\n"
-"  --numeric   -n              numeric output of addresses and ports\n"
-"  --out-interface -o [!] output name[+]\n"
-"                              network interface name ([+] for wildcard)\n"
-"  --table     -t table        table to manipulate (default: `filter')\n"
-"  --verbose   -v              verbose mode\n"
-"  --line-numbers              print line numbers when listing\n"
-"  --exact     -x              expand numbers (display exact values)\n"
-/*"[!] --fragment      -f              match second or further fragments only\n"*/
-"  --modprobe=<command>                try to insert modules using this command\n"
-"  --set-counters PKTS BYTES   set the counter during insert/append\n"
-"[!] --version -V              print package version.\n");
-
-       /* Print out any special helps. A user might like to be able to add a --help
-          to the commandline, and see expected results. So we call help for all
-          specified matches & targets */
-       for (t = xtables_targets; t; t = t->next) {
-               if (t->used) {
-                       printf("\n");
-                       t->help();
-               }
-       }
-       for (matchp = matches; matchp; matchp = matchp->next) {
-               printf("\n");
-               matchp->match->help();
-       }
-       exit(0);
-}
-
-void
-exit_error(enum exittype status, const char *msg, ...)
-{
-       va_list args;
-
-       va_start(args, msg);
-       fprintf(stderr, "%s v%s: ", program_name, program_version);
-       vfprintf(stderr, msg, args);
-       va_end(args);
-       fprintf(stderr, "\n");
-       if (status == PARAMETER_PROBLEM)
-               exit_tryhelp(status);
-       if (status == VERSION_PROBLEM)
-               fprintf(stderr,
-                       "Perhaps ip6tables or your kernel needs to be upgraded.\n");
-       /* On error paths, make sure that we don't leak memory */
-       free_opts(1);
-       exit(status);
-}
-
-static void
-generic_opt_check(int command, int options)
-{
-       int i, j, legal = 0;
-
-       /* Check that commands are valid with options.  Complicated by the
-        * fact that if an option is legal with *any* command given, it is
-        * legal overall (ie. -z and -l).
-        */
-       for (i = 0; i < NUMBER_OF_OPT; i++) {
-               legal = 0; /* -1 => illegal, 1 => legal, 0 => undecided. */
-
-               for (j = 0; j < NUMBER_OF_CMD; j++) {
-                       if (!(command & (1<<j)))
-                               continue;
-
-                       if (!(options & (1<<i))) {
-                               if (commands_v_options[j][i] == '+')
-                                       exit_error(PARAMETER_PROBLEM,
-                                                  "You need to supply the `-%c' "
-                                                  "option for this command\n",
-                                                  optflags[i]);
-                       } else {
-                               if (commands_v_options[j][i] != 'x')
-                                       legal = 1;
-                               else if (legal == 0)
-                                       legal = -1;
-                       }
-               }
-               if (legal == -1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Illegal option `-%c' with this command\n",
-                                  optflags[i]);
-       }
-}
-
-static char
-opt2char(int option)
-{
-       const char *ptr;
-       for (ptr = optflags; option > 1; option >>= 1, ptr++);
-
-       return *ptr;
-}
-
-static char
-cmd2char(int option)
-{
-       const char *ptr;
-       for (ptr = cmdflags; option > 1; option >>= 1, ptr++);
-
-       return *ptr;
-}
-
-static void
-add_command(unsigned int *cmd, const int newcmd, const int othercmds,
-           int invert)
-{
-       if (invert)
-               exit_error(PARAMETER_PROBLEM, "unexpected ! flag");
-       if (*cmd & (~othercmds))
-               exit_error(PARAMETER_PROBLEM, "Can't use -%c with -%c\n",
-                          cmd2char(newcmd), cmd2char(*cmd & (~othercmds)));
-       *cmd |= newcmd;
-}
-
-int
-check_inverse(const char option[], int *invert, int *my_optind, int argc)
-{
-       if (option && strcmp(option, "!") == 0) {
-               if (*invert)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Multiple `!' flags not allowed");
-               *invert = TRUE;
-               if (my_optind != NULL) {
-                       ++*my_optind;
-                       if (argc && *my_optind > argc)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "no argument following `!'");
-               }
-
-               return TRUE;
-       }
-       return FALSE;
-}
-
-/*
- *     All functions starting with "parse" should succeed, otherwise
- *     the program fails.
- *     Most routines return pointers to static data that may change
- *     between calls to the same or other routines with a few exceptions:
- *     "host_to_addr", "parse_hostnetwork", and "parse_hostnetworkmask"
- *     return global static data.
-*/
-
-/* Christophe Burki wants `-p 6' to imply `-m tcp'.  */
-static struct xtables_match *
-find_proto(const char *pname, enum ip6t_tryload tryload, int nolookup, struct ip6tables_rule_match **matches)
-{
-       unsigned int proto;
-
-       if (string_to_number(pname, 0, 255, &proto) != -1) {
-               char *protoname = proto_to_name(proto, nolookup);
-
-               if (protoname)
-                       return find_match(protoname, tryload, matches);
-       } else
-               return find_match(pname, tryload, matches);
-
-       return NULL;
-}
-
-u_int16_t
-parse_protocol(const char *s)
-{
-       unsigned int proto;
-
-       if (string_to_number(s, 0, 255, &proto) == -1) {
-               struct protoent *pent;
-
-               /* first deal with the special case of 'all' to prevent
-                * people from being able to redefine 'all' in nsswitch
-                * and/or provoke expensive [not working] ldap/nis/...
-                * lookups */
-               if (!strcmp(s, "all"))
-                       return 0;
-
-               if ((pent = getprotobyname(s)))
-                       proto = pent->p_proto;
-               else {
-                       unsigned int i;
-                       for (i = 0;
-                            i < sizeof(chain_protos)/sizeof(struct pprot);
-                            i++) {
-                               if (strcmp(s, chain_protos[i].name) == 0) {
-                                       proto = chain_protos[i].num;
-                                       break;
-                               }
-                       }
-                       if (i == sizeof(chain_protos)/sizeof(struct pprot))
-                               exit_error(PARAMETER_PROBLEM,
-                                          "unknown protocol `%s' specified",
-                                          s);
-               }
-       }
-
-       return (u_int16_t)proto;
-}
-
-/* These are invalid numbers as upper layer protocol */
-static int is_exthdr(u_int16_t proto)
-{
-       return (proto == IPPROTO_ROUTING ||
-               proto == IPPROTO_FRAGMENT ||
-               proto == IPPROTO_AH ||
-               proto == IPPROTO_DSTOPTS);
-}
-
-/* Can't be zero. */
-static int
-parse_rulenumber(const char *rule)
-{
-       unsigned int rulenum;
-
-       if (string_to_number(rule, 1, INT_MAX, &rulenum) == -1)
-               exit_error(PARAMETER_PROBLEM,
-                          "Invalid rule number `%s'", rule);
-
-       return rulenum;
-}
-
-static const char *
-parse_target(const char *targetname)
-{
-       const char *ptr;
-
-       if (strlen(targetname) < 1)
-               exit_error(PARAMETER_PROBLEM,
-                          "Invalid target name (too short)");
-
-       if (strlen(targetname)+1 > sizeof(ip6t_chainlabel))
-               exit_error(PARAMETER_PROBLEM,
-                          "Invalid target name `%s' (%u chars max)",
-                          targetname, (unsigned int)sizeof(ip6t_chainlabel)-1);
-
-       for (ptr = targetname; *ptr; ptr++)
-               if (isspace(*ptr))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Invalid target name `%s'", targetname);
-       return targetname;
-}
-
-static void
-set_option(unsigned int *options, unsigned int option, u_int8_t *invflg,
-          int invert)
-{
-       if (*options & option)
-               exit_error(PARAMETER_PROBLEM, "multiple -%c flags not allowed",
-                          opt2char(option));
-       *options |= option;
-
-       if (invert) {
-               unsigned int i;
-               for (i = 0; 1 << i != option; i++);
-
-               if (!inverse_for_options[i])
-                       exit_error(PARAMETER_PROBLEM,
-                                  "cannot have ! before -%c",
-                                  opt2char(option));
-               *invflg |= inverse_for_options[i];
-       }
-}
-
-static struct option *
-merge_options(struct option *oldopts, const struct option *newopts,
-             unsigned int *option_offset)
-{
-       unsigned int num_old, num_new, i;
-       struct option *merge;
-
-       if (newopts == NULL)
-               return oldopts;
-
-       for (num_old = 0; oldopts[num_old].name; num_old++);
-       for (num_new = 0; newopts[num_new].name; num_new++);
-
-       global_option_offset += OPTION_OFFSET;
-       *option_offset = global_option_offset;
-
-       merge = malloc(sizeof(struct option) * (num_new + num_old + 1));
-       memcpy(merge, oldopts, num_old * sizeof(struct option));
-       free_opts(0); /* Release previous options merged if any */
-       for (i = 0; i < num_new; i++) {
-               merge[num_old + i] = newopts[i];
-               merge[num_old + i].val += *option_offset;
-       }
-       memset(merge + num_old + num_new, 0, sizeof(struct option));
-
-       return merge;
-}
-
-static void
-print_num(u_int64_t number, unsigned int format)
-{
-       if (format & FMT_KILOMEGAGIGA) {
-               if (number > 99999) {
-                       number = (number + 500) / 1000;
-                       if (number > 9999) {
-                               number = (number + 500) / 1000;
-                               if (number > 9999) {
-                                       number = (number + 500) / 1000;
-                                       if (number > 9999) {
-                                               number = (number + 500) / 1000;
-                                               printf(FMT("%4lluT ","%lluT "), (unsigned long long)number);
-                                       }
-                                       else printf(FMT("%4lluG ","%lluG "), (unsigned long long)number);
-                               }
-                               else printf(FMT("%4lluM ","%lluM "), (unsigned long long)number);
-                       } else
-                               printf(FMT("%4lluK ","%lluK "), (unsigned long long)number);
-               } else
-                       printf(FMT("%5llu ","%llu "), (unsigned long long)number);
-       } else
-               printf(FMT("%8llu ","%llu "), (unsigned long long)number);
-}
-
-
-static void
-print_header(unsigned int format, const char *chain, ip6tc_handle_t *handle)
-{
-       struct ip6t_counters counters;
-       const char *pol = ip6tc_get_policy(chain, &counters, handle);
-       printf("Chain %s", chain);
-       if (pol) {
-               printf(" (policy %s", pol);
-               if (!(format & FMT_NOCOUNTS)) {
-                       fputc(' ', stdout);
-                       print_num(counters.pcnt, (format|FMT_NOTABLE));
-                       fputs("packets, ", stdout);
-                       print_num(counters.bcnt, (format|FMT_NOTABLE));
-                       fputs("bytes", stdout);
-               }
-               printf(")\n");
-       } else {
-               unsigned int refs;
-               if (!ip6tc_get_references(&refs, chain, handle))
-                       printf(" (ERROR obtaining refs)\n");
-               else
-                       printf(" (%u references)\n", refs);
-       }
-
-       if (format & FMT_LINENUMBERS)
-               printf(FMT("%-4s ", "%s "), "num");
-       if (!(format & FMT_NOCOUNTS)) {
-               if (format & FMT_KILOMEGAGIGA) {
-                       printf(FMT("%5s ","%s "), "pkts");
-                       printf(FMT("%5s ","%s "), "bytes");
-               } else {
-                       printf(FMT("%8s ","%s "), "pkts");
-                       printf(FMT("%10s ","%s "), "bytes");
-               }
-       }
-       if (!(format & FMT_NOTARGET))
-               printf(FMT("%-9s ","%s "), "target");
-       fputs(" prot ", stdout);
-       if (format & FMT_OPTIONS)
-               fputs("opt", stdout);
-       if (format & FMT_VIA) {
-               printf(FMT(" %-6s ","%s "), "in");
-               printf(FMT("%-6s ","%s "), "out");
-       }
-       printf(FMT(" %-19s ","%s "), "source");
-       printf(FMT(" %-19s "," %s "), "destination");
-       printf("\n");
-}
-
-
-static int
-print_match(const struct ip6t_entry_match *m,
-           const struct ip6t_ip6 *ip,
-           int numeric)
-{
-       struct xtables_match *match = find_match(m->u.user.name, TRY_LOAD, NULL);
-
-       if (match) {
-               if (match->print)
-                       match->print(ip, m, numeric);
-               else
-                       printf("%s ", match->name);
-       } else {
-               if (m->u.user.name[0])
-                       printf("UNKNOWN match `%s' ", m->u.user.name);
-       }
-       /* Don't stop iterating. */
-       return 0;
-}
-
-/* e is called `fw' here for historical reasons */
-static void
-print_firewall(const struct ip6t_entry *fw,
-              const char *targname,
-              unsigned int num,
-              unsigned int format,
-              const ip6tc_handle_t handle)
-{
-       struct xtables_target *target = NULL;
-       const struct ip6t_entry_target *t;
-       u_int8_t flags;
-       char buf[BUFSIZ];
-
-       if (!ip6tc_is_chain(targname, handle))
-               target = find_target(targname, TRY_LOAD);
-       else
-               target = find_target(IP6T_STANDARD_TARGET, LOAD_MUST_SUCCEED);
-
-       t = ip6t_get_target((struct ip6t_entry *)fw);
-       flags = fw->ipv6.flags;
-
-       if (format & FMT_LINENUMBERS)
-               printf(FMT("%-4u ", "%u "), num);
-
-       if (!(format & FMT_NOCOUNTS)) {
-               print_num(fw->counters.pcnt, format);
-               print_num(fw->counters.bcnt, format);
-       }
-
-       if (!(format & FMT_NOTARGET))
-               printf(FMT("%-9s ", "%s "), targname);
-
-       fputc(fw->ipv6.invflags & IP6T_INV_PROTO ? '!' : ' ', stdout);
-       {
-               char *pname = proto_to_name(fw->ipv6.proto, format&FMT_NUMERIC);
-               if (pname)
-                       printf(FMT("%-5s", "%s "), pname);
-               else
-                       printf(FMT("%-5hu", "%hu "), fw->ipv6.proto);
-       }
-
-       if (format & FMT_OPTIONS) {
-               if (format & FMT_NOTABLE)
-                       fputs("opt ", stdout);
-               fputc(' ', stdout); /* Invert flag of FRAG */
-               fputc(' ', stdout); /* -f */
-               fputc(' ', stdout);
-       }
-
-       if (format & FMT_VIA) {
-               char iface[IFNAMSIZ+2];
-
-               if (fw->ipv6.invflags & IP6T_INV_VIA_IN) {
-                       iface[0] = '!';
-                       iface[1] = '\0';
-               }
-               else iface[0] = '\0';
-
-               if (fw->ipv6.iniface[0] != '\0') {
-                       strcat(iface, fw->ipv6.iniface);
-               }
-               else if (format & FMT_NUMERIC) strcat(iface, "*");
-               else strcat(iface, "any");
-               printf(FMT(" %-6s ","in %s "), iface);
-
-               if (fw->ipv6.invflags & IP6T_INV_VIA_OUT) {
-                       iface[0] = '!';
-                       iface[1] = '\0';
-               }
-               else iface[0] = '\0';
-
-               if (fw->ipv6.outiface[0] != '\0') {
-                       strcat(iface, fw->ipv6.outiface);
-               }
-               else if (format & FMT_NUMERIC) strcat(iface, "*");
-               else strcat(iface, "any");
-               printf(FMT("%-6s ","out %s "), iface);
-       }
-
-       fputc(fw->ipv6.invflags & IP6T_INV_SRCIP ? '!' : ' ', stdout);
-       if (!memcmp(&fw->ipv6.smsk, &in6addr_any, sizeof in6addr_any)
-           && !(format & FMT_NUMERIC))
-               printf(FMT("%-19s ","%s "), "anywhere");
-       else {
-               if (format & FMT_NUMERIC)
-                       sprintf(buf, "%s", ip6addr_to_numeric(&fw->ipv6.src));
-               else
-                       sprintf(buf, "%s", ip6addr_to_anyname(&fw->ipv6.src));
-               strcat(buf, ip6mask_to_numeric(&fw->ipv6.smsk));
-               printf(FMT("%-19s ","%s "), buf);
-       }
-
-       fputc(fw->ipv6.invflags & IP6T_INV_DSTIP ? '!' : ' ', stdout);
-       if (!memcmp(&fw->ipv6.dmsk, &in6addr_any, sizeof in6addr_any)
-           && !(format & FMT_NUMERIC))
-               printf(FMT("%-19s ","-> %s"), "anywhere");
-       else {
-               if (format & FMT_NUMERIC)
-                       sprintf(buf, "%s", ip6addr_to_numeric(&fw->ipv6.dst));
-               else
-                       sprintf(buf, "%s", ip6addr_to_anyname(&fw->ipv6.dst));
-               strcat(buf, ip6mask_to_numeric(&fw->ipv6.dmsk));
-               printf(FMT("%-19s ","-> %s"), buf);
-       }
-
-       if (format & FMT_NOTABLE)
-               fputs("  ", stdout);
-
-       IP6T_MATCH_ITERATE(fw, print_match, &fw->ipv6, format & FMT_NUMERIC);
-
-       if (target) {
-               if (target->print)
-                       /* Print the target information. */
-                       target->print(&fw->ipv6, t, format & FMT_NUMERIC);
-       } else if (t->u.target_size != sizeof(*t))
-               printf("[%u bytes of unknown target data] ",
-                      (unsigned int)(t->u.target_size - sizeof(*t)));
-
-       if (!(format & FMT_NONEWLINE))
-               fputc('\n', stdout);
-}
-
-static void
-print_firewall_line(const struct ip6t_entry *fw,
-                   const ip6tc_handle_t h)
-{
-       struct ip6t_entry_target *t;
-
-       t = ip6t_get_target((struct ip6t_entry *)fw);
-       print_firewall(fw, t->u.user.name, 0, FMT_PRINT_RULE, h);
-}
-
-static int
-append_entry(const ip6t_chainlabel chain,
-            struct ip6t_entry *fw,
-            unsigned int nsaddrs,
-            const struct in6_addr saddrs[],
-            unsigned int ndaddrs,
-            const struct in6_addr daddrs[],
-            int verbose,
-            ip6tc_handle_t *handle)
-{
-       unsigned int i, j;
-       int ret = 1;
-
-       for (i = 0; i < nsaddrs; i++) {
-               fw->ipv6.src = saddrs[i];
-               for (j = 0; j < ndaddrs; j++) {
-                       fw->ipv6.dst = daddrs[j];
-                       if (verbose)
-                               print_firewall_line(fw, *handle);
-                       ret &= ip6tc_append_entry(chain, fw, handle);
-               }
-       }
-
-       return ret;
-}
-
-static int
-replace_entry(const ip6t_chainlabel chain,
-             struct ip6t_entry *fw,
-             unsigned int rulenum,
-             const struct in6_addr *saddr,
-             const struct in6_addr *daddr,
-             int verbose,
-             ip6tc_handle_t *handle)
-{
-       fw->ipv6.src = *saddr;
-       fw->ipv6.dst = *daddr;
-
-       if (verbose)
-               print_firewall_line(fw, *handle);
-       return ip6tc_replace_entry(chain, fw, rulenum, handle);
-}
-
-static int
-insert_entry(const ip6t_chainlabel chain,
-            struct ip6t_entry *fw,
-            unsigned int rulenum,
-            unsigned int nsaddrs,
-            const struct in6_addr saddrs[],
-            unsigned int ndaddrs,
-            const struct in6_addr daddrs[],
-            int verbose,
-            ip6tc_handle_t *handle)
-{
-       unsigned int i, j;
-       int ret = 1;
-
-       for (i = 0; i < nsaddrs; i++) {
-               fw->ipv6.src = saddrs[i];
-               for (j = 0; j < ndaddrs; j++) {
-                       fw->ipv6.dst = daddrs[j];
-                       if (verbose)
-                               print_firewall_line(fw, *handle);
-                       ret &= ip6tc_insert_entry(chain, fw, rulenum, handle);
-               }
-       }
-
-       return ret;
-}
-
-static unsigned char *
-make_delete_mask(struct ip6t_entry *fw, struct ip6tables_rule_match *matches)
-{
-       /* Establish mask for comparison */
-       unsigned int size;
-       struct ip6tables_rule_match *matchp;
-       unsigned char *mask, *mptr;
-
-       size = sizeof(struct ip6t_entry);
-       for (matchp = matches; matchp; matchp = matchp->next)
-               size += IP6T_ALIGN(sizeof(struct ip6t_entry_match)) + matchp->match->size;
-
-       mask = fw_calloc(1, size
-                        + IP6T_ALIGN(sizeof(struct ip6t_entry_target))
-                        + xtables_targets->size);
-
-       memset(mask, 0xFF, sizeof(struct ip6t_entry));
-       mptr = mask + sizeof(struct ip6t_entry);
-
-       for (matchp = matches; matchp; matchp = matchp->next) {
-               memset(mptr, 0xFF,
-                      IP6T_ALIGN(sizeof(struct ip6t_entry_match))
-                      + matchp->match->userspacesize);
-               mptr += IP6T_ALIGN(sizeof(struct ip6t_entry_match)) + matchp->match->size;
-       }
-
-       memset(mptr, 0xFF,
-              IP6T_ALIGN(sizeof(struct ip6t_entry_target))
-              + xtables_targets->userspacesize);
-
-       return mask;
-}
-
-static int
-delete_entry(const ip6t_chainlabel chain,
-            struct ip6t_entry *fw,
-            unsigned int nsaddrs,
-            const struct in6_addr saddrs[],
-            unsigned int ndaddrs,
-            const struct in6_addr daddrs[],
-            int verbose,
-            ip6tc_handle_t *handle,
-            struct ip6tables_rule_match *matches)
-{
-       unsigned int i, j;
-       int ret = 1;
-       unsigned char *mask;
-
-       mask = make_delete_mask(fw, matches);
-       for (i = 0; i < nsaddrs; i++) {
-               fw->ipv6.src = saddrs[i];
-               for (j = 0; j < ndaddrs; j++) {
-                       fw->ipv6.dst = daddrs[j];
-                       if (verbose)
-                               print_firewall_line(fw, *handle);
-                       ret &= ip6tc_delete_entry(chain, fw, mask, handle);
-               }
-       }
-       free(mask);
-
-       return ret;
-}
-
-int
-for_each_chain(int (*fn)(const ip6t_chainlabel, int, ip6tc_handle_t *),
-              int verbose, int builtinstoo, ip6tc_handle_t *handle)
-{
-       int ret = 1;
-       const char *chain;
-       char *chains;
-       unsigned int i, chaincount = 0;
-
-       chain = ip6tc_first_chain(handle);
-       while (chain) {
-               chaincount++;
-               chain = ip6tc_next_chain(handle);
-       }
-
-       chains = fw_malloc(sizeof(ip6t_chainlabel) * chaincount);
-       i = 0;
-       chain = ip6tc_first_chain(handle);
-       while (chain) {
-               strcpy(chains + i*sizeof(ip6t_chainlabel), chain);
-               i++;
-               chain = ip6tc_next_chain(handle);
-       }
-
-       for (i = 0; i < chaincount; i++) {
-               if (!builtinstoo
-                   && ip6tc_builtin(chains + i*sizeof(ip6t_chainlabel),
-                                   *handle) == 1)
-                       continue;
-               ret &= fn(chains + i*sizeof(ip6t_chainlabel), verbose, handle);
-       }
-
-       free(chains);
-       return ret;
-}
-
-int
-flush_entries(const ip6t_chainlabel chain, int verbose,
-             ip6tc_handle_t *handle)
-{
-       if (!chain)
-               return for_each_chain(flush_entries, verbose, 1, handle);
-
-       if (verbose)
-               fprintf(stdout, "Flushing chain `%s'\n", chain);
-       return ip6tc_flush_entries(chain, handle);
-}
-
-static int
-zero_entries(const ip6t_chainlabel chain, int verbose,
-            ip6tc_handle_t *handle)
-{
-       if (!chain)
-               return for_each_chain(zero_entries, verbose, 1, handle);
-
-       if (verbose)
-               fprintf(stdout, "Zeroing chain `%s'\n", chain);
-       return ip6tc_zero_entries(chain, handle);
-}
-
-int
-delete_chain(const ip6t_chainlabel chain, int verbose,
-            ip6tc_handle_t *handle)
-{
-       if (!chain)
-               return for_each_chain(delete_chain, verbose, 0, handle);
-
-       if (verbose)
-               fprintf(stdout, "Deleting chain `%s'\n", chain);
-       return ip6tc_delete_chain(chain, handle);
-}
-
-static int
-list_entries(const ip6t_chainlabel chain, int rulenum, int verbose, int numeric,
-            int expanded, int linenumbers, ip6tc_handle_t *handle)
-{
-       int found = 0;
-       unsigned int format;
-       const char *this;
-
-       format = FMT_OPTIONS;
-       if (!verbose)
-               format |= FMT_NOCOUNTS;
-       else
-               format |= FMT_VIA;
-
-       if (numeric)
-               format |= FMT_NUMERIC;
-
-       if (!expanded)
-               format |= FMT_KILOMEGAGIGA;
-
-       if (linenumbers)
-               format |= FMT_LINENUMBERS;
-
-       for (this = ip6tc_first_chain(handle);
-            this;
-            this = ip6tc_next_chain(handle)) {
-               const struct ip6t_entry *i;
-               unsigned int num;
-
-               if (chain && strcmp(chain, this) != 0)
-                       continue;
-
-               if (found) printf("\n");
-
-               if (!rulenum)
-                   print_header(format, this, handle);
-               i = ip6tc_first_rule(this, handle);
-
-               num = 0;
-               while (i) {
-                       num++;
-                       if (!rulenum || num == rulenum)
-                               print_firewall(i,
-                                              ip6tc_get_target(i, handle),
-                                              num,
-                                              format,
-                                              *handle);
-                       i = ip6tc_next_rule(i, handle);
-               }
-               found = 1;
-       }
-
-       errno = ENOENT;
-       return found;
-}
-
-/* This assumes that mask is contiguous, and byte-bounded. */
-static void
-print_iface(char letter, const char *iface, const unsigned char *mask,
-           int invert)
-{
-       unsigned int i;
-
-       if (mask[0] == 0)
-               return;
-
-       printf("-%c %s", letter, invert ? "! " : "");
-
-       for (i = 0; i < IFNAMSIZ; i++) {
-               if (mask[i] != 0) {
-                       if (iface[i] != '\0')
-                               printf("%c", iface[i]);
-               } else {
-                       /* we can access iface[i-1] here, because
-                        * a few lines above we make sure that mask[0] != 0 */
-                       if (iface[i-1] != '\0')
-                               printf("+");
-                       break;
-               }
-       }
-
-       printf(" ");
-}
-
-/* The ip6tables looks up the /etc/protocols. */
-static void print_proto(u_int16_t proto, int invert)
-{
-       if (proto) {
-               unsigned int i;
-               const char *invertstr = invert ? "! " : "";
-
-               struct protoent *pent = getprotobynumber(proto);
-               if (pent) {
-                       printf("-p %s%s ",
-                              invertstr, pent->p_name);
-                       return;
-               }
-
-               for (i = 0; i < sizeof(chain_protos)/sizeof(struct pprot); i++)
-                       if (chain_protos[i].num == proto) {
-                               printf("-p %s%s ",
-                                      invertstr, chain_protos[i].name);
-                               return;
-                       }
-
-               printf("-p %s%u ", invertstr, proto);
-       }
-}
-
-static int print_match_save(const struct ip6t_entry_match *e,
-                       const struct ip6t_ip6 *ip)
-{
-       struct xtables_match *match
-               = find_match(e->u.user.name, TRY_LOAD, NULL);
-
-       if (match) {
-               printf("-m %s ", e->u.user.name);
-
-               /* some matches don't provide a save function */
-               if (match->save)
-                       match->save(ip, e);
-       } else {
-               if (e->u.match_size) {
-                       fprintf(stderr,
-                               "Can't find library for match `%s'\n",
-                               e->u.user.name);
-                       exit(1);
-               }
-       }
-       return 0;
-}
-
-/* print a given ip including mask if neccessary */
-static void print_ip(char *prefix, const struct in6_addr *ip, const struct in6_addr *mask, int invert)
-{
-       char buf[51];
-       int l = ipv6_prefix_length(mask);
-
-       if (l == 0 && !invert)
-               return;
-
-       printf("%s %s%s",
-               prefix,
-               invert ? "! " : "",
-               inet_ntop(AF_INET6, ip, buf, sizeof buf));
-
-       if (l == -1)
-               printf("/%s ", inet_ntop(AF_INET6, mask, buf, sizeof buf));
-       else
-               printf("/%d ", l);
-}
-
-/* We want this to be readable, so only print out neccessary fields.
- * Because that's the kind of world I want to live in.  */
-void print_rule(const struct ip6t_entry *e,
-                      ip6tc_handle_t *h, const char *chain, int counters)
-{
-       struct ip6t_entry_target *t;
-       const char *target_name;
-
-       /* print counters for iptables-save */
-       if (counters > 0)
-               printf("[%llu:%llu] ", (unsigned long long)e->counters.pcnt, (unsigned long long)e->counters.bcnt);
-
-       /* print chain name */
-       printf("-A %s ", chain);
-
-       /* Print IP part. */
-       print_ip("-s", &(e->ipv6.src), &(e->ipv6.smsk),
-                       e->ipv6.invflags & IP6T_INV_SRCIP);
-
-       print_ip("-d", &(e->ipv6.dst), &(e->ipv6.dmsk),
-                       e->ipv6.invflags & IP6T_INV_DSTIP);
-
-       print_iface('i', e->ipv6.iniface, e->ipv6.iniface_mask,
-                   e->ipv6.invflags & IP6T_INV_VIA_IN);
-
-       print_iface('o', e->ipv6.outiface, e->ipv6.outiface_mask,
-                   e->ipv6.invflags & IP6T_INV_VIA_OUT);
-
-       print_proto(e->ipv6.proto, e->ipv6.invflags & IP6T_INV_PROTO);
-
-#if 0
-       /* not definied in ipv6
-        * FIXME: linux/netfilter_ipv6/ip6_tables: IP6T_INV_FRAG why definied? */
-       if (e->ipv6.flags & IPT_F_FRAG)
-               printf("%s-f ",
-                      e->ipv6.invflags & IP6T_INV_FRAG ? "! " : "");
-#endif
-
-       if (e->ipv6.flags & IP6T_F_TOS)
-               printf("%s-? %d ",
-                      e->ipv6.invflags & IP6T_INV_TOS ? "! " : "",
-                      e->ipv6.tos);
-
-       /* Print matchinfo part */
-       if (e->target_offset) {
-               IP6T_MATCH_ITERATE(e, print_match_save, &e->ipv6);
-       }
-
-       /* print counters for iptables -R */
-       if (counters < 0)
-               printf("-c %llu %llu ", (unsigned long long)e->counters.pcnt, (unsigned long long)e->counters.bcnt);
-
-       /* Print target name */
-       target_name = ip6tc_get_target(e, h);
-       if (target_name && (*target_name != '\0'))
-               printf("-j %s ", target_name);
-
-       /* Print targinfo part */
-       t = ip6t_get_target((struct ip6t_entry *)e);
-       if (t->u.user.name[0]) {
-               struct xtables_target *target
-                       = find_target(t->u.user.name, TRY_LOAD);
-
-               if (!target) {
-                       fprintf(stderr, "Can't find library for target `%s'\n",
-                               t->u.user.name);
-                       exit(1);
-               }
-
-               if (target->save)
-                       target->save(&e->ipv6, t);
-               else {
-                       /* If the target size is greater than ip6t_entry_target
-                        * there is something to be saved, we just don't know
-                        * how to print it */
-                       if (t->u.target_size !=
-                           sizeof(struct ip6t_entry_target)) {
-                               fprintf(stderr, "Target `%s' is missing "
-                                               "save function\n",
-                                       t->u.user.name);
-                               exit(1);
-                       }
-               }
-       }
-       printf("\n");
-}
-
-static int
-list_rules(const ip6t_chainlabel chain, int rulenum, int counters,
-            ip6tc_handle_t *handle)
-{
-       const char *this = NULL;
-       int found = 0;
-
-       if (counters)
-           counters = -1;              /* iptables -c format */
-
-       /* Dump out chain names first,
-        * thereby preventing dependency conflicts */
-       if (!rulenum) for (this = ip6tc_first_chain(handle);
-            this;
-            this = ip6tc_next_chain(handle)) {
-               if (chain && strcmp(this, chain) != 0)
-                       continue;
-
-               if (ip6tc_builtin(this, *handle)) {
-                       struct ip6t_counters count;
-                       printf("-P %s %s", this, ip6tc_get_policy(this, &count, handle));
-                       if (counters)
-                           printf(" -c %llu %llu", (unsigned long long)count.pcnt, (unsigned long long)count.bcnt);
-                       printf("\n");
-               } else {
-                       printf("-N %s\n", this);
-               }
-       }
-
-       for (this = ip6tc_first_chain(handle);
-            this;
-            this = ip6tc_next_chain(handle)) {
-               const struct ip6t_entry *e;
-               int num = 0;
-
-               if (chain && strcmp(this, chain) != 0)
-                       continue;
-
-               /* Dump out rules */
-               e = ip6tc_first_rule(this, handle);
-               while(e) {
-                       num++;
-                       if (!rulenum || num == rulenum)
-                           print_rule(e, handle, this, counters);
-                       e = ip6tc_next_rule(e, handle);
-               }
-               found = 1;
-       }
-
-       errno = ENOENT;
-       return found;
-}
-
-static struct ip6t_entry *
-generate_entry(const struct ip6t_entry *fw,
-              struct ip6tables_rule_match *matches,
-              struct ip6t_entry_target *target)
-{
-       unsigned int size;
-       struct ip6tables_rule_match *matchp;
-       struct ip6t_entry *e;
-
-       size = sizeof(struct ip6t_entry);
-       for (matchp = matches; matchp; matchp = matchp->next)
-               size += matchp->match->m->u.match_size;
-
-       e = fw_malloc(size + target->u.target_size);
-       *e = *fw;
-       e->target_offset = size;
-       e->next_offset = size + target->u.target_size;
-
-       size = 0;
-       for (matchp = matches; matchp; matchp = matchp->next) {
-               memcpy(e->elems + size, matchp->match->m, matchp->match->m->u.match_size);
-               size += matchp->match->m->u.match_size;
-       }
-       memcpy(e->elems + size, target, target->u.target_size);
-
-       return e;
-}
-
-static void clear_rule_matches(struct ip6tables_rule_match **matches)
-{
-       struct ip6tables_rule_match *matchp, *tmp;
-
-       for (matchp = *matches; matchp;) {
-               tmp = matchp->next;
-               if (matchp->match->m) {
-                       free(matchp->match->m);
-                       matchp->match->m = NULL;
-               }
-               if (matchp->match == matchp->match->next) {
-                       free(matchp->match);
-                       matchp->match = NULL;
-               }
-               free(matchp);
-               matchp = tmp;
-       }
-
-       *matches = NULL;
-}
-
-static void set_revision(char *name, u_int8_t revision)
-{
-       /* Old kernel sources don't have ".revision" field,
-          but we stole a byte from name. */
-       name[IP6T_FUNCTION_MAXNAMELEN - 2] = '\0';
-       name[IP6T_FUNCTION_MAXNAMELEN - 1] = revision;
-}
-
-int do_command6(int argc, char *argv[], char **table, ip6tc_handle_t *handle)
-{
-       struct ip6t_entry fw, *e = NULL;
-       int invert = 0;
-       unsigned int nsaddrs = 0, ndaddrs = 0;
-       struct in6_addr *saddrs = NULL, *daddrs = NULL;
-
-       int c, verbose = 0;
-       unsigned i;
-       const char *chain = NULL;
-       const char *shostnetworkmask = NULL, *dhostnetworkmask = NULL;
-       const char *policy = NULL, *newname = NULL;
-       unsigned int rulenum = 0, options = 0, command = 0;
-       const char *pcnt = NULL, *bcnt = NULL;
-       int ret = 1;
-       struct xtables_match *m;
-       struct ip6tables_rule_match *matches = NULL;
-       struct ip6tables_rule_match *matchp;
-       struct xtables_target *target = NULL;
-       struct xtables_target *t;
-       const char *jumpto = "";
-       char *protocol = NULL;
-       int proto_used = 0;
-       unsigned long long cnt;
-
-       memset(&fw, 0, sizeof(fw));
-
-       /* re-set optind to 0 in case do_command gets called
-        * a second time */
-       optind = 0;
-
-       /* clear mflags in case do_command gets called a second time
-        * (we clear the global list of all matches for security)*/
-       for (m = xtables_matches; m; m = m->next)
-               m->mflags = 0;
-
-       for (t = xtables_targets; t; t = t->next) {
-               t->tflags = 0;
-               t->used = 0;
-       }
-
-       /* Suppress error messages: we may add new options if we
-           demand-load a protocol. */
-       opterr = 0;
-
-       while ((c = getopt_long(argc, argv,
-          "-A:D:R:I:L::S::M:F::Z::N:X::E:P:Vh::o:p:s:d:j:i:bvnt:m:xc:",
-                                          opts, NULL)) != -1) {
-               switch (c) {
-                       /*
-                        * Command selection
-                        */
-               case 'A':
-                       add_command(&command, CMD_APPEND, CMD_NONE,
-                                   invert);
-                       chain = optarg;
-                       break;
-
-               case 'D':
-                       add_command(&command, CMD_DELETE, CMD_NONE,
-                                   invert);
-                       chain = optarg;
-                       if (optind < argc && argv[optind][0] != '-'
-                           && argv[optind][0] != '!') {
-                               rulenum = parse_rulenumber(argv[optind++]);
-                               command = CMD_DELETE_NUM;
-                       }
-                       break;
-
-               case 'R':
-                       add_command(&command, CMD_REPLACE, CMD_NONE,
-                                   invert);
-                       chain = optarg;
-                       if (optind < argc && argv[optind][0] != '-'
-                           && argv[optind][0] != '!')
-                               rulenum = parse_rulenumber(argv[optind++]);
-                       else
-                               exit_error(PARAMETER_PROBLEM,
-                                          "-%c requires a rule number",
-                                          cmd2char(CMD_REPLACE));
-                       break;
-
-               case 'I':
-                       add_command(&command, CMD_INSERT, CMD_NONE,
-                                   invert);
-                       chain = optarg;
-                       if (optind < argc && argv[optind][0] != '-'
-                           && argv[optind][0] != '!')
-                               rulenum = parse_rulenumber(argv[optind++]);
-                       else rulenum = 1;
-                       break;
-
-               case 'L':
-                       add_command(&command, CMD_LIST, CMD_ZERO,
-                                   invert);
-                       if (optarg) chain = optarg;
-                       else if (optind < argc && argv[optind][0] != '-'
-                                && argv[optind][0] != '!')
-                               chain = argv[optind++];
-                       if (optind < argc && argv[optind][0] != '-'
-                           && argv[optind][0] != '!')
-                               rulenum = parse_rulenumber(argv[optind++]);
-                       break;
-
-               case 'S':
-                       add_command(&command, CMD_LIST_RULES, CMD_ZERO,
-                                   invert);
-                       if (optarg) chain = optarg;
-                       else if (optind < argc && argv[optind][0] != '-'
-                                && argv[optind][0] != '!')
-                               chain = argv[optind++];
-                       if (optind < argc && argv[optind][0] != '-'
-                           && argv[optind][0] != '!')
-                               rulenum = parse_rulenumber(argv[optind++]);
-                       break;
-
-               case 'F':
-                       add_command(&command, CMD_FLUSH, CMD_NONE,
-                                   invert);
-                       if (optarg) chain = optarg;
-                       else if (optind < argc && argv[optind][0] != '-'
-                                && argv[optind][0] != '!')
-                               chain = argv[optind++];
-                       break;
-
-               case 'Z':
-                       add_command(&command, CMD_ZERO, CMD_LIST|CMD_LIST_RULES,
-                                   invert);
-                       if (optarg) chain = optarg;
-                       else if (optind < argc && argv[optind][0] != '-'
-                               && argv[optind][0] != '!')
-                               chain = argv[optind++];
-                       break;
-
-               case 'N':
-                       if (optarg && (*optarg == '-' || *optarg == '!'))
-                               exit_error(PARAMETER_PROBLEM,
-                                          "chain name not allowed to start "
-                                          "with `%c'\n", *optarg);
-                       if (find_target(optarg, TRY_LOAD))
-                               exit_error(PARAMETER_PROBLEM,
-                                          "chain name may not clash "
-                                          "with target name\n");
-                       add_command(&command, CMD_NEW_CHAIN, CMD_NONE,
-                                   invert);
-                       chain = optarg;
-                       break;
-
-               case 'X':
-                       add_command(&command, CMD_DELETE_CHAIN, CMD_NONE,
-                                   invert);
-                       if (optarg) chain = optarg;
-                       else if (optind < argc && argv[optind][0] != '-'
-                                && argv[optind][0] != '!')
-                               chain = argv[optind++];
-                       break;
-
-               case 'E':
-                       add_command(&command, CMD_RENAME_CHAIN, CMD_NONE,
-                                   invert);
-                       chain = optarg;
-                       if (optind < argc && argv[optind][0] != '-'
-                           && argv[optind][0] != '!')
-                               newname = argv[optind++];
-                       else
-                               exit_error(PARAMETER_PROBLEM,
-                                          "-%c requires old-chain-name and "
-                                          "new-chain-name",
-                                           cmd2char(CMD_RENAME_CHAIN));
-                       break;
-
-               case 'P':
-                       add_command(&command, CMD_SET_POLICY, CMD_NONE,
-                                   invert);
-                       chain = optarg;
-                       if (optind < argc && argv[optind][0] != '-'
-                           && argv[optind][0] != '!')
-                               policy = argv[optind++];
-                       else
-                               exit_error(PARAMETER_PROBLEM,
-                                          "-%c requires a chain and a policy",
-                                          cmd2char(CMD_SET_POLICY));
-                       break;
-
-               case 'h':
-                       if (!optarg)
-                               optarg = argv[optind];
-
-                       /* ip6tables -p icmp -h */
-                       if (!matches && protocol)
-                               find_match(protocol, TRY_LOAD, &matches);
-
-                       exit_printhelp(matches);
-
-                       /*
-                        * Option selection
-                        */
-               case 'p':
-                       check_inverse(optarg, &invert, &optind, argc);
-                       set_option(&options, OPT_PROTOCOL, &fw.ipv6.invflags,
-                                  invert);
-
-                       /* Canonicalize into lower case */
-                       for (protocol = argv[optind-1]; *protocol; protocol++)
-                               *protocol = tolower(*protocol);
-
-                       protocol = argv[optind-1];
-                       fw.ipv6.proto = parse_protocol(protocol);
-                       fw.ipv6.flags |= IP6T_F_PROTO;
-
-                       if (fw.ipv6.proto == 0
-                           && (fw.ipv6.invflags & IP6T_INV_PROTO))
-                               exit_error(PARAMETER_PROBLEM,
-                                          "rule would never match protocol");
-
-                       if (is_exthdr(fw.ipv6.proto)
-                           && (fw.ipv6.invflags & IP6T_INV_PROTO) == 0)
-                               fprintf(stderr,
-                                       "Warning: never matched protocol: %s. "
-                                       "use extension match instead.\n",
-                                       protocol);
-                       break;
-
-               case 's':
-                       check_inverse(optarg, &invert, &optind, argc);
-                       set_option(&options, OPT_SOURCE, &fw.ipv6.invflags,
-                                  invert);
-                       shostnetworkmask = argv[optind-1];
-                       break;
-
-               case 'd':
-                       check_inverse(optarg, &invert, &optind, argc);
-                       set_option(&options, OPT_DESTINATION, &fw.ipv6.invflags,
-                                  invert);
-                       dhostnetworkmask = argv[optind-1];
-                       break;
-
-               case 'j':
-                       set_option(&options, OPT_JUMP, &fw.ipv6.invflags,
-                                  invert);
-                       jumpto = parse_target(optarg);
-                       /* TRY_LOAD (may be chain name) */
-                       target = find_target(jumpto, TRY_LOAD);
-
-                       if (target) {
-                               size_t size;
-
-                               size = IP6T_ALIGN(sizeof(struct ip6t_entry_target))
-                                       + target->size;
-
-                               target->t = fw_calloc(1, size);
-                               target->t->u.target_size = size;
-                               strcpy(target->t->u.user.name, jumpto);
-                               set_revision(target->t->u.user.name,
-                                            target->revision);
-                               if (target->init != NULL)
-                                       target->init(target->t);
-                               opts = merge_options(opts,
-                                                    target->extra_opts,
-                                                    &target->option_offset);
-                               if (opts == NULL)
-                                       exit_error(OTHER_PROBLEM,
-                                                  "can't alloc memory!");
-                       }
-                       break;
-
-
-               case 'i':
-                       check_inverse(optarg, &invert, &optind, argc);
-                       set_option(&options, OPT_VIANAMEIN, &fw.ipv6.invflags,
-                                  invert);
-                       parse_interface(argv[optind-1],
-                                       fw.ipv6.iniface,
-                                       fw.ipv6.iniface_mask);
-                       break;
-
-               case 'o':
-                       check_inverse(optarg, &invert, &optind, argc);
-                       set_option(&options, OPT_VIANAMEOUT, &fw.ipv6.invflags,
-                                  invert);
-                       parse_interface(argv[optind-1],
-                                       fw.ipv6.outiface,
-                                       fw.ipv6.outiface_mask);
-                       break;
-
-               case 'v':
-                       if (!verbose)
-                               set_option(&options, OPT_VERBOSE,
-                                          &fw.ipv6.invflags, invert);
-                       verbose++;
-                       break;
-
-               case 'm': {
-                       size_t size;
-
-                       if (invert)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "unexpected ! flag before --match");
-
-                       m = find_match(optarg, LOAD_MUST_SUCCEED, &matches);
-                       size = IP6T_ALIGN(sizeof(struct ip6t_entry_match))
-                                        + m->size;
-                       m->m = fw_calloc(1, size);
-                       m->m->u.match_size = size;
-                       strcpy(m->m->u.user.name, m->name);
-                       set_revision(m->m->u.user.name, m->revision);
-                       if (m->init != NULL)
-                               m->init(m->m);
-                       if (m != m->next)
-                               /* Merge options for non-cloned matches */
-                               opts = merge_options(opts, m->extra_opts, &m->option_offset);
-               }
-               break;
-
-               case 'n':
-                       set_option(&options, OPT_NUMERIC, &fw.ipv6.invflags,
-                                  invert);
-                       break;
-
-               case 't':
-                       if (invert)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "unexpected ! flag before --table");
-                       *table = argv[optind-1];
-                       break;
-
-               case 'x':
-                       set_option(&options, OPT_EXPANDED, &fw.ipv6.invflags,
-                                  invert);
-                       break;
-
-               case 'V':
-                       if (invert)
-                               printf("Not %s ;-)\n", program_version);
-                       else
-                               printf("%s v%s\n",
-                                      program_name, program_version);
-                       exit(0);
-
-               case '0':
-                       set_option(&options, OPT_LINENUMBERS, &fw.ipv6.invflags,
-                                  invert);
-                       break;
-
-               case 'M':
-                       modprobe_program = optarg;
-                       break;
-
-               case 'c':
-
-                       set_option(&options, OPT_COUNTERS, &fw.ipv6.invflags,
-                                  invert);
-                       pcnt = optarg;
-                       bcnt = strchr(pcnt + 1, ',');
-                       if (bcnt)
-                           bcnt++;
-                       if (!bcnt && optind < argc && argv[optind][0] != '-'
-                           && argv[optind][0] != '!')
-                               bcnt = argv[optind++];
-                       if (!bcnt)
-                               exit_error(PARAMETER_PROBLEM,
-                                       "-%c requires packet and byte counter",
-                                       opt2char(OPT_COUNTERS));
-
-                       if (sscanf(pcnt, "%llu", &cnt) != 1)
-                               exit_error(PARAMETER_PROBLEM,
-                                       "-%c packet counter not numeric",
-                                       opt2char(OPT_COUNTERS));
-                       fw.counters.pcnt = cnt;
-
-                       if (sscanf(bcnt, "%llu", &cnt) != 1)
-                               exit_error(PARAMETER_PROBLEM,
-                                       "-%c byte counter not numeric",
-                                       opt2char(OPT_COUNTERS));
-                       fw.counters.bcnt = cnt;
-                       break;
-
-               case 1: /* non option */
-                       if (optarg[0] == '!' && optarg[1] == '\0') {
-                               if (invert)
-                                       exit_error(PARAMETER_PROBLEM,
-                                                  "multiple consecutive ! not"
-                                                  " allowed");
-                               invert = TRUE;
-                               optarg[0] = '\0';
-                               continue;
-                       }
-                       fprintf(stderr, "Bad argument `%s'\n", optarg);
-                       exit_tryhelp(2);
-
-               default:
-                       if (!target
-                           || !(target->parse(c - target->option_offset,
-                                              argv, invert,
-                                              &target->tflags,
-                                              &fw, &target->t))) {
-                               for (matchp = matches; matchp; matchp = matchp->next) {
-                                       if (matchp->completed)
-                                               continue;
-                                       if (matchp->match->parse(c - matchp->match->option_offset,
-                                                    argv, invert,
-                                                    &matchp->match->mflags,
-                                                    &fw,
-                                                    &matchp->match->m))
-                                               break;
-                               }
-                               m = matchp ? matchp->match : NULL;
-
-                               /* If you listen carefully, you can
-                                  actually hear this code suck. */
-
-                               /* some explanations (after four different bugs
-                                * in 3 different releases): If we encounter a
-                                * parameter, that has not been parsed yet,
-                                * it's not an option of an explicitly loaded
-                                * match or a target.  However, we support
-                                * implicit loading of the protocol match
-                                * extension.  '-p tcp' means 'l4 proto 6' and
-                                * at the same time 'load tcp protocol match on
-                                * demand if we specify --dport'.
-                                *
-                                * To make this work, we need to make sure:
-                                * - the parameter has not been parsed by
-                                *   a match (m above)
-                                * - a protocol has been specified
-                                * - the protocol extension has not been
-                                *   loaded yet, or is loaded and unused
-                                *   [think of ip6tables-restore!]
-                                * - the protocol extension can be successively
-                                *   loaded
-                                */
-                               if (m == NULL
-                                   && protocol
-                                   && (!find_proto(protocol, DONT_LOAD,
-                                                  options&OPT_NUMERIC, NULL)
-                                       || (find_proto(protocol, DONT_LOAD,
-                                                       options&OPT_NUMERIC, NULL)
-                                           && (proto_used == 0))
-                                      )
-                                   && (m = find_proto(protocol, TRY_LOAD,
-                                                      options&OPT_NUMERIC, &matches))) {
-                                       /* Try loading protocol */
-                                       size_t size;
-
-                                       proto_used = 1;
-
-                                       size = IP6T_ALIGN(sizeof(struct ip6t_entry_match))
-                                                        + m->size;
-
-                                       m->m = fw_calloc(1, size);
-                                       m->m->u.match_size = size;
-                                       strcpy(m->m->u.user.name, m->name);
-                                       set_revision(m->m->u.user.name,
-                                                    m->revision);
-                                       if (m->init != NULL)
-                                               m->init(m->m);
-
-                                       opts = merge_options(opts,
-                                           m->extra_opts, &m->option_offset);
-
-                                       optind--;
-                                       continue;
-                               }
-
-                               if (!m)
-                                       exit_error(PARAMETER_PROBLEM,
-                                                  "Unknown arg `%s'",
-                                                  argv[optind-1]);
-                       }
-               }
-               invert = FALSE;
-       }
-
-       for (matchp = matches; matchp; matchp = matchp->next)
-               if (matchp->match->final_check != NULL)
-                       matchp->match->final_check(matchp->match->mflags);
-
-       if (target != NULL && target->final_check != NULL)
-               target->final_check(target->tflags);
-
-       /* Fix me: must put inverse options checking here --MN */
-
-       if (optind < argc)
-               exit_error(PARAMETER_PROBLEM,
-                          "unknown arguments found on commandline");
-       if (!command)
-               exit_error(PARAMETER_PROBLEM, "no command specified");
-       if (invert)
-               exit_error(PARAMETER_PROBLEM,
-                          "nothing appropriate following !");
-
-       if (command & (CMD_REPLACE | CMD_INSERT | CMD_DELETE | CMD_APPEND)) {
-               if (!(options & OPT_DESTINATION))
-                       dhostnetworkmask = "::0/0";
-               if (!(options & OPT_SOURCE))
-                       shostnetworkmask = "::0/0";
-       }
-
-       if (shostnetworkmask)
-               ip6parse_hostnetworkmask(shostnetworkmask, &saddrs,
-                                        &fw.ipv6.smsk, &nsaddrs);
-
-       if (dhostnetworkmask)
-               ip6parse_hostnetworkmask(dhostnetworkmask, &daddrs,
-                                        &fw.ipv6.dmsk, &ndaddrs);
-
-       if ((nsaddrs > 1 || ndaddrs > 1) &&
-           (fw.ipv6.invflags & (IP6T_INV_SRCIP | IP6T_INV_DSTIP)))
-               exit_error(PARAMETER_PROBLEM, "! not allowed with multiple"
-                          " source or destination IP addresses");
-
-       if (command == CMD_REPLACE && (nsaddrs != 1 || ndaddrs != 1))
-               exit_error(PARAMETER_PROBLEM, "Replacement rule does not "
-                          "specify a unique address");
-
-       generic_opt_check(command, options);
-
-       if (chain && strlen(chain) > IP6T_FUNCTION_MAXNAMELEN)
-               exit_error(PARAMETER_PROBLEM,
-                          "chain name `%s' too long (must be under %i chars)",
-                          chain, IP6T_FUNCTION_MAXNAMELEN);
-
-       /* only allocate handle if we weren't called with a handle */
-       if (!*handle)
-               *handle = ip6tc_init(*table);
-
-       /* try to insmod the module if iptc_init failed */
-       if (!*handle && load_xtables_ko(modprobe_program, 0) != -1)
-               *handle = ip6tc_init(*table);
-
-       if (!*handle)
-               exit_error(VERSION_PROBLEM,
-                       "can't initialize ip6tables table `%s': %s",
-                       *table, ip6tc_strerror(errno));
-
-       if (command == CMD_APPEND
-           || command == CMD_DELETE
-           || command == CMD_INSERT
-           || command == CMD_REPLACE) {
-               if (strcmp(chain, "PREROUTING") == 0
-                   || strcmp(chain, "INPUT") == 0) {
-                       /* -o not valid with incoming packets. */
-                       if (options & OPT_VIANAMEOUT)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "Can't use -%c with %s\n",
-                                          opt2char(OPT_VIANAMEOUT),
-                                          chain);
-               }
-
-               if (strcmp(chain, "POSTROUTING") == 0
-                   || strcmp(chain, "OUTPUT") == 0) {
-                       /* -i not valid with outgoing packets */
-                       if (options & OPT_VIANAMEIN)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "Can't use -%c with %s\n",
-                                          opt2char(OPT_VIANAMEIN),
-                                          chain);
-               }
-
-               if (target && ip6tc_is_chain(jumpto, *handle)) {
-                       fprintf(stderr,
-                               "Warning: using chain %s, not extension\n",
-                               jumpto);
-
-                       if (target->t)
-                               free(target->t);
-
-                       target = NULL;
-               }
-
-               /* If they didn't specify a target, or it's a chain
-                  name, use standard. */
-               if (!target
-                   && (strlen(jumpto) == 0
-                       || ip6tc_is_chain(jumpto, *handle))) {
-                       size_t size;
-
-                       target = find_target(IP6T_STANDARD_TARGET,
-                                            LOAD_MUST_SUCCEED);
-
-                       size = sizeof(struct ip6t_entry_target)
-                               + target->size;
-                       target->t = fw_calloc(1, size);
-                       target->t->u.target_size = size;
-                       strcpy(target->t->u.user.name, jumpto);
-                       if (target->init != NULL)
-                               target->init(target->t);
-               }
-
-               if (!target) {
-                       /* it is no chain, and we can't load a plugin.
-                        * We cannot know if the plugin is corrupt, non
-                        * existant OR if the user just misspelled a
-                        * chain. */
-                       find_target(jumpto, LOAD_MUST_SUCCEED);
-               } else {
-                       e = generate_entry(&fw, matches, target->t);
-                       free(target->t);
-               }
-       }
-
-       switch (command) {
-       case CMD_APPEND:
-               ret = append_entry(chain, e,
-                                  nsaddrs, saddrs, ndaddrs, daddrs,
-                                  options&OPT_VERBOSE,
-                                  handle);
-               break;
-       case CMD_DELETE:
-               ret = delete_entry(chain, e,
-                                  nsaddrs, saddrs, ndaddrs, daddrs,
-                                  options&OPT_VERBOSE,
-                                  handle, matches);
-               break;
-       case CMD_DELETE_NUM:
-               ret = ip6tc_delete_num_entry(chain, rulenum - 1, handle);
-               break;
-       case CMD_REPLACE:
-               ret = replace_entry(chain, e, rulenum - 1,
-                                   saddrs, daddrs, options&OPT_VERBOSE,
-                                   handle);
-               break;
-       case CMD_INSERT:
-               ret = insert_entry(chain, e, rulenum - 1,
-                                  nsaddrs, saddrs, ndaddrs, daddrs,
-                                  options&OPT_VERBOSE,
-                                  handle);
-               break;
-       case CMD_FLUSH:
-               ret = flush_entries(chain, options&OPT_VERBOSE, handle);
-               break;
-       case CMD_ZERO:
-               ret = zero_entries(chain, options&OPT_VERBOSE, handle);
-               break;
-       case CMD_LIST:
-       case CMD_LIST|CMD_ZERO:
-               ret = list_entries(chain,
-                                  rulenum,
-                                  options&OPT_VERBOSE,
-                                  options&OPT_NUMERIC,
-                                  options&OPT_EXPANDED,
-                                  options&OPT_LINENUMBERS,
-                                  handle);
-               if (ret && (command & CMD_ZERO))
-                       ret = zero_entries(chain,
-                                          options&OPT_VERBOSE, handle);
-               break;
-       case CMD_LIST_RULES:
-       case CMD_LIST_RULES|CMD_ZERO:
-               ret = list_rules(chain,
-                                  rulenum,
-                                  options&OPT_VERBOSE,
-                                  handle);
-               if (ret && (command & CMD_ZERO))
-                       ret = zero_entries(chain,
-                                          options&OPT_VERBOSE, handle);
-               break;
-       case CMD_NEW_CHAIN:
-               ret = ip6tc_create_chain(chain, handle);
-               break;
-       case CMD_DELETE_CHAIN:
-               ret = delete_chain(chain, options&OPT_VERBOSE, handle);
-               break;
-       case CMD_RENAME_CHAIN:
-               ret = ip6tc_rename_chain(chain, newname,        handle);
-               break;
-       case CMD_SET_POLICY:
-               ret = ip6tc_set_policy(chain, policy, options&OPT_COUNTERS ? &fw.counters : NULL, handle);
-               break;
-       default:
-               /* We should never reach this... */
-               exit_tryhelp(2);
-       }
-
-       if (verbose > 1)
-               dump_entries6(*handle);
-
-       clear_rule_matches(&matches);
-
-       if (e != NULL) {
-               free(e);
-               e = NULL;
-       }
-
-       for (i = 0; i < nsaddrs; i++)
-               free(&saddrs[i]);
-
-       for (i = 0; i < ndaddrs; i++)
-               free(&daddrs[i]);
-
-       free_opts(1);
-
-       return ret;
-}
diff --git a/iptables-apply b/iptables-apply
deleted file mode 100755 (executable)
index 5fec76b..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-#!/bin/bash
-#
-# iptables-apply -- a safer way to update iptables remotely
-#
-# Copyright © Martin F. Krafft <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-#
-set -eu
-
-PROGNAME="${0##*/}";
-VERSION=1.0
-
-TIMEOUT=10
-DEFAULT_FILE=/etc/network/iptables
-
-function blurb()
-{
-       cat <<-_eof
-       $PROGNAME $VERSION -- a safer way to update iptables remotely
-       _eof
-}
-
-function copyright()
-{
-       cat <<-_eof
-       $PROGNAME is C Martin F. Krafft <madduck@madduck.net>.
-
-       The program has been published under the terms of the Artistic Licence 2.0
-       _eof
-}
-
-function about()
-{
-       blurb
-       echo
-       copyright
-}
-
-function usage()
-{
-       cat <<-_eof
-       Usage: $PROGNAME [options] ruleset
-
-       The script will try to apply a new ruleset (as output by iptables-save/read
-       by iptables-restore) to iptables, then prompt the user whether the changes
-       are okay. If the new ruleset cut the existing connection, the user will not
-       be able to answer affirmatively. In this case, the script rolls back to the
-       previous ruleset.
-
-       The following options may be specified, using standard conventions:
-
-       -t | --timeout  Specify the timeout in seconds (default: $TIMEOUT)
-       -V | --version  Display version information
-       -h | --help     Display this help text
-       _eof
-}
-
-SHORTOPTS="t:Vh";
-LONGOPTS="timeout:,version,help";
-
-OPTS=$(getopt -s bash -o "$SHORTOPTS" -l "$LONGOPTS" -n "$PROGNAME" -- "$@") || exit $?
-for opt in $OPTS; do
-       case "$opt" in
-               (-*) unset OPT_STATE;;
-               (*)
-                       case "${OPT_STATE:-}" in
-                               (SET_TIMEOUT)
-                                       eval TIMEOUT=$opt
-                                       case "$TIMEOUT" in
-                                               ([0-9]*) :;;
-                                               (*)
-                                                       echo "E: non-numeric timeout value." >&2
-                                                       exit 1
-                                                       ;;
-                                       esac
-                                       ;;
-                       esac
-                       ;;
-       esac
-
-       case "$opt" in
-               (-h|--help) usage >&2; exit 0;;
-               (-V|--version) about >&2; exit 0;;
-               (-t|--timeout) OPT_STATE=SET_TIMEOUT;;
-               (--) break;;
-       esac
-       shift
-done
-
-FILE="${1:-$DEFAULT_FILE}";
-
-if [[ -z "$FILE" ]]; then
-       echo "E: missing file argument." >&2
-       exit 1
-fi
-
-if [[ ! -r "$FILE" ]]; then
-       echo "E: cannot read $FILE" >&2
-       exit 2
-fi
-
-case "${0##*/}" in
-       (*6*)
-               SAVE=ip6tables-save
-               RESTORE=ip6tables-restore
-               ;;
-       (*)
-               SAVE=iptables-save
-               RESTORE=iptables-restore
-               ;;
-esac
-
-COMMANDS=(tempfile "$SAVE" "$RESTORE")
-
-for cmd in "${COMMANDS[@]}"; do
-       if ! command -v $cmd >/dev/null; then
-               echo "E: command not found: $cmd" >&2
-               exit 127
-       fi
-done
-
-umask 0700
-
-TMPFILE=$(tempfile -p iptap)
-trap "rm -f $TMPFILE" EXIT 1 2 3 4 5 6 7 8 10 11 12 13 14 15
-
-if ! "$SAVE" >"$TMPFILE"; then
-       if ! grep -q ipt /proc/modules 2>/dev/null; then
-               echo "E: iptables support lacking from the kernel." >&2
-               exit 3
-       else
-               echo "E: unknown error saving current iptables ruleset." >&2
-               exit 4
-       fi
-fi
-
-[ -x /etc/init.d/fail2ban ] && /etc/init.d/fail2ban stop
-
-echo -n "Applying new ruleset... "
-if ! "$RESTORE" <"$FILE"; then
-       echo "failed."
-       echo "E: unknown error applying new iptables ruleset." >&2
-       exit 5
-else
-       echo done.
-fi
-
-echo -n "Can you establish NEW connections to the machine? (y/N) "
-
-read -n1 -t "${TIMEOUT:-15}" ret 2>&1 || :
-case "${ret:-}" in
-       (y*|Y*)
-               echo
-               echo ... then my job is done. See you next time.
-               ;;
-       (*)
-               if [[ -z "${ret:-}" ]]; then
-                       echo "apparently not..."
-               else
-                       echo
-               fi
-               echo "Timeout. Something happened (or did not). Better play it safe..."
-               echo -n "Reverting to old ruleset... "
-               "$RESTORE" <"$TMPFILE";
-               echo done.
-               exit 255
-               ;;
-esac
-
-[ -x /etc/init.d/fail2ban ] && /etc/init.d/fail2ban start
-
-exit 0
-
-# vim:noet:sw=8
diff --git a/iptables-apply.8 b/iptables-apply.8
deleted file mode 100644 (file)
index 8208fd0..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-.\"     Title: iptables-apply
-.\"    Author: Martin F. Krafft
-.\"      Date: Jun 04, 2006
-.\"
-.TH iptables\-apply 8 2006-06-04
-.\" disable hyphenation
-.nh
-.SH NAME
-iptables-apply \- a safer way to update iptables remotely
-.SH SYNOPSIS
-\fBiptables\-apply\fP [\-\fBhV\fP] [\fB-t\fP \fItimeout\fP] \fIruleset\-file\fP
-.SH "DESCRIPTION"
-.PP
-iptables\-apply will try to apply a new ruleset (as output by
-iptables\-save/read by iptables\-restore) to iptables, then prompt the
-user whether the changes are okay. If the new ruleset cut the existing
-connection, the user will not be able to answer affirmatively. In this
-case, the script rolls back to the previous ruleset after the timeout
-expired. The timeout can be set with \fB\-t\fP.
-.PP
-When called as ip6tables\-apply, the script will use
-ip6tables\-save/\-restore instead.
-.SH OPTIONS
-.TP
-\fB\-t\fP \fIseconds\fR, \fB\-\-timeout\fP \fIseconds\fR
-Sets the timeout after which the script will roll back to the previous
-ruleset.
-.TP
-\fB\-h\fP, \fB\-\-help\fP
-Display usage information.
-.TP
-\fB\-V\fP, \fB\-\-version\fP
-Display version information.
-.SH "SEE ALSO"
-.PP
-\fBiptables-restore\fP(8), \fBiptables-save\fP(8), \fBiptables\fR(8).
-.SH LEGALESE
-.PP
-iptables\-apply is copyright by Martin F. Krafft.
-.PP
-This manual page was written by Martin F. Krafft <madduck@madduck.net>
-.PP
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the Artistic License 2.0.
index 6640322..9155c0b 100644 (file)
@@ -2,7 +2,7 @@
 #   Default: -none-
 # Space separated list of nat helpers (e.g. 'ip_nat_ftp ip_nat_irc'), which
 # are loaded after the firewall rules are applied. Options for the helpers are
-# stored in /etc/modules.conf.
+# stored in /etc/modprobe.conf.
 IPTABLES_MODULES="ip_conntrack tun"
 
 # Unload modules on restart and stop
diff --git a/iptables-multi.c b/iptables-multi.c
deleted file mode 100644 (file)
index 7ade333..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <libgen.h>
-
-int iptables_main(int argc, char **argv);
-int iptables_save_main(int argc, char **argv);
-int iptables_restore_main(int argc, char **argv);
-int iptables_xml_main(int argc, char **argv);
-
-int main(int argc, char **argv) {
-  char *progname;
-
-  if (argc == 0) {
-    fprintf(stderr, "no argv[0]?");
-    exit(1);
-  } else {
-    progname = basename(argv[0]);
-
-    if (!strcmp(progname, "iptables"))
-      return iptables_main(argc, argv);
-    
-    if (!strcmp(progname, "iptables-save"))
-      return iptables_save_main(argc, argv);
-    
-    if (!strcmp(progname, "iptables-restore"))
-      return iptables_restore_main(argc, argv);
-    
-    if (!strcmp(progname, "iptables-xml"))
-      return iptables_xml_main(argc, argv);
-    
-    fprintf(stderr, "iptables multi-purpose version: unknown applet name %s\n", progname);
-    exit(1);
-  }
-}
diff --git a/iptables-multi.h b/iptables-multi.h
deleted file mode 100644 (file)
index a9912b0..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef _IPTABLES_MULTI_H
-#define _IPTABLES_MULTI_H 1
-
-extern int iptables_main(int, char **);
-extern int iptables_save_main(int, char **);
-extern int iptables_restore_main(int, char **);
-extern int iptables_xml_main(int, char **);
-
-#endif /* _IPTABLES_MULTI_H */
diff --git a/iptables-restore.8 b/iptables-restore.8
deleted file mode 100644 (file)
index e2649e5..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-.TH IPTABLES-RESTORE 8 "Jan 04, 2001" "" ""
-.\"
-.\" Man page written by Harald Welte <laforge@gnumonks.org>
-.\" It is based on the iptables man page.
-.\"
-.\"    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 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, write to the Free Software
-.\"    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-.\"
-.\"
-.SH NAME
-iptables-restore \- Restore IP Tables
-.SH SYNOPSIS
-.BR "iptables-restore " "[-c] [-n]"
-.br
-.SH DESCRIPTION
-.PP
-.B iptables-restore
-is used to restore IP Tables from data specified on STDIN. Use 
-I/O redirection provided by your shell to read from a file
-.TP
-\fB\-c\fR, \fB\-\-counters\fR
-restore the values of all packet and byte counters
-.TP
-\fB\-n\fR, \fB\-\-noflush\fR 
-.TP
-don't flush the previous contents of the table. If not specified, 
-.B iptables-restore
-flushes (deletes) all previous contents of the respective IP Table.
-.SH BUGS
-None known as of iptables-1.2.1 release
-.SH AUTHOR
-Harald Welte <laforge@gnumonks.org>
-.SH SEE ALSO
-.BR iptables-save "(8), " iptables "(8) "
-.PP
-The iptables-HOWTO, which details more iptables usage, the NAT-HOWTO,
-which details NAT, and the netfilter-hacking-HOWTO which details the
-internals.
diff --git a/iptables-restore.c b/iptables-restore.c
deleted file mode 100644 (file)
index 4b199d9..0000000
+++ /dev/null
@@ -1,462 +0,0 @@
-/* Code to restore the iptables state, from file by iptables-save.
- * (C) 2000-2002 by Harald Welte <laforge@gnumonks.org>
- * based on previous code from Rusty Russell <rusty@linuxcare.com.au>
- *
- * This code is distributed under the terms of GNU GPL v2
- *
- * $Id$
- */
-
-#include <getopt.h>
-#include <sys/errno.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "iptables.h"
-#include "xtables.h"
-#include "libiptc/libiptc.h"
-#include "iptables-multi.h"
-
-#ifdef DEBUG
-#define DEBUGP(x, args...) fprintf(stderr, x, ## args)
-#else
-#define DEBUGP(x, args...)
-#endif
-
-static int binary = 0, counters = 0, verbose = 0, noflush = 0;
-
-/* Keeping track of external matches and targets.  */
-static const struct option options[] = {
-       {.name = "binary",   .has_arg = false, .val = 'b'},
-       {.name = "counters", .has_arg = false, .val = 'c'},
-       {.name = "verbose",  .has_arg = false, .val = 'v'},
-       {.name = "test",     .has_arg = false, .val = 't'},
-       {.name = "help",     .has_arg = false, .val = 'h'},
-       {.name = "noflush",  .has_arg = false, .val = 'n'},
-       {.name = "modprobe", .has_arg = true,  .val = 'M'},
-       {.name = "table",    .has_arg = true,  .val = 'T'},
-       {NULL},
-};
-
-static void print_usage(const char *name, const char *version) __attribute__((noreturn));
-
-static void print_usage(const char *name, const char *version)
-{
-       fprintf(stderr, "Usage: %s [-b] [-c] [-v] [-t] [-h]\n"
-                       "          [ --binary ]\n"
-                       "          [ --counters ]\n"
-                       "          [ --verbose ]\n"
-                       "          [ --test ]\n"
-                       "          [ --help ]\n"
-                       "          [ --noflush ]\n"
-                       "          [ --table=<TABLE> ]\n"
-                       "          [ --modprobe=<command>]\n", name);
-
-       exit(1);
-}
-
-static iptc_handle_t create_handle(const char *tablename, const char *modprobe)
-{
-       iptc_handle_t handle;
-
-       handle = iptc_init(tablename);
-
-       if (!handle) {
-               /* try to insmod the module if iptc_init failed */
-               load_xtables_ko(modprobe, 0);
-               handle = iptc_init(tablename);
-       }
-
-       if (!handle) {
-               exit_error(PARAMETER_PROBLEM, "%s: unable to initialize "
-                       "table '%s'\n", program_name, tablename);
-               exit(1);
-       }
-       return handle;
-}
-
-static int parse_counters(char *string, struct ipt_counters *ctr)
-{
-       unsigned long long pcnt, bcnt;
-       int ret;
-
-       ret = sscanf(string, "[%llu:%llu]",
-                    (unsigned long long *)&pcnt,
-                    (unsigned long long *)&bcnt);
-       ctr->pcnt = pcnt;
-       ctr->bcnt = bcnt;
-       return ret == 2;
-}
-
-/* global new argv and argc */
-static char *newargv[255];
-static int newargc;
-
-/* function adding one argument to newargv, updating newargc 
- * returns true if argument added, false otherwise */
-static int add_argv(char *what) {
-       DEBUGP("add_argv: %s\n", what);
-       if (what && ((newargc + 1) < sizeof(newargv)/sizeof(char *))) {
-               newargv[newargc] = strdup(what);
-               newargc++;
-               return 1;
-       } else 
-               return 0;
-}
-
-static void free_argv(void) {
-       int i;
-
-       for (i = 0; i < newargc; i++)
-               free(newargv[i]);
-}
-
-#ifdef IPTABLES_MULTI
-int
-iptables_restore_main(int argc, char *argv[])
-#else
-int
-main(int argc, char *argv[])
-#endif
-{
-       iptc_handle_t handle = NULL;
-       char buffer[10240];
-       int c;
-       char curtable[IPT_TABLE_MAXNAMELEN + 1];
-       FILE *in;
-       const char *modprobe = NULL;
-       int in_table = 0, testing = 0;
-       const char *tablename = NULL;
-
-       program_name = "iptables-restore";
-       program_version = XTABLES_VERSION;
-       line = 0;
-
-       lib_dir = getenv("XTABLES_LIBDIR");
-       if (lib_dir == NULL) {
-               lib_dir = getenv("IPTABLES_LIB_DIR");
-               if (lib_dir != NULL)
-                       fprintf(stderr, "IPTABLES_LIB_DIR is deprecated\n");
-       }
-       if (lib_dir == NULL)
-               lib_dir = XTABLES_LIBDIR;
-
-#ifdef NO_SHARED_LIBS
-       init_extensions();
-#endif
-
-       while ((c = getopt_long(argc, argv, "bcvthnM:T:", options, NULL)) != -1) {
-               switch (c) {
-                       case 'b':
-                               binary = 1;
-                               break;
-                       case 'c':
-                               counters = 1;
-                               break;
-                       case 'v':
-                               verbose = 1;
-                               break;
-                       case 't':
-                               testing = 1;
-                               break;
-                       case 'h':
-                               print_usage("iptables-restore",
-                                           XTABLES_VERSION);
-                               break;
-                       case 'n':
-                               noflush = 1;
-                               break;
-                       case 'M':
-                               modprobe = optarg;
-                               break;
-                       case 'T':
-                               tablename = optarg;
-                               break;
-               }
-       }
-
-       if (optind == argc - 1) {
-               in = fopen(argv[optind], "r");
-               if (!in) {
-                       fprintf(stderr, "Can't open %s: %s\n", argv[optind],
-                               strerror(errno));
-                       exit(1);
-               }
-       }
-       else if (optind < argc) {
-               fprintf(stderr, "Unknown arguments found on commandline\n");
-               exit(1);
-       }
-       else in = stdin;
-
-       /* Grab standard input. */
-       while (fgets(buffer, sizeof(buffer), in)) {
-               int ret = 0;
-
-               line++;
-               if (buffer[0] == '\n')
-                       continue;
-               else if (buffer[0] == '#') {
-                       if (verbose)
-                               fputs(buffer, stdout);
-                       continue;
-               } else if ((strcmp(buffer, "COMMIT\n") == 0) && (in_table)) {
-                       if (!testing) {
-                               DEBUGP("Calling commit\n");
-                               ret = iptc_commit(&handle);
-                       } else {
-                               DEBUGP("Not calling commit, testing\n");
-                               ret = 1;
-                       }
-                       in_table = 0;
-               } else if ((buffer[0] == '*') && (!in_table)) {
-                       /* New table */
-                       char *table;
-
-                       table = strtok(buffer+1, " \t\n");
-                       DEBUGP("line %u, table '%s'\n", line, table);
-                       if (!table) {
-                               exit_error(PARAMETER_PROBLEM,
-                                       "%s: line %u table name invalid\n",
-                                       program_name, line);
-                               exit(1);
-                       }
-                       strncpy(curtable, table, IPT_TABLE_MAXNAMELEN);
-                       curtable[IPT_TABLE_MAXNAMELEN] = '\0';
-
-                       if (tablename && (strcmp(tablename, table) != 0))
-                               continue;
-                       if (handle)
-                               iptc_free(&handle);
-
-                       handle = create_handle(table, modprobe);
-                       if (noflush == 0) {
-                               DEBUGP("Cleaning all chains of table '%s'\n",
-                                       table);
-                               for_each_chain(flush_entries, verbose, 1,
-                                               &handle);
-
-                               DEBUGP("Deleting all user-defined chains "
-                                      "of table '%s'\n", table);
-                               for_each_chain(delete_chain, verbose, 0,
-                                               &handle) ;
-                       }
-
-                       ret = 1;
-                       in_table = 1;
-
-               } else if ((buffer[0] == ':') && (in_table)) {
-                       /* New chain. */
-                       char *policy, *chain;
-
-                       chain = strtok(buffer+1, " \t\n");
-                       DEBUGP("line %u, chain '%s'\n", line, chain);
-                       if (!chain) {
-                               exit_error(PARAMETER_PROBLEM,
-                                          "%s: line %u chain name invalid\n",
-                                          program_name, line);
-                               exit(1);
-                       }
-
-                       if (iptc_builtin(chain, handle) <= 0) {
-                               if (noflush && iptc_is_chain(chain, handle)) {
-                                       DEBUGP("Flushing existing user defined chain '%s'\n", chain);
-                                       if (!iptc_flush_entries(chain, &handle))
-                                               exit_error(PARAMETER_PROBLEM,
-                                                          "error flushing chain "
-                                                          "'%s':%s\n", chain,
-                                                          strerror(errno));
-                               } else {
-                                       DEBUGP("Creating new chain '%s'\n", chain);
-                                       if (!iptc_create_chain(chain, &handle))
-                                               exit_error(PARAMETER_PROBLEM,
-                                                          "error creating chain "
-                                                          "'%s':%s\n", chain,
-                                                          strerror(errno));
-                               }
-                       }
-
-                       policy = strtok(NULL, " \t\n");
-                       DEBUGP("line %u, policy '%s'\n", line, policy);
-                       if (!policy) {
-                               exit_error(PARAMETER_PROBLEM,
-                                          "%s: line %u policy invalid\n",
-                                          program_name, line);
-                               exit(1);
-                       }
-
-                       if (strcmp(policy, "-") != 0) {
-                               struct ipt_counters count;
-
-                               if (counters) {
-                                       char *ctrs;
-                                       ctrs = strtok(NULL, " \t\n");
-
-                                       if (!ctrs || !parse_counters(ctrs, &count))
-                                               exit_error(PARAMETER_PROBLEM,
-                                                          "invalid policy counters "
-                                                          "for chain '%s'\n", chain);
-
-                               } else {
-                                       memset(&count, 0,
-                                              sizeof(struct ipt_counters));
-                               }
-
-                               DEBUGP("Setting policy of chain %s to %s\n",
-                                       chain, policy);
-
-                               if (!iptc_set_policy(chain, policy, &count,
-                                                    &handle))
-                                       exit_error(OTHER_PROBLEM,
-                                               "Can't set policy `%s'"
-                                               " on `%s' line %u: %s\n",
-                                               chain, policy, line,
-                                               iptc_strerror(errno));
-                       }
-
-                       ret = 1;
-
-               } else if (in_table) {
-                       int a;
-                       char *ptr = buffer;
-                       char *pcnt = NULL;
-                       char *bcnt = NULL;
-                       char *parsestart;
-
-                       /* the parser */
-                       char *curchar;
-                       int quote_open, escaped;
-                       size_t param_len;
-
-                       /* reset the newargv */
-                       newargc = 0;
-
-                       if (buffer[0] == '[') {
-                               /* we have counters in our input */
-                               ptr = strchr(buffer, ']');
-                               if (!ptr)
-                                       exit_error(PARAMETER_PROBLEM,
-                                                  "Bad line %u: need ]\n",
-                                                  line);
-
-                               pcnt = strtok(buffer+1, ":");
-                               if (!pcnt)
-                                       exit_error(PARAMETER_PROBLEM,
-                                                  "Bad line %u: need :\n",
-                                                  line);
-
-                               bcnt = strtok(NULL, "]");
-                               if (!bcnt)
-                                       exit_error(PARAMETER_PROBLEM,
-                                                  "Bad line %u: need ]\n",
-                                                  line);
-
-                               /* start command parsing after counter */
-                               parsestart = ptr + 1;
-                       } else {
-                               /* start command parsing at start of line */
-                               parsestart = buffer;
-                       }
-
-                       add_argv(argv[0]);
-                       add_argv("-t");
-                       add_argv((char *) &curtable);
-
-                       if (counters && pcnt && bcnt) {
-                               add_argv("--set-counters");
-                               add_argv((char *) pcnt);
-                               add_argv((char *) bcnt);
-                       }
-
-                       /* After fighting with strtok enough, here's now
-                        * a 'real' parser. According to Rusty I'm now no
-                        * longer a real hacker, but I can live with that */
-
-                       quote_open = 0;
-                       escaped = 0;
-                       param_len = 0;
-
-                       for (curchar = parsestart; *curchar; curchar++) {
-                               char param_buffer[1024];
-
-                               if (quote_open) {
-                                       if (escaped) {
-                                               param_buffer[param_len++] = *curchar;
-                                               escaped = 0;
-                                               continue;
-                                       } else if (*curchar == '\\') {
-                                               escaped = 1;
-                                               continue;
-                                       } else if (*curchar == '"') {
-                                               quote_open = 0;
-                                               *curchar = ' ';
-                                       } else {
-                                               param_buffer[param_len++] = *curchar;
-                                               continue;
-                                       }
-                               } else {
-                                       if (*curchar == '"') {
-                                               quote_open = 1;
-                                               continue;
-                                       }
-                               }
-
-                               if (*curchar == ' '
-                                   || *curchar == '\t'
-                                   || * curchar == '\n') {
-                                       if (!param_len) {
-                                               /* two spaces? */
-                                               continue;
-                                       }
-
-                                       param_buffer[param_len] = '\0';
-
-                                       /* check if table name specified */
-                                       if (!strncmp(param_buffer, "-t", 3)
-                                           || !strncmp(param_buffer, "--table", 8)) {
-                                               exit_error(PARAMETER_PROBLEM,
-                                                  "Line %u seems to have a "
-                                                  "-t table option.\n", line);
-                                               exit(1);
-                                       }
-
-                                       add_argv(param_buffer);
-                                       param_len = 0;
-                               } else {
-                                       /* regular character, copy to buffer */
-                                       param_buffer[param_len++] = *curchar;
-
-                                       if (param_len >= sizeof(param_buffer))
-                                               exit_error(PARAMETER_PROBLEM,
-                                                  "Parameter too long!");
-                               }
-                       }
-
-                       DEBUGP("calling do_command(%u, argv, &%s, handle):\n",
-                               newargc, curtable);
-
-                       for (a = 0; a < newargc; a++)
-                               DEBUGP("argv[%u]: %s\n", a, newargv[a]);
-
-                       ret = do_command(newargc, newargv,
-                                        &newargv[2], &handle);
-
-                       free_argv();
-                       fflush(stdout);
-               }
-               if (tablename && (strcmp(tablename, curtable) != 0))
-                       continue;
-               if (!ret) {
-                       fprintf(stderr, "%s: line %u failed\n",
-                                       program_name, line);
-                       exit(1);
-               }
-       }
-       if (in_table) {
-               fprintf(stderr, "%s: COMMIT expected at line %u\n",
-                               program_name, line + 1);
-               exit(1);
-       }
-
-       return 0;
-}
diff --git a/iptables-save.8 b/iptables-save.8
deleted file mode 100644 (file)
index f9c7d65..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-.TH IPTABLES-SAVE 8 "Jan 04, 2001" "" ""
-.\"
-.\" Man page written by Harald Welte <laforge@gnumonks.org>
-.\" It is based on the iptables man page.
-.\"
-.\"    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 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, write to the Free Software
-.\"    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-.\"
-.\"
-.SH NAME
-iptables-save \- Save IP Tables
-.SH SYNOPSIS
-.BR "iptables-save " "[-c] [-t table]"
-.br
-.SH DESCRIPTION
-.PP
-.B iptables-save
-is used to dump the contents of an IP Table in easily parseable format
-to STDOUT. Use I/O-redirection provided by your shell to write to a file.
-.TP
-\fB\-c\fR, \fB\-\-counters\fR
-include the current values of all packet and byte counters in the output
-.TP
-\fB\-t\fR, \fB\-\-table\fR \fBtablename\fR
-.TP
-restrict output to only one table. If not specified, output includes all
-available tables.
-.SH BUGS
-None known as of iptables-1.2.1 release
-.SH AUTHOR
-Harald Welte <laforge@gnumonks.org>
-.SH SEE ALSO
-.BR iptables-restore "(8), " iptables "(8) "
-.PP
-The iptables-HOWTO, which details more iptables usage, the NAT-HOWTO,
-which details NAT, and the netfilter-hacking-HOWTO which details the
-internals.
diff --git a/iptables-save.c b/iptables-save.c
deleted file mode 100644 (file)
index ecccac4..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-/* Code to save the iptables state, in human readable-form. */
-/* (C) 1999 by Paul 'Rusty' Russell <rusty@rustcorp.com.au> and
- * (C) 2000-2002 by Harald Welte <laforge@gnumonks.org>
- *
- * This code is distributed under the terms of GNU GPL v2
- *
- */
-#include <getopt.h>
-#include <sys/errno.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <netdb.h>
-#include "libiptc/libiptc.h"
-#include "iptables.h"
-#include "iptables-multi.h"
-
-#ifndef NO_SHARED_LIBS
-#include <dlfcn.h>
-#endif
-
-static int show_binary = 0, show_counters = 0;
-
-static const struct option options[] = {
-       {.name = "binary",   .has_arg = false, .val = 'b'},
-       {.name = "counters", .has_arg = false, .val = 'c'},
-       {.name = "dump",     .has_arg = false, .val = 'd'},
-       {.name = "table",    .has_arg = true,  .val = 't'},
-       {NULL},
-};
-
-/* Debugging prototype. */
-static int for_each_table(int (*func)(const char *tablename))
-{
-       int ret = 1;
-       FILE *procfile = NULL;
-       char tablename[IPT_TABLE_MAXNAMELEN+1];
-
-       procfile = fopen("/proc/net/ip_tables_names", "r");
-       if (!procfile)
-               exit_error(OTHER_PROBLEM,
-                          "Unable to open /proc/net/ip_tables_names: %s\n",
-                          strerror(errno));
-
-       while (fgets(tablename, sizeof(tablename), procfile)) {
-               if (tablename[strlen(tablename) - 1] != '\n')
-                       exit_error(OTHER_PROBLEM, 
-                                  "Badly formed tablename `%s'\n",
-                                  tablename);
-               tablename[strlen(tablename) - 1] = '\0';
-               ret &= func(tablename);
-       }
-
-       return ret;
-}
-
-
-static int do_output(const char *tablename)
-{
-       iptc_handle_t h;
-       const char *chain = NULL;
-
-       if (!tablename)
-               return for_each_table(&do_output);
-
-       h = iptc_init(tablename);
-       if (!h)
-               exit_error(OTHER_PROBLEM, "Can't initialize: %s\n",
-                          iptc_strerror(errno));
-
-       if (!show_binary) {
-               time_t now = time(NULL);
-
-               printf("# Generated by iptables-save v%s on %s",
-                      XTABLES_VERSION, ctime(&now));
-               printf("*%s\n", tablename);
-
-               /* Dump out chain names first,
-                * thereby preventing dependency conflicts */
-               for (chain = iptc_first_chain(&h);
-                    chain;
-                    chain = iptc_next_chain(&h)) {
-
-                       printf(":%s ", chain);
-                       if (iptc_builtin(chain, h)) {
-                               struct ipt_counters count;
-                               printf("%s ",
-                                      iptc_get_policy(chain, &count, &h));
-                               printf("[%llu:%llu]\n", (unsigned long long)count.pcnt, (unsigned long long)count.bcnt);
-                       } else {
-                               printf("- [0:0]\n");
-                       }
-               }
-
-
-               for (chain = iptc_first_chain(&h);
-                    chain;
-                    chain = iptc_next_chain(&h)) {
-                       const struct ipt_entry *e;
-
-                       /* Dump out rules */
-                       e = iptc_first_rule(chain, &h);
-                       while(e) {
-                               print_rule(e, &h, chain, show_counters);
-                               e = iptc_next_rule(e, &h);
-                       }
-               }
-
-               now = time(NULL);
-               printf("COMMIT\n");
-               printf("# Completed on %s", ctime(&now));
-       } else {
-               /* Binary, huh?  OK. */
-               exit_error(OTHER_PROBLEM, "Binary NYI\n");
-       }
-
-       iptc_free(&h);
-
-       return 1;
-}
-
-/* Format:
- * :Chain name POLICY packets bytes
- * rule
- */
-#ifdef IPTABLES_MULTI
-int
-iptables_save_main(int argc, char *argv[])
-#else
-int
-main(int argc, char *argv[])
-#endif
-{
-       const char *tablename = NULL;
-       int c;
-
-       program_name = "iptables-save";
-       program_version = XTABLES_VERSION;
-
-       lib_dir = getenv("XTABLES_LIBDIR");
-       if (lib_dir == NULL) {
-               lib_dir = getenv("IPTABLES_LIB_DIR");
-               if (lib_dir != NULL)
-                       fprintf(stderr, "IPTABLES_LIB_DIR is deprecated\n");
-       }
-       if (lib_dir == NULL)
-               lib_dir = XTABLES_LIBDIR;
-
-#ifdef NO_SHARED_LIBS
-       init_extensions();
-#endif
-
-       while ((c = getopt_long(argc, argv, "bcdt:", options, NULL)) != -1) {
-               switch (c) {
-               case 'b':
-                       show_binary = 1;
-                       break;
-
-               case 'c':
-                       show_counters = 1;
-                       break;
-
-               case 't':
-                       /* Select specific table. */
-                       tablename = optarg;
-                       break;
-               case 'd':
-                       do_output(tablename);
-                       exit(0);
-               }
-       }
-
-       if (optind < argc) {
-               fprintf(stderr, "Unknown arguments found on commandline\n");
-               exit(1);
-       }
-
-       return !do_output(tablename);
-}
diff --git a/iptables-standalone.c b/iptables-standalone.c
deleted file mode 100644 (file)
index 55d9bbe..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Author: Paul.Russell@rustcorp.com.au and mneuling@radlogic.com.au
- *
- * Based on the ipchains code by Paul Russell and Michael Neuling
- *
- * (C) 2000-2002 by the netfilter coreteam <coreteam@netfilter.org>:
- *                 Paul 'Rusty' Russell <rusty@rustcorp.com.au>
- *                 Marc Boucher <marc+nf@mbsi.ca>
- *                 James Morris <jmorris@intercode.com.au>
- *                 Harald Welte <laforge@gnumonks.org>
- *                 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
- *
- *     iptables -- IP firewall administration for kernels with
- *     firewall table (aimed for the 2.3 kernels)
- *
- *     See the accompanying manual page iptables(8) for information
- *     about proper usage of this program.
- *
- *     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 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, write to the Free Software
- *     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <string.h>
-#include <iptables.h>
-#include "iptables-multi.h"
-
-#ifdef IPTABLES_MULTI
-int
-iptables_main(int argc, char *argv[])
-#else
-int
-main(int argc, char *argv[])
-#endif
-{
-       int ret;
-       char *table = "filter";
-       iptc_handle_t handle = NULL;
-
-       program_name = "iptables";
-       program_version = XTABLES_VERSION;
-
-       lib_dir = getenv("XTABLES_LIBDIR");
-       if (lib_dir == NULL) {
-               lib_dir = getenv("IPTABLES_LIB_DIR");
-               if (lib_dir != NULL)
-                       fprintf(stderr, "IPTABLES_LIB_DIR is deprecated\n");
-       }
-       if (lib_dir == NULL)
-               lib_dir = XTABLES_LIBDIR;
-
-#ifdef NO_SHARED_LIBS
-       init_extensions();
-#endif
-
-       ret = do_command(argc, argv, &table, &handle);
-       if (ret)
-               ret = iptc_commit(&handle);
-
-       if (!ret) {
-               fprintf(stderr, "iptables: %s\n",
-                       iptc_strerror(errno));
-               if (errno == EAGAIN) {
-                       exit(RESOURCE_PROBLEM);
-               }
-       }
-
-       exit(!ret);
-}
diff --git a/iptables-xml.8 b/iptables-xml.8
deleted file mode 100644 (file)
index 705dc5e..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-.TH IPTABLES-XML 8 "Jul 16, 2007" "" ""
-.\"
-.\" Man page written by Sam Liddicott <azez@ufomechanic.net>
-.\" It is based on the iptables-save man page.
-.\"
-.\"    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 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, write to the Free Software
-.\"    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-.\"
-.\"
-.SH NAME
-iptables-xml \- Convert iptables-save format to XML
-.SH SYNOPSIS
-.BR "iptables-xml " "[-c] [-v]"
-.br
-.SH DESCRIPTION
-.PP
-.B iptables-xml
-is used to convert the output of iptables-save into an easily manipulatable
-XML format to STDOUT.  Use I/O-redirection provided by your shell to write to 
-a file.
-.TP
-\fB\-c\fR, \fB\-\-combine\fR
-combine consecutive rules with the same matches but different targets. iptables
-does not currently support more than one target per match, so this simulates 
-that by collecting the targets from consecutive iptables rules into one action
-tag, but only when the rule matches are identical. Terminating actions like
-RETURN, DROP, ACCEPT and QUEUE are not combined with subsequent targets.
-.TP
-\fB\-v\fR, \fB\-\-verbose\fR
-Output xml comments containing the iptables line from which the XML is derived
-
-.PP
-iptables-xml does a mechanistic conversion to a very expressive xml
-format; the only semantic considerations are for -g and -j targets in
-order to discriminate between <call> <goto> and <nane-of-target> as it
-helps xml processing scripts if they can tell the difference between a
-target like SNAT and another chain.
-
-Some sample output is:
-
-<iptables-rules>
-  <table name="mangle">
-    <chain name="PREROUTING" policy="ACCEPT" packet-count="63436"
-byte-count="7137573">
-      <rule>
-       <conditions>
-        <match>
-          <p>tcp</p>
-        </match>
-        <tcp>
-          <sport>8443</sport>
-        </tcp>
-       </conditions>
-       <actions>
-        <call>
-          <check_ip/>
-        </call>
-        <ACCEPT/>
-       </actions>
-      </rule>
-    </chain>
-  </table>
-</iptables-rules>
-
-.PP
-Conversion from XML to iptables-save format may be done using the 
-iptables.xslt script and xsltproc, or a custom program using
-libxsltproc or similar; in this fashion:
-
-xsltproc iptables.xslt my-iptables.xml | iptables-restore
-
-.SH BUGS
-None known as of iptables-1.3.7 release
-.SH AUTHOR
-Sam Liddicott <azez@ufomechanic.net>
-.SH SEE ALSO
-.BR iptables-save "(8), " iptables-restore "(8), " iptables "(8) "
-.PP
diff --git a/iptables-xml.c b/iptables-xml.c
deleted file mode 100644 (file)
index 8aee5c2..0000000
+++ /dev/null
@@ -1,888 +0,0 @@
-/* Code to convert iptables-save format to xml format,
- * (C) 2006 Ufo Mechanic <azez@ufomechanic.net>
- * based on iptables-restor (C) 2000-2002 by Harald Welte <laforge@gnumonks.org>
- * based on previous code from Rusty Russell <rusty@linuxcare.com.au>
- *
- * This code is distributed under the terms of GNU GPL v2
- *
- * $Id: iptables-xml.c,v 1.4 2006/11/09 12:02:17 azez Exp $
- */
-
-#include <getopt.h>
-#include <sys/errno.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include "iptables.h"
-#include "libiptc/libiptc.h"
-#include "iptables-multi.h"
-
-#ifdef DEBUG
-#define DEBUGP(x, args...) fprintf(stderr, x, ## args)
-#else
-#define DEBUGP(x, args...)
-#endif
-
-/* no need to link with iptables.o */
-const char *program_name;
-const char *program_version;
-
-#ifndef IPTABLES_MULTI
-int line = 0;
-void exit_error(enum exittype status, const char *msg, ...)
-{
-       va_list args;
-
-       va_start(args, msg);
-       fprintf(stderr, "%s v%s: ", program_name, program_version);
-       vfprintf(stderr, msg, args);
-       va_end(args);
-       fprintf(stderr, "\n");
-       /* On error paths, make sure that we don't leak memory */
-       exit(status);
-}
-#endif
-
-static void print_usage(const char *name, const char *version)
-           __attribute__ ((noreturn));
-
-static int verbose = 0;
-/* Whether to combine actions of sequential rules with identical conditions */
-static int combine = 0;
-/* Keeping track of external matches and targets.  */
-static struct option options[] = {
-       {"verbose", 0, NULL, 'v'},
-       {"combine", 0, NULL, 'c'},
-       {"help", 0, NULL, 'h'},
-       { .name = NULL }
-};
-
-static void
-print_usage(const char *name, const char *version)
-{
-       fprintf(stderr, "Usage: %s [-c] [-v] [-h]\n"
-               "          [--combine ]\n"
-               "          [ --verbose ]\n" "      [ --help ]\n", name);
-
-       exit(1);
-}
-
-static int
-parse_counters(char *string, struct ipt_counters *ctr)
-{
-       u_int64_t *pcnt, *bcnt;
-
-       if (string != NULL) {
-               pcnt = &ctr->pcnt;
-               bcnt = &ctr->bcnt;
-               return (sscanf
-                       (string, "[%llu:%llu]",
-                        (unsigned long long *)pcnt,
-                        (unsigned long long *)bcnt) == 2);
-       } else
-               return (0 == 2);
-}
-
-/* global new argv and argc */
-static char *newargv[255];
-static unsigned int newargc = 0;
-
-static char *oldargv[255];
-static unsigned int oldargc = 0;
-
-/* arg meta data, were they quoted, frinstance */
-static int newargvattr[255];
-
-#define IPT_CHAIN_MAXNAMELEN IPT_TABLE_MAXNAMELEN
-static char closeActionTag[IPT_TABLE_MAXNAMELEN + 1];
-static char closeRuleTag[IPT_TABLE_MAXNAMELEN + 1];
-static char curTable[IPT_TABLE_MAXNAMELEN + 1];
-static char curChain[IPT_CHAIN_MAXNAMELEN + 1];
-
-struct chain {
-       char *chain;
-       char *policy;
-       struct ipt_counters count;
-       int created;
-};
-
-#define maxChains 10240                /* max chains per table */
-static struct chain chains[maxChains];
-static int nextChain = 0;
-
-/* funCtion adding one argument to newargv, updating newargc 
- * returns true if argument added, false otherwise */
-static int
-add_argv(char *what, int quoted)
-{
-       DEBUGP("add_argv: %d %s\n", newargc, what);
-       if (what && ((newargc + 1) < sizeof(newargv) / sizeof(char *))) {
-               newargv[newargc] = strdup(what);
-               newargvattr[newargc] = quoted;
-               newargc++;
-               return 1;
-       } else
-               return 0;
-}
-
-static void
-free_argv(void)
-{
-       unsigned int i;
-
-       for (i = 0; i < newargc; i++) {
-               free(newargv[i]);
-               newargv[i] = NULL;
-       }
-       newargc = 0;
-
-       for (i = 0; i < oldargc; i++) {
-               free(oldargv[i]);
-               oldargv[i] = NULL;
-       }
-       oldargc = 0;
-}
-
-/* save parsed rule for comparison with next rule 
-   to perform action agregation on duplicate conditions */
-static void
-save_argv(void)
-{
-       unsigned int i;
-
-       for (i = 0; i < oldargc; i++)
-               free(oldargv[i]);
-       oldargc = newargc;
-       newargc = 0;
-       for (i = 0; i < oldargc; i++) {
-               oldargv[i] = newargv[i];
-               newargv[i] = NULL;
-       }
-}
-
-/* like puts but with xml encoding */
-static void
-xmlEncode(char *text)
-{
-       while (text && *text) {
-               if ((unsigned char) (*text) >= 127)
-                       printf("&#%d;", (unsigned char) (*text));
-               else if (*text == '&')
-                       printf("&amp;");
-               else if (*text == '<')
-                       printf("&lt;");
-               else if (*text == '>')
-                       printf("&gt;");
-               else if (*text == '"')
-                       printf("&quot;");
-               else
-                       putchar(*text);
-               text++;
-       }
-}
-
-/* Output text as a comment, avoiding a double hyphen */
-static void
-xmlCommentEscape(char *comment)
-{
-       int h_count = 0;
-
-       while (comment && *comment) {
-               if (*comment == '-') {
-                       h_count++;
-                       if (h_count >= 2) {
-                               h_count = 0;
-                               putchar(' ');
-                       }
-                       putchar('*');
-               }
-               /* strip trailing newline */
-               if (*comment == '\n' && *(comment + 1) == 0);
-               else
-                       putchar(*comment);
-               comment++;
-       }
-}
-
-static void
-xmlComment(char *comment)
-{
-       printf("<!-- ");
-       xmlCommentEscape(comment);
-       printf(" -->\n");
-}
-
-static void
-xmlAttrS(char *name, char *value)
-{
-       printf("%s=\"", name);
-       xmlEncode(value);
-       printf("\" ");
-}
-
-static void
-xmlAttrI(char *name, long long int num)
-{
-       printf("%s=\"%lld\" ", name, num);
-}
-
-static void
-closeChain(void)
-{
-       if (curChain[0] == 0)
-               return;
-
-       if (closeActionTag[0])
-               printf("%s\n", closeActionTag);
-       closeActionTag[0] = 0;
-       if (closeRuleTag[0])
-               printf("%s\n", closeRuleTag);
-       closeRuleTag[0] = 0;
-       if (curChain[0])
-               printf("    </chain>\n");
-       curChain[0] = 0;
-       //lastRule[0]=0;
-}
-
-static void
-openChain(char *chain, char *policy, struct ipt_counters *ctr, char close)
-{
-       closeChain();
-
-       strncpy(curChain, chain, IPT_CHAIN_MAXNAMELEN);
-       curChain[IPT_CHAIN_MAXNAMELEN] = '\0';
-
-       printf("    <chain ");
-       xmlAttrS("name", curChain);
-       if (strcmp(policy, "-") != 0)
-               xmlAttrS("policy", policy);
-       xmlAttrI("packet-count", (unsigned long long) ctr->pcnt);
-       xmlAttrI("byte-count", (unsigned long long) ctr->bcnt);
-       if (close) {
-               printf("%c", close);
-               curChain[0] = 0;
-       }
-       printf(">\n");
-}
-
-static int
-existsChain(char *chain)
-{
-       /* open a saved chain */
-       int c = 0;
-
-       if (0 == strcmp(curChain, chain))
-               return 1;
-       for (c = 0; c < nextChain; c++)
-               if (chains[c].chain && strcmp(chains[c].chain, chain) == 0)
-                       return 1;
-       return 0;
-}
-
-static void
-needChain(char *chain)
-{
-       /* open a saved chain */
-       int c = 0;
-
-       if (0 == strcmp(curChain, chain))
-               return;
-
-       for (c = 0; c < nextChain; c++)
-               if (chains[c].chain && strcmp(chains[c].chain, chain) == 0) {
-                       openChain(chains[c].chain, chains[c].policy,
-                                 &(chains[c].count), '\0');
-                       /* And, mark it as done so we don't create 
-                          an empty chain at table-end time */
-                       chains[c].created = 1;
-               }
-}
-
-static void
-saveChain(char *chain, char *policy, struct ipt_counters *ctr)
-{
-       if (nextChain >= maxChains) {
-               exit_error(PARAMETER_PROBLEM,
-                          "%s: line %u chain name invalid\n",
-                          program_name, line);
-               exit(1);
-       };
-       chains[nextChain].chain = strdup(chain);
-       chains[nextChain].policy = strdup(policy);
-       chains[nextChain].count = *ctr;
-       chains[nextChain].created = 0;
-       nextChain++;
-}
-
-static void
-finishChains(void)
-{
-       int c;
-
-       for (c = 0; c < nextChain; c++)
-               if (!chains[c].created) {
-                       openChain(chains[c].chain, chains[c].policy,
-                                 &(chains[c].count), '/');
-                       free(chains[c].chain);
-                       free(chains[c].policy);
-               }
-       nextChain = 0;
-}
-
-static void
-closeTable(void)
-{
-       closeChain();
-       finishChains();
-       if (curTable[0])
-               printf("  </table>\n");
-       curTable[0] = 0;
-}
-
-static void
-openTable(char *table)
-{
-       closeTable();
-
-       strncpy(curTable, table, IPT_TABLE_MAXNAMELEN);
-       curTable[IPT_TABLE_MAXNAMELEN] = '\0';
-
-       printf("  <table ");
-       xmlAttrS("name", curTable);
-       printf(">\n");
-}
-
-// is char* -j --jump -g or --goto
-static int
-isTarget(char *arg)
-{
-       return ((arg)
-               && (strcmp((arg), "-j") == 0 || strcmp((arg), "--jump") == 0
-                   || strcmp((arg), "-g") == 0
-                   || strcmp((arg), "--goto") == 0));
-}
-
-// is it a terminating target like -j ACCEPT, etc
-// (or I guess -j SNAT in nat table, but we don't check for that yet
-static int
-isTerminatingTarget(char *arg)
-{
-       return ((arg)
-               && (strcmp((arg), "ACCEPT") == 0
-                   || strcmp((arg), "DROP") == 0
-                   || strcmp((arg), "QUEUE") == 0
-                   || strcmp((arg), "RETURN") == 0));
-}
-
-// part=-1 means do conditions, part=1 means do rules, part=0 means do both
-static void
-do_rule_part(char *leveltag1, char *leveltag2, int part, int argc,
-            char *argv[], int argvattr[])
-{
-       int arg = 1;            // ignore leading -A
-       char invert_next = 0;
-       char *thisChain = NULL;
-       char *spacer = "";      // space when needed to assemble arguments
-       char *level1 = NULL;
-       char *level2 = NULL;
-       char *leveli1 = "        ";
-       char *leveli2 = "          ";
-
-#define CLOSE_LEVEL(LEVEL) \
-       do { \
-               if (level ## LEVEL) printf("</%s>\n", \
-               (leveltag ## LEVEL)?(leveltag ## LEVEL):(level ## LEVEL)); \
-               level ## LEVEL=NULL;\
-       } while(0)
-
-#define OPEN_LEVEL(LEVEL,TAG) \
-       do {\
-               level ## LEVEL=TAG;\
-               if (leveltag ## LEVEL) {\
-                       printf("%s<%s ", (leveli ## LEVEL), \
-                               (leveltag ## LEVEL));\
-                       xmlAttrS("type", (TAG)); \
-               } else printf("%s<%s ", (leveli ## LEVEL), (level ## LEVEL)); \
-       } while(0)
-
-       thisChain = argv[arg++];
-
-       if (part == 1) {        /* skip */
-               /* use argvattr to tell which arguments were quoted 
-                  to avoid comparing quoted arguments, like comments, to -j, */
-               while (arg < argc && (argvattr[arg] || !isTarget(argv[arg])))
-                       arg++;
-       }
-
-       /* Before we start, if the first arg is -[^-] and not -m or -j or -g 
-          then start a dummy <match> tag for old style built-in matches.  
-          We would do this in any case, but no need if it would be empty */
-       if (arg < argc && argv[arg][0] == '-' && !isTarget(argv[arg])
-           && strcmp(argv[arg], "-m") != 0) {
-               OPEN_LEVEL(1, "match");
-               printf(">\n");
-       }
-       while (arg < argc) {
-               // If ! is followed by -* then apply to that else output as data
-               // Stop, if we need to
-               if (part == -1 && !argvattr[arg] && (isTarget(argv[arg]))) {
-                       break;
-               } else if (!argvattr[arg] && strcmp(argv[arg], "!") == 0) {
-                       if ((arg + 1) < argc && argv[arg + 1][0] == '-')
-                               invert_next = '!';
-                       else
-                               printf("%s%s", spacer, argv[arg]);
-                       spacer = " ";
-               } else if (!argvattr[arg] && isTarget(argv[arg])
-                          && existsChain(argv[arg + 1])
-                          && (2 + arg >= argc)) {
-                       if (!((1 + arg) < argc))
-                               // no args to -j, -m or -g, ignore & finish loop
-                               break;
-                       CLOSE_LEVEL(2);
-                       if (level1)
-                               printf("%s", leveli1);
-                       CLOSE_LEVEL(1);
-                       spacer = "";
-                       invert_next = 0;
-                       if (strcmp(argv[arg], "-g") == 0
-                           || strcmp(argv[arg], "--goto") == 0) {
-                               /* goto user chain */
-                               OPEN_LEVEL(1, "goto");
-                               printf(">\n");
-                               arg++;
-                               OPEN_LEVEL(2, argv[arg]);
-                               printf("/>\n");
-                               level2 = NULL;
-                       } else {
-                               /* call user chain */
-                               OPEN_LEVEL(1, "call");
-                               printf(">\n");
-                               arg++;
-                               OPEN_LEVEL(2, argv[arg]);
-                               printf("/>\n");
-                               level2 = NULL;
-                       }
-               } else if (!argvattr[arg]
-                          && (isTarget(argv[arg])
-                              || strcmp(argv[arg], "-m") == 0
-                              || strcmp(argv[arg], "--module") == 0)) {
-                       if (!((1 + arg) < argc))
-                               // no args to -j, -m or -g, ignore & finish loop
-                               break;
-                       CLOSE_LEVEL(2);
-                       if (level1)
-                               printf("%s", leveli1);
-                       CLOSE_LEVEL(1);
-                       spacer = "";
-                       invert_next = 0;
-                       arg++;
-                       OPEN_LEVEL(1, (argv[arg]));
-                       // Optimize case, can we close this tag already?
-                       if ((arg + 1) >= argc || (!argvattr[arg + 1]
-                                                 && (isTarget(argv[arg + 1])
-                                                     || strcmp(argv[arg + 1],
-                                                               "-m") == 0
-                                                     || strcmp(argv[arg + 1],
-                                                               "--module") ==
-                                                     0))) {
-                               printf(" />\n");
-                               level1 = NULL;
-                       } else {
-                               printf(">\n");
-                       }
-               } else if (!argvattr[arg] && argv[arg][0] == '-') {
-                       char *tag;
-                       CLOSE_LEVEL(2);
-                       // Skip past any -
-                       tag = argv[arg];
-                       while (*tag == '-' && *tag)
-                               tag++;
-
-                       spacer = "";
-                       OPEN_LEVEL(2, tag);
-                       if (invert_next)
-                               printf(" invert=\"1\"");
-                       invert_next = 0;
-
-                       // Optimize case, can we close this tag already?
-                       if (!((arg + 1) < argc)
-                           || (argv[arg + 1][0] == '-' /* NOT QUOTED */ )) {
-                               printf(" />\n");
-                               level2 = NULL;
-                       } else {
-                               printf(">");
-                       }
-               } else {        // regular data
-                       char *spaces = strchr(argv[arg], ' ');
-                       printf("%s", spacer);
-                       if (spaces || argvattr[arg])
-                               printf("&quot;");
-                       // if argv[arg] contains a space, enclose in quotes
-                       xmlEncode(argv[arg]);
-                       if (spaces || argvattr[arg])
-                               printf("&quot;");
-                       spacer = " ";
-               }
-               arg++;
-       }
-       CLOSE_LEVEL(2);
-       if (level1)
-               printf("%s", leveli1);
-       CLOSE_LEVEL(1);
-
-       return;
-}
-
-static int
-compareRules(void)
-{
-       /* compare arguments up to -j or -g for match.
-          NOTE: We don't want to combine actions if there were no criteria 
-          in each rule, or rules didn't have an action 
-          NOTE: Depends on arguments being in some kind of "normal" order which 
-          is the case when processing the ACTUAL output of actual iptables-save 
-          rather than a file merely in a compatable format */
-
-       unsigned int old = 0;
-       unsigned int new = 0;
-
-       int compare = 0;
-
-       while (new < newargc && old < oldargc) {
-               if (isTarget(oldargv[old]) && isTarget(newargv[new])) {
-                       /* if oldarg was a terminating action then it makes no sense
-                        * to combine further actions into the same xml */
-                       if (((strcmp((oldargv[old]), "-j") == 0 
-                                       || strcmp((oldargv[old]), "--jump") == 0) 
-                               && old+1 < oldargc
-                               && isTerminatingTarget(oldargv[old+1]) )
-                           || strcmp((oldargv[old]), "-g") == 0 
-                           || strcmp((oldargv[old]), "--goto") == 0 ) {
-                               /* Previous rule had terminating action */      
-                               compare = 0;
-                       } else {
-                               compare = 1;
-                       }
-                       break;
-               }
-               // break when old!=new
-               if (strcmp(oldargv[old], newargv[new]) != 0) {
-                       compare = 0;
-                       break;
-               }
-
-               old++;
-               new++;
-       }
-       // We won't match unless both rules had a target. 
-       // This means we don't combine target-less rules, which is good
-
-       return compare == 1;
-}
-
-/* has a nice parsed rule starting with -A */
-static void
-do_rule(char *pcnt, char *bcnt, int argc, char *argv[], int argvattr[])
-{
-       /* are these conditions the same as the previous rule?
-        * If so, skip arg straight to -j or -g */
-       if (combine && argc > 2 && !isTarget(argv[2]) && compareRules()) {
-               xmlComment("Combine action from next rule");
-       } else {
-
-               if (closeActionTag[0]) {
-                       printf("%s\n", closeActionTag);
-                       closeActionTag[0] = 0;
-               }
-               if (closeRuleTag[0]) {
-                       printf("%s\n", closeRuleTag);
-                       closeRuleTag[0] = 0;
-               }
-
-               printf("      <rule ");
-               //xmlAttrS("table",curTable); // not needed in full mode 
-               //xmlAttrS("chain",argv[1]); // not needed in full mode 
-               if (pcnt)
-                       xmlAttrS("packet-count", pcnt);
-               if (bcnt)
-                       xmlAttrS("byte-count", bcnt);
-               printf(">\n");
-
-               strncpy(closeRuleTag, "      </rule>\n", IPT_TABLE_MAXNAMELEN);
-               closeRuleTag[IPT_TABLE_MAXNAMELEN] = '\0';
-
-               /* no point in writing out condition if there isn't one */
-               if (argc >= 3 && !isTarget(argv[2])) {
-                       printf("       <conditions>\n");
-                       do_rule_part(NULL, NULL, -1, argc, argv, argvattr);
-                       printf("       </conditions>\n");
-               }
-       }
-       /* Write out the action */
-       //do_rule_part("action","arg",1,argc,argv,argvattr);
-       if (!closeActionTag[0]) {
-               printf("       <actions>\n");
-               strncpy(closeActionTag, "       </actions>\n",
-                       IPT_TABLE_MAXNAMELEN);
-               closeActionTag[IPT_TABLE_MAXNAMELEN] = '\0';
-       }
-       do_rule_part(NULL, NULL, 1, argc, argv, argvattr);
-}
-
-
-#ifdef IPTABLES_MULTI
-int
-iptables_xml_main(int argc, char *argv[])
-#else
-int
-main(int argc, char *argv[])
-#endif
-{
-       char buffer[10240];
-       int c;
-       FILE *in;
-
-       program_name = "iptables-xml";
-       program_version = XTABLES_VERSION;
-       line = 0;
-
-       while ((c = getopt_long(argc, argv, "cvh", options, NULL)) != -1) {
-               switch (c) {
-               case 'c':
-                       combine = 1;
-                       break;
-               case 'v':
-                       printf("xptables-xml\n");
-                       verbose = 1;
-                       break;
-               case 'h':
-                       print_usage("iptables-xml", XTABLES_VERSION);
-                       break;
-               }
-       }
-
-       if (optind == argc - 1) {
-               in = fopen(argv[optind], "r");
-               if (!in) {
-                       fprintf(stderr, "Can't open %s: %s", argv[optind],
-                               strerror(errno));
-                       exit(1);
-               }
-       } else if (optind < argc) {
-               fprintf(stderr, "Unknown arguments found on commandline");
-               exit(1);
-       } else
-               in = stdin;
-
-       printf("<iptables-rules version=\"1.0\">\n");
-
-       /* Grab standard input. */
-       while (fgets(buffer, sizeof(buffer), in)) {
-               int ret = 0;
-
-               line++;
-
-               if (buffer[0] == '\n')
-                       continue;
-               else if (buffer[0] == '#') {
-                       xmlComment(buffer);
-                       continue;
-               }
-
-               if (verbose) {
-                       printf("<!-- line %d ", line);
-                       xmlCommentEscape(buffer);
-                       printf(" -->\n");
-               }
-
-               if ((strcmp(buffer, "COMMIT\n") == 0) && (curTable[0])) {
-                       DEBUGP("Calling commit\n");
-                       closeTable();
-                       ret = 1;
-               } else if ((buffer[0] == '*')) {
-                       /* New table */
-                       char *table;
-
-                       table = strtok(buffer + 1, " \t\n");
-                       DEBUGP("line %u, table '%s'\n", line, table);
-                       if (!table) {
-                               exit_error(PARAMETER_PROBLEM,
-                                          "%s: line %u table name invalid\n",
-                                          program_name, line);
-                               exit(1);
-                       }
-                       openTable(table);
-
-                       ret = 1;
-               } else if ((buffer[0] == ':') && (curTable[0])) {
-                       /* New chain. */
-                       char *policy, *chain;
-                       struct ipt_counters count;
-                       char *ctrs;
-
-                       chain = strtok(buffer + 1, " \t\n");
-                       DEBUGP("line %u, chain '%s'\n", line, chain);
-                       if (!chain) {
-                               exit_error(PARAMETER_PROBLEM,
-                                          "%s: line %u chain name invalid\n",
-                                          program_name, line);
-                               exit(1);
-                       }
-
-                       DEBUGP("Creating new chain '%s'\n", chain);
-
-                       policy = strtok(NULL, " \t\n");
-                       DEBUGP("line %u, policy '%s'\n", line, policy);
-                       if (!policy) {
-                               exit_error(PARAMETER_PROBLEM,
-                                          "%s: line %u policy invalid\n",
-                                          program_name, line);
-                               exit(1);
-                       }
-
-                       ctrs = strtok(NULL, " \t\n");
-                       parse_counters(ctrs, &count);
-                       saveChain(chain, policy, &count);
-
-                       ret = 1;
-               } else if (curTable[0]) {
-                       unsigned int a;
-                       char *ptr = buffer;
-                       char *pcnt = NULL;
-                       char *bcnt = NULL;
-                       char *parsestart;
-                       char *chain = NULL;
-
-                       /* the parser */
-                       char *param_start, *curchar;
-                       int quote_open, quoted;
-
-                       /* reset the newargv */
-                       newargc = 0;
-
-                       if (buffer[0] == '[') {
-                               /* we have counters in our input */
-                               ptr = strchr(buffer, ']');
-                               if (!ptr)
-                                       exit_error(PARAMETER_PROBLEM,
-                                                  "Bad line %u: need ]\n",
-                                                  line);
-
-                               pcnt = strtok(buffer + 1, ":");
-                               if (!pcnt)
-                                       exit_error(PARAMETER_PROBLEM,
-                                                  "Bad line %u: need :\n",
-                                                  line);
-
-                               bcnt = strtok(NULL, "]");
-                               if (!bcnt)
-                                       exit_error(PARAMETER_PROBLEM,
-                                                  "Bad line %u: need ]\n",
-                                                  line);
-
-                               /* start command parsing after counter */
-                               parsestart = ptr + 1;
-                       } else {
-                               /* start command parsing at start of line */
-                               parsestart = buffer;
-                       }
-
-
-                       /* This is a 'real' parser crafted in artist mode
-                        * not hacker mode. If the author can live with that
-                        * then so can everyone else */
-
-                       quote_open = 0;
-                       /* We need to know which args were quoted so we 
-                          can preserve quote */
-                       quoted = 0;
-                       param_start = parsestart;
-
-                       for (curchar = parsestart; *curchar; curchar++) {
-                               if (*curchar == '"') {
-                                       /* quote_open cannot be true if there
-                                        * was no previous character.  Thus, 
-                                        * curchar-1 has to be within bounds */
-                                       if (quote_open &&
-                                           *(curchar - 1) != '\\') {
-                                               quote_open = 0;
-                                               *curchar = ' ';
-                                       } else {
-                                               quote_open = 1;
-                                               quoted = 1;
-                                               param_start++;
-                                       }
-                               }
-                               if (*curchar == ' '
-                                   || *curchar == '\t' || *curchar == '\n') {
-                                       char param_buffer[1024];
-                                       int param_len = curchar - param_start;
-
-                                       if (quote_open)
-                                               continue;
-
-                                       if (!param_len) {
-                                               /* two spaces? */
-                                               param_start++;
-                                               continue;
-                                       }
-
-                                       /* end of one parameter */
-                                       strncpy(param_buffer, param_start,
-                                               param_len);
-                                       *(param_buffer + param_len) = '\0';
-
-                                       /* check if table name specified */
-                                       if (!strncmp(param_buffer, "-t", 3)
-                                           || !strncmp(param_buffer,
-                                                       "--table", 8)) {
-                                               exit_error(PARAMETER_PROBLEM,
-                                                          "Line %u seems to have a "
-                                                          "-t table option.\n",
-                                                          line);
-                                               exit(1);
-                                       }
-
-                                       add_argv(param_buffer, quoted);
-                                       if (newargc >= 2
-                                           && 0 ==
-                                           strcmp(newargv[newargc - 2], "-A"))
-                                               chain = newargv[newargc - 1];
-                                       quoted = 0;
-                                       param_start += param_len + 1;
-                               } else {
-                                       /* regular character, skip */
-                               }
-                       }
-
-                       DEBUGP("calling do_command(%u, argv, &%s, handle):\n",
-                              newargc, curTable);
-
-                       for (a = 0; a < newargc; a++)
-                               DEBUGP("argv[%u]: %s\n", a, newargv[a]);
-
-                       needChain(chain);// Should we explicitly look for -A
-                       do_rule(pcnt, bcnt, newargc, newargv, newargvattr);
-
-                       save_argv();
-                       ret = 1;
-               }
-               if (!ret) {
-                       fprintf(stderr, "%s: line %u failed\n",
-                               program_name, line);
-                       exit(1);
-               }
-       }
-       if (curTable[0]) {
-               fprintf(stderr, "%s: COMMIT expected at line %u\n",
-                       program_name, line + 1);
-               exit(1);
-       }
-
-       printf("</iptables-rules>\n");
-       free_argv();
-
-       return 0;
-}
diff --git a/iptables.8.in b/iptables.8.in
deleted file mode 100644 (file)
index 0b945cb..0000000
+++ /dev/null
@@ -1,502 +0,0 @@
-.TH IPTABLES 8 "Mar 09, 2002" "" ""
-.\"
-.\" Man page written by Herve Eychenne <rv@wallfire.org> (May 1999)
-.\" It is based on ipchains page.
-.\" TODO: add a word for protocol helpers (FTP, IRC, SNMP-ALG)
-.\"
-.\" ipchains page by Paul ``Rusty'' Russell March 1997
-.\" Based on the original ipfwadm man page by Jos Vos <jos@xos.nl>
-.\"
-.\"    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 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, write to the Free Software
-.\"    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-.\"
-.\"
-.SH NAME
-iptables \- administration tool for IPv4 packet filtering and NAT
-.SH SYNOPSIS
-.BR "iptables [-t table] -[AD] " "chain rule-specification [options]"
-.br
-.BR "iptables [-t table] -I " "chain [rulenum] rule-specification [options]"
-.br
-.BR "iptables [-t table] -R " "chain rulenum rule-specification [options]"
-.br
-.BR "iptables [-t table] -D " "chain rulenum [options]"
-.br
-.BR "iptables [-t table] -[LFZ] " "[chain] [options]"
-.br
-.BR "iptables [-t table] -N " "chain"
-.br
-.BR "iptables [-t table] -X " "[chain]"
-.br
-.BR "iptables [-t table] -P " "chain target [options]"
-.br
-.BR "iptables [-t table] -E " "old-chain-name new-chain-name"
-.SH DESCRIPTION
-.B Iptables
-is used to set up, maintain, and inspect the tables of IP packet
-filter rules in the Linux kernel.  Several different tables
-may be defined.  Each table contains a number of built-in
-chains and may also contain user-defined chains.
-
-Each chain is a list of rules which can match a set of packets.  Each
-rule specifies what to do with a packet that matches.  This is called
-a `target', which may be a jump to a user-defined chain in the same
-table.
-
-.SH TARGETS
-A firewall rule specifies criteria for a packet and a target.  If the
-packet does not match, the next rule in the chain is the examined; if
-it does match, then the next rule is specified by the value of the
-target, which can be the name of a user-defined chain or one of the
-special values 
-.IR ACCEPT ,
-.IR DROP ,
-.IR QUEUE ,
-or
-.IR RETURN .
-.PP
-.I ACCEPT 
-means to let the packet through.
-.I DROP
-means to drop the packet on the floor.
-.I QUEUE
-means to pass the packet to userspace.  (How the packet can be received
-by a userspace process differs by the particular queue handler.  2.4.x
-and 2.6.x kernels up to 2.6.13 include the 
-.B
-ip_queue
-queue handler.  Kernels 2.6.14 and later additionally include the 
-.B
-nfnetlink_queue
-queue handler.  Packets with a target of QUEUE will be sent to queue number '0'
-in this case. Please also see the
-.B
-NFQUEUE
-target as described later in this man page.)
-.I RETURN
-means stop traversing this chain and resume at the next rule in the
-previous (calling) chain.  If the end of a built-in chain is reached
-or a rule in a built-in chain with target
-.I RETURN
-is matched, the target specified by the chain policy determines the
-fate of the packet.
-.SH TABLES
-There are currently three independent tables (which tables are present
-at any time depends on the kernel configuration options and which
-modules are present).
-.TP
-.BI "-t, --table " "table"
-This option specifies the packet matching table which the command
-should operate on.  If the kernel is configured with automatic module
-loading, an attempt will be made to load the appropriate module for
-that table if it is not already there.
-
-The tables are as follows:
-.RS
-.TP .4i
-.BR "filter" :
-This is the default table (if no -t option is passed).  It contains
-the built-in chains
-.B INPUT
-(for packets destined to local sockets),
-.B FORWARD
-(for packets being routed through the box), and
-.B OUTPUT
-(for locally-generated packets).
-.TP
-.BR "nat" :
-This table is consulted when a packet that creates a new
-connection is encountered.  It consists of three built-ins:
-.B PREROUTING
-(for altering packets as soon as they come in),
-.B OUTPUT
-(for altering locally-generated packets before routing), and
-.B POSTROUTING
-(for altering packets as they are about to go out).
-.TP
-.BR "mangle" :
-This table is used for specialized packet alteration.  Until kernel
-2.4.17 it had two built-in chains:
-.B PREROUTING
-(for altering incoming packets before routing) and
-.B OUTPUT
-(for altering locally-generated packets before routing).
-Since kernel 2.4.18, three other built-in chains are also supported:
-.B INPUT
-(for packets coming into the box itself),
-.B FORWARD
-(for altering packets being routed through the box), and
-.B POSTROUTING
-(for altering packets as they are about to go out).
-.TP
-.BR "raw" :
-This table is used mainly for configuring exemptions from connection
-tracking in combination with the NOTRACK target.  It registers at the netfilter
-hooks with higher priority and is thus called before ip_conntrack, or any other
-IP tables.  It provides the following built-in chains:
-.B PREROUTING
-(for packets arriving via any network interface)
-.B OUTPUT
-(for packets generated by local processes)
-.RE
-.SH OPTIONS
-The options that are recognized by
-.B iptables
-can be divided into several different groups.
-.SS COMMANDS
-These options specify the desired action to perform. Only one of them
-can be specified on the command line unless otherwise stated
-below. For long versions of the command and option names, you
-need to use only enough letters to ensure that
-.B iptables
-can differentiate it from all other options.
-.TP
-.BI "-A, --append " "chain rule-specification"
-Append one or more rules to the end of the selected chain.
-When the source and/or destination names resolve to more than one
-address, a rule will be added for each possible address combination.
-.TP
-.BI "-D, --delete " "chain rule-specification"
-.ns
-.TP
-.BI "-D, --delete " "chain rulenum"
-Delete one or more rules from the selected chain.  There are two
-versions of this command: the rule can be specified as a number in the
-chain (starting at 1 for the first rule) or a rule to match.
-.TP
-.BR "-I, --insert " "\fIchain\fP [\fIrulenum\fP] \fIrule-specification\fP"
-Insert one or more rules in the selected chain as the given rule
-number.  So, if the rule number is 1, the rule or rules are inserted
-at the head of the chain.  This is also the default if no rule number
-is specified.
-.TP
-.BI "-R, --replace " "chain rulenum rule-specification"
-Replace a rule in the selected chain.  If the source and/or
-destination names resolve to multiple addresses, the command will
-fail.  Rules are numbered starting at 1.
-.TP
-.BR "-L, --list " "[\fIchain\fP]"
-List all rules in the selected chain.  If no chain is selected, all
-chains are listed. Like every other iptables command, it applies to the
-specified table (filter is the default), so NAT rules get listed by
-.nf
- iptables -t nat -n -L
-.fi
-Please note that it is often used with the
-.B -n
-option, in order to avoid long reverse DNS lookups.
-It is legal to specify the
-.B -Z
-(zero) option as well, in which case the chain(s) will be atomically
-listed and zeroed.  The exact output is affected by the other
-arguments given. The exact rules are suppressed until you use
-.nf
- iptables -L -v
-.fi
-.TP
-.BR "-S, --list-rules " "[\fIchain\fP]"
-Print all rules in the selected chain.  If no chain is selected, all
-chains are printed like iptables-save. Like every other iptables command,
-it applies to the specified table (filter is the default).
-.TP
-.BR "-F, --flush " "[\fIchain\fP]"
-Flush the selected chain (all the chains in the table if none is given).
-This is equivalent to deleting all the rules one by one.
-.TP
-.BR "-Z, --zero " "[\fIchain\fP]"
-Zero the packet and byte counters in all chains.  It is legal to
-specify the
-.B "-L, --list"
-(list) option as well, to see the counters immediately before they are
-cleared. (See above.)
-.TP
-.BI "-N, --new-chain " "chain"
-Create a new user-defined chain by the given name.  There must be no
-target of that name already.
-.TP
-.BR "-X, --delete-chain " "[\fIchain\fP]"
-Delete the optional user-defined chain specified.  There must be no references
-to the chain.  If there are, you must delete or replace the referring rules
-before the chain can be deleted.  The chain must be empty, i.e. not contain
-any rules.  If no argument is given, it will attempt to delete every
-non-builtin chain in the table.
-.TP
-.BI "-P, --policy " "chain target"
-Set the policy for the chain to the given target.  See the section
-.B TARGETS
-for the legal targets.  Only built-in (non-user-defined) chains can have
-policies, and neither built-in nor user-defined chains can be policy
-targets.
-.TP
-.BI "-E, --rename-chain " "old-chain new-chain"
-Rename the user specified chain to the user supplied name.  This is
-cosmetic, and has no effect on the structure of the table.
-.TP
-.B -h
-Help.
-Give a (currently very brief) description of the command syntax.
-.SS PARAMETERS
-The following parameters make up a rule specification (as used in the
-add, delete, insert, replace and append commands).
-.TP
-.BR "-p, --protocol " "[!] \fIprotocol\fP"
-The protocol of the rule or of the packet to check.
-The specified protocol can be one of
-.IR tcp ,
-.IR udp ,
-.IR icmp ,
-or
-.IR all ,
-or it can be a numeric value, representing one of these protocols or a
-different one.  A protocol name from /etc/protocols is also allowed.
-A "!" argument before the protocol inverts the
-test.  The number zero is equivalent to
-.IR all .
-Protocol
-.I all
-will match with all protocols and is taken as default when this
-option is omitted.
-.TP
-.BR "-s, --source " "[!] \fIaddress\fP[/\fImask\fP]"
-Source specification.
-.I Address
-can be either a network name, a hostname (please note that specifying
-any name to be resolved with a remote query such as DNS is a really bad idea),
-a network IP address (with /mask), or a plain IP address.
-The
-.I mask
-can be either a network mask or a plain number,
-specifying the number of 1's at the left side of the network mask.
-Thus, a mask of
-.I 24
-is equivalent to
-.IR 255.255.255.0 .
-A "!" argument before the address specification inverts the sense of
-the address. The flag
-.B --src
-is an alias for this option.
-.TP
-.BR "-d, --destination " "[!] \fIaddress\fP[/\fImask\fP]"
-Destination specification. 
-See the description of the
-.B -s
-(source) flag for a detailed description of the syntax.  The flag
-.B --dst
-is an alias for this option.
-.TP
-.BI "-j, --jump " "target"
-This specifies the target of the rule; i.e., what to do if the packet
-matches it.  The target can be a user-defined chain (other than the
-one this rule is in), one of the special builtin targets which decide
-the fate of the packet immediately, or an extension (see
-.B EXTENSIONS
-below).  If this
-option is omitted in a rule (and
-.B -g
-is not used), then matching the rule will have no
-effect on the packet's fate, but the counters on the rule will be
-incremented.
-.TP
-.BI "-g, --goto " "chain"
-This specifies that the processing should continue in a user
-specified chain. Unlike the --jump option return will not continue
-processing in this chain but instead in the chain that called us via
---jump.
-.TP
-.BR "-i, --in-interface " "[!] \fIname\fP"
-Name of an interface via which a packet was received (only for
-packets entering the 
-.BR INPUT ,
-.B FORWARD
-and
-.B PREROUTING
-chains).  When the "!" argument is used before the interface name, the
-sense is inverted.  If the interface name ends in a "+", then any
-interface which begins with this name will match.  If this option is
-omitted, any interface name will match.
-.TP
-.BR "-o, --out-interface " "[!] \fIname\fP"
-Name of an interface via which a packet is going to be sent (for packets
-entering the
-.BR FORWARD ,
-.B OUTPUT
-and
-.B POSTROUTING
-chains).  When the "!" argument is used before the interface name, the
-sense is inverted.  If the interface name ends in a "+", then any
-interface which begins with this name will match.  If this option is
-omitted, any interface name will match.
-.TP
-.B "[!] " "-f, --fragment"
-This means that the rule only refers to second and further fragments
-of fragmented packets.  Since there is no way to tell the source or
-destination ports of such a packet (or ICMP type), such a packet will
-not match any rules which specify them.  When the "!" argument
-precedes the "-f" flag, the rule will only match head fragments, or
-unfragmented packets.
-.TP
-.BI "-c, --set-counters " "PKTS BYTES"
-This enables the administrator to initialize the packet and byte
-counters of a rule (during
-.B INSERT,
-.B APPEND,
-.B REPLACE
-operations).
-.SS "OTHER OPTIONS"
-The following additional options can be specified:
-.TP
-.B "-v, --verbose"
-Verbose output.  This option makes the list command show the interface
-name, the rule options (if any), and the TOS masks.  The packet and
-byte counters are also listed, with the suffix 'K', 'M' or 'G' for
-1000, 1,000,000 and 1,000,000,000 multipliers respectively (but see
-the
-.B -x
-flag to change this).
-For appending, insertion, deletion and replacement, this causes
-detailed information on the rule or rules to be printed.
-.TP
-.B "-n, --numeric"
-Numeric output.
-IP addresses and port numbers will be printed in numeric format.
-By default, the program will try to display them as host names,
-network names, or services (whenever applicable).
-.TP
-.B "-x, --exact"
-Expand numbers.
-Display the exact value of the packet and byte counters,
-instead of only the rounded number in K's (multiples of 1000)
-M's (multiples of 1000K) or G's (multiples of 1000M).  This option is
-only relevant for the 
-.B -L
-command.
-.TP
-.B "--line-numbers"
-When listing rules, add line numbers to the beginning of each rule,
-corresponding to that rule's position in the chain.
-.TP
-.B "--modprobe=command"
-When adding or inserting rules into a chain, use
-.B command
-to load any necessary modules (targets, match extensions, etc).
-.SH MATCH EXTENSIONS
-iptables can use extended packet matching modules.  These are loaded
-in two ways: implicitly, when
-.B -p
-or
-.B --protocol
-is specified, or with the
-.B -m
-or
-.B --match
-options, followed by the matching module name; after these, various
-extra command line options become available, depending on the specific
-module.  You can specify multiple extended match modules in one line,
-and you can use the
-.B -h
-or
-.B --help
-options after the module has been specified to receive help specific
-to that module.
-
-The following are included in the base package, and most of these can
-be preceded by a
-.B !
-to invert the sense of the match.
-.\" @MATCH@
-.SH TARGET EXTENSIONS
-iptables can use extended target modules: the following are included
-in the standard distribution.
-.\" @TARGET@
-.SH DIAGNOSTICS
-Various error messages are printed to standard error.  The exit code
-is 0 for correct functioning.  Errors which appear to be caused by
-invalid or abused command line parameters cause an exit code of 2, and
-other errors cause an exit code of 1.
-.SH BUGS
-Bugs?  What's this? ;-)
-Well, you might want to have a look at http://bugzilla.netfilter.org/
-.SH COMPATIBILITY WITH IPCHAINS
-This
-.B iptables
-is very similar to ipchains by Rusty Russell.  The main difference is
-that the chains
-.B INPUT
-and
-.B OUTPUT
-are only traversed for packets coming into the local host and
-originating from the local host respectively.  Hence every packet only
-passes through one of the three chains (except loopback traffic, which
-involves both INPUT and OUTPUT chains); previously a forwarded packet
-would pass through all three.
-.PP
-The other main difference is that
-.B -i
-refers to the input interface;
-.B -o
-refers to the output interface, and both are available for packets
-entering the
-.B FORWARD
-chain.
-.PP The various forms of NAT have been separated out; 
-.B iptables 
-is a pure packet filter when using the default `filter' table, with
-optional extension modules.  This should simplify much of the previous
-confusion over the combination of IP masquerading and packet filtering
-seen previously.  So the following options are handled differently:
-.nf
- -j MASQ
- -M -S
- -M -L
-.fi
-There are several other changes in iptables.
-.SH SEE ALSO
-.BR iptables-save (8),
-.BR iptables-restore (8),
-.BR ip6tables (8),
-.BR ip6tables-save (8),
-.BR ip6tables-restore (8),
-.BR libipq (3).
-.P
-The packet-filtering-HOWTO details iptables usage for
-packet filtering, the NAT-HOWTO details NAT,
-the netfilter-extensions-HOWTO details the extensions that are
-not in the standard distribution,
-and the netfilter-hacking-HOWTO details the netfilter internals.
-.br
-See
-.BR "http://www.netfilter.org/" .
-.SH AUTHORS
-Rusty Russell originally wrote iptables, in early consultation with Michael
-Neuling.
-.PP
-Marc Boucher made Rusty abandon ipnatctl by lobbying for a generic packet
-selection framework in iptables, then wrote the mangle table, the owner match,
-the mark stuff, and ran around doing cool stuff everywhere.
-.PP
-James Morris wrote the TOS target, and tos match.
-.PP
-Jozsef Kadlecsik wrote the REJECT target.
-.PP
-Harald Welte wrote the ULOG and NFQUEUE target, the new libiptc, as well as the TTL, DSCP, ECN matches and targets.
-.PP
-The Netfilter Core Team is: Marc Boucher, Martin Josefsson, Yasuyuki Kozakai,
-Jozsef Kadlecsik, Patrick McHardy, James Morris, Pablo Neira Ayuso,
-Harald Welte and Rusty Russell.
-.PP
-Man page originally written by Herve Eychenne <rv@wallfire.org>.
-.\" .. and did I mention that we are incredibly cool people?
-.\" .. sexy, too ..
-.\" .. witty, charming, powerful ..
-.\" .. and most of all, modest ..
diff --git a/iptables.c b/iptables.c
deleted file mode 100644 (file)
index bf3cbca..0000000
+++ /dev/null
@@ -1,2145 +0,0 @@
-/* Code to take an iptables-style command line and do it. */
-
-/*
- * Author: Paul.Russell@rustcorp.com.au and mneuling@radlogic.com.au
- *
- * (C) 2000-2002 by the netfilter coreteam <coreteam@netfilter.org>:
- *                 Paul 'Rusty' Russell <rusty@rustcorp.com.au>
- *                 Marc Boucher <marc+nf@mbsi.ca>
- *                 James Morris <jmorris@intercode.com.au>
- *                 Harald Welte <laforge@gnumonks.org>
- *                 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
- *
- *     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 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, write to the Free Software
- *     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <getopt.h>
-#include <string.h>
-#include <netdb.h>
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <ctype.h>
-#include <stdarg.h>
-#include <limits.h>
-#include <unistd.h>
-#include <iptables.h>
-#include <xtables.h>
-#include <fcntl.h>
-#include <sys/utsname.h>
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-#define FMT_NUMERIC    0x0001
-#define FMT_NOCOUNTS   0x0002
-#define FMT_KILOMEGAGIGA 0x0004
-#define FMT_OPTIONS    0x0008
-#define FMT_NOTABLE    0x0010
-#define FMT_NOTARGET   0x0020
-#define FMT_VIA                0x0040
-#define FMT_NONEWLINE  0x0080
-#define FMT_LINENUMBERS 0x0100
-
-#define FMT_PRINT_RULE (FMT_NOCOUNTS | FMT_OPTIONS | FMT_VIA \
-                       | FMT_NUMERIC | FMT_NOTABLE)
-#define FMT(tab,notab) ((format) & FMT_NOTABLE ? (notab) : (tab))
-
-
-#define CMD_NONE               0x0000U
-#define CMD_INSERT             0x0001U
-#define CMD_DELETE             0x0002U
-#define CMD_DELETE_NUM         0x0004U
-#define CMD_REPLACE            0x0008U
-#define CMD_APPEND             0x0010U
-#define CMD_LIST               0x0020U
-#define CMD_FLUSH              0x0040U
-#define CMD_ZERO               0x0080U
-#define CMD_NEW_CHAIN          0x0100U
-#define CMD_DELETE_CHAIN       0x0200U
-#define CMD_SET_POLICY         0x0400U
-#define CMD_RENAME_CHAIN       0x0800U
-#define CMD_LIST_RULES         0x1000U
-#define NUMBER_OF_CMD  14
-static const char cmdflags[] = { 'I', 'D', 'D', 'R', 'A', 'L', 'F', 'Z',
-                                'N', 'X', 'P', 'E', 'S' };
-
-#define OPTION_OFFSET 256
-
-#define OPT_NONE       0x00000U
-#define OPT_NUMERIC    0x00001U
-#define OPT_SOURCE     0x00002U
-#define OPT_DESTINATION        0x00004U
-#define OPT_PROTOCOL   0x00008U
-#define OPT_JUMP       0x00010U
-#define OPT_VERBOSE    0x00020U
-#define OPT_EXPANDED   0x00040U
-#define OPT_VIANAMEIN  0x00080U
-#define OPT_VIANAMEOUT 0x00100U
-#define OPT_FRAGMENT    0x00200U
-#define OPT_LINENUMBERS 0x00400U
-#define OPT_COUNTERS   0x00800U
-#define NUMBER_OF_OPT  12
-static const char optflags[NUMBER_OF_OPT]
-= { 'n', 's', 'd', 'p', 'j', 'v', 'x', 'i', 'o', 'f', '0', 'c'};
-
-static struct option original_opts[] = {
-       {.name = "append",        .has_arg = 1, .val = 'A'},
-       {.name = "delete",        .has_arg = 1, .val = 'D'},
-       {.name = "insert",        .has_arg = 1, .val = 'I'},
-       {.name = "replace",       .has_arg = 1, .val = 'R'},
-       {.name = "list",          .has_arg = 2, .val = 'L'},
-       {.name = "list-rules",    .has_arg = 2, .val = 'S'},
-       {.name = "flush",         .has_arg = 2, .val = 'F'},
-       {.name = "zero",          .has_arg = 2, .val = 'Z'},
-       {.name = "new-chain",     .has_arg = 1, .val = 'N'},
-       {.name = "delete-chain",  .has_arg = 2, .val = 'X'},
-       {.name = "rename-chain",  .has_arg = 1, .val = 'E'},
-       {.name = "policy",        .has_arg = 1, .val = 'P'},
-       {.name = "source",        .has_arg = 1, .val = 's'},
-       {.name = "destination",   .has_arg = 1, .val = 'd'},
-       {.name = "src",           .has_arg = 1, .val = 's'}, /* synonym */
-       {.name = "dst",           .has_arg = 1, .val = 'd'}, /* synonym */
-       {.name = "protocol",      .has_arg = 1, .val = 'p'},
-       {.name = "in-interface",  .has_arg = 1, .val = 'i'},
-       {.name = "jump",          .has_arg = 1, .val = 'j'},
-       {.name = "table",         .has_arg = 1, .val = 't'},
-       {.name = "match",         .has_arg = 1, .val = 'm'},
-       {.name = "numeric",       .has_arg = 0, .val = 'n'},
-       {.name = "out-interface", .has_arg = 1, .val = 'o'},
-       {.name = "verbose",       .has_arg = 0, .val = 'v'},
-       {.name = "exact",         .has_arg = 0, .val = 'x'},
-       {.name = "fragments",     .has_arg = 0, .val = 'f'},
-       {.name = "version",       .has_arg = 0, .val = 'V'},
-       {.name = "help",          .has_arg = 2, .val = 'h'},
-       {.name = "line-numbers",  .has_arg = 0, .val = '0'},
-       {.name = "modprobe",      .has_arg = 1, .val = 'M'},
-       {.name = "set-counters",  .has_arg = 1, .val = 'c'},
-       {.name = "goto",          .has_arg = 1, .val = 'g'},
-       {NULL},
-};
-
-/* we need this for iptables-restore.  iptables-restore.c sets line to the
- * current line of the input file, in order  to give a more precise error
- * message.  iptables itself doesn't need this, so it is initialized to the
- * magic number of -1 */
-int line = -1;
-
-static struct option *opts = original_opts;
-static unsigned int global_option_offset = 0;
-
-/* Table of legal combinations of commands and options.  If any of the
- * given commands make an option legal, that option is legal (applies to
- * CMD_LIST and CMD_ZERO only).
- * Key:
- *  +  compulsory
- *  x  illegal
- *     optional
- */
-
-static char commands_v_options[NUMBER_OF_CMD][NUMBER_OF_OPT] =
-/* Well, it's better than "Re: Linux vs FreeBSD" */
-{
-       /*     -n  -s  -d  -p  -j  -v  -x  -i  -o  -f --line -c */
-/*INSERT*/    {'x',' ',' ',' ',' ',' ','x',' ',' ',' ','x',' '},
-/*DELETE*/    {'x',' ',' ',' ',' ',' ','x',' ',' ',' ','x','x'},
-/*DELETE_NUM*/{'x','x','x','x','x',' ','x','x','x','x','x','x'},
-/*REPLACE*/   {'x',' ',' ',' ',' ',' ','x',' ',' ',' ','x',' '},
-/*APPEND*/    {'x',' ',' ',' ',' ',' ','x',' ',' ',' ','x',' '},
-/*LIST*/      {' ','x','x','x','x',' ',' ','x','x','x',' ','x'},
-/*FLUSH*/     {'x','x','x','x','x',' ','x','x','x','x','x','x'},
-/*ZERO*/      {'x','x','x','x','x',' ','x','x','x','x','x','x'},
-/*NEW_CHAIN*/ {'x','x','x','x','x',' ','x','x','x','x','x','x'},
-/*DEL_CHAIN*/ {'x','x','x','x','x',' ','x','x','x','x','x','x'},
-/*SET_POLICY*/{'x','x','x','x','x',' ','x','x','x','x','x',' '},
-/*RENAME*/    {'x','x','x','x','x',' ','x','x','x','x','x','x'},
-/*LIST_RULES*/{'x','x','x','x','x',' ','x','x','x','x','x','x'}
-};
-
-static int inverse_for_options[NUMBER_OF_OPT] =
-{
-/* -n */ 0,
-/* -s */ IPT_INV_SRCIP,
-/* -d */ IPT_INV_DSTIP,
-/* -p */ IPT_INV_PROTO,
-/* -j */ 0,
-/* -v */ 0,
-/* -x */ 0,
-/* -i */ IPT_INV_VIA_IN,
-/* -o */ IPT_INV_VIA_OUT,
-/* -f */ IPT_INV_FRAG,
-/*--line*/ 0,
-/* -c */ 0,
-};
-
-const char *program_version;
-const char *program_name;
-
-int kernel_version;
-
-/* A few hardcoded protocols for 'all' and in case the user has no
-   /etc/protocols */
-struct pprot {
-       char *name;
-       u_int8_t num;
-};
-
-struct afinfo afinfo = {
-       .family         = AF_INET,
-       .libprefix      = "libipt_",
-       .ipproto        = IPPROTO_IP,
-       .kmod           = "ip_tables",
-       .so_rev_match   = IPT_SO_GET_REVISION_MATCH,
-       .so_rev_target  = IPT_SO_GET_REVISION_TARGET,
-};
-
-/* Primitive headers... */
-/* defined in netinet/in.h */
-#if 0
-#ifndef IPPROTO_ESP
-#define IPPROTO_ESP 50
-#endif
-#ifndef IPPROTO_AH
-#define IPPROTO_AH 51
-#endif
-#endif
-
-static const struct pprot chain_protos[] = {
-       { "tcp", IPPROTO_TCP },
-       { "udp", IPPROTO_UDP },
-       { "udplite", IPPROTO_UDPLITE },
-       { "icmp", IPPROTO_ICMP },
-       { "esp", IPPROTO_ESP },
-       { "ah", IPPROTO_AH },
-       { "sctp", IPPROTO_SCTP },
-       { "all", 0 },
-};
-
-static char *
-proto_to_name(u_int8_t proto, int nolookup)
-{
-       unsigned int i;
-
-       if (proto && !nolookup) {
-               struct protoent *pent = getprotobynumber(proto);
-               if (pent)
-                       return pent->p_name;
-       }
-
-       for (i = 0; i < sizeof(chain_protos)/sizeof(struct pprot); i++)
-               if (chain_protos[i].num == proto)
-                       return chain_protos[i].name;
-
-       return NULL;
-}
-
-enum {
-       IPT_DOTTED_ADDR = 0,
-       IPT_DOTTED_MASK
-};
-
-static void free_opts(int reset_offset)
-{
-       if (opts != original_opts) {
-               free(opts);
-               opts = original_opts;
-               if (reset_offset)
-                       global_option_offset = 0;
-       }
-}
-
-static void
-exit_tryhelp(int status)
-{
-       if (line != -1)
-               fprintf(stderr, "Error occurred at line: %d\n", line);
-       fprintf(stderr, "Try `%s -h' or '%s --help' for more information.\n",
-                       program_name, program_name );
-       free_opts(1);
-       exit(status);
-}
-
-static void
-exit_printhelp(struct iptables_rule_match *matches)
-{
-       struct iptables_rule_match *matchp = NULL;
-       struct xtables_target *t = NULL;
-
-       printf("%s v%s\n\n"
-"Usage: %s -[AD] chain rule-specification [options]\n"
-"       %s -[RI] chain rulenum rule-specification [options]\n"
-"       %s -D chain rulenum [options]\n"
-"       %s -[LS] [chain [rulenum]] [options]\n"
-"       %s -[FZ] [chain] [options]\n"
-"       %s -[NX] chain\n"
-"       %s -E old-chain-name new-chain-name\n"
-"       %s -P chain target [options]\n"
-"       %s -h (print this help information)\n\n",
-              program_name, program_version, program_name, program_name,
-              program_name, program_name, program_name, program_name,
-              program_name, program_name, program_name);
-
-       printf(
-"Commands:\n"
-"Either long or short options are allowed.\n"
-"  --append  -A chain          Append to chain\n"
-"  --delete  -D chain          Delete matching rule from chain\n"
-"  --delete  -D chain rulenum\n"
-"                              Delete rule rulenum (1 = first) from chain\n"
-"  --insert  -I chain [rulenum]\n"
-"                              Insert in chain as rulenum (default 1=first)\n"
-"  --replace -R chain rulenum\n"
-"                              Replace rule rulenum (1 = first) in chain\n"
-"  --list    -L [chain [rulenum]]\n"
-"                              List the rules in a chain or all chains\n"
-"  --list-rules -S [chain [rulenum]]\n"
-"                              Print the rules in a chain or all chains\n"
-"  --flush   -F [chain]                Delete all rules in  chain or all chains\n"
-"  --zero    -Z [chain]                Zero counters in chain or all chains\n"
-"  --new     -N chain          Create a new user-defined chain\n"
-"  --delete-chain\n"
-"            -X [chain]                Delete a user-defined chain\n"
-"  --policy  -P chain target\n"
-"                              Change policy on chain to target\n"
-"  --rename-chain\n"
-"            -E old-chain new-chain\n"
-"                              Change chain name, (moving any references)\n"
-
-"Options:\n"
-"  --proto     -p [!] proto    protocol: by number or name, eg. `tcp'\n"
-"  --source    -s [!] address[/mask]\n"
-"                              source specification\n"
-"  --destination -d [!] address[/mask]\n"
-"                              destination specification\n"
-"  --in-interface -i [!] input name[+]\n"
-"                              network interface name ([+] for wildcard)\n"
-"  --jump      -j target\n"
-"                              target for rule (may load target extension)\n"
-#ifdef IPT_F_GOTO
-"  --goto      -g chain\n"
-"                              jump to chain with no return\n"
-#endif
-"  --match     -m match\n"
-"                              extended match (may load extension)\n"
-"  --numeric   -n              numeric output of addresses and ports\n"
-"  --out-interface -o [!] output name[+]\n"
-"                              network interface name ([+] for wildcard)\n"
-"  --table     -t table        table to manipulate (default: `filter')\n"
-"  --verbose   -v              verbose mode\n"
-"  --line-numbers              print line numbers when listing\n"
-"  --exact     -x              expand numbers (display exact values)\n"
-"[!] --fragment        -f              match second or further fragments only\n"
-"  --modprobe=<command>                try to insert modules using this command\n"
-"  --set-counters PKTS BYTES   set the counter during insert/append\n"
-"[!] --version -V              print package version.\n");
-
-       /* Print out any special helps. A user might like to be able
-          to add a --help to the commandline, and see expected
-          results. So we call help for all specified matches & targets */
-       for (t = xtables_targets; t ;t = t->next) {
-               if (t->used) {
-                       printf("\n");
-                       t->help();
-               }
-       }
-       for (matchp = matches; matchp; matchp = matchp->next) {
-               printf("\n");
-               matchp->match->help();
-       }
-       exit(0);
-}
-
-void
-exit_error(enum exittype status, const char *msg, ...)
-{
-       va_list args;
-
-       va_start(args, msg);
-       fprintf(stderr, "%s v%s: ", program_name, program_version);
-       vfprintf(stderr, msg, args);
-       va_end(args);
-       fprintf(stderr, "\n");
-       if (status == PARAMETER_PROBLEM)
-               exit_tryhelp(status);
-       if (status == VERSION_PROBLEM)
-               fprintf(stderr,
-                       "Perhaps iptables or your kernel needs to be upgraded.\n");
-       /* On error paths, make sure that we don't leak memory */
-       free_opts(1);
-       exit(status);
-}
-
-static void
-generic_opt_check(int command, int options)
-{
-       int i, j, legal = 0;
-
-       /* Check that commands are valid with options.  Complicated by the
-        * fact that if an option is legal with *any* command given, it is
-        * legal overall (ie. -z and -l).
-        */
-       for (i = 0; i < NUMBER_OF_OPT; i++) {
-               legal = 0; /* -1 => illegal, 1 => legal, 0 => undecided. */
-
-               for (j = 0; j < NUMBER_OF_CMD; j++) {
-                       if (!(command & (1<<j)))
-                               continue;
-
-                       if (!(options & (1<<i))) {
-                               if (commands_v_options[j][i] == '+')
-                                       exit_error(PARAMETER_PROBLEM,
-                                                  "You need to supply the `-%c' "
-                                                  "option for this command\n",
-                                                  optflags[i]);
-                       } else {
-                               if (commands_v_options[j][i] != 'x')
-                                       legal = 1;
-                               else if (legal == 0)
-                                       legal = -1;
-                       }
-               }
-               if (legal == -1)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Illegal option `-%c' with this command\n",
-                                  optflags[i]);
-       }
-}
-
-static char
-opt2char(int option)
-{
-       const char *ptr;
-       for (ptr = optflags; option > 1; option >>= 1, ptr++);
-
-       return *ptr;
-}
-
-static char
-cmd2char(int option)
-{
-       const char *ptr;
-       for (ptr = cmdflags; option > 1; option >>= 1, ptr++);
-
-       return *ptr;
-}
-
-static void
-add_command(unsigned int *cmd, const int newcmd, const int othercmds, 
-           int invert)
-{
-       if (invert)
-               exit_error(PARAMETER_PROBLEM, "unexpected ! flag");
-       if (*cmd & (~othercmds))
-               exit_error(PARAMETER_PROBLEM, "Can't use -%c with -%c\n",
-                          cmd2char(newcmd), cmd2char(*cmd & (~othercmds)));
-       *cmd |= newcmd;
-}
-
-int
-check_inverse(const char option[], int *invert, int *my_optind, int argc)
-{
-       if (option && strcmp(option, "!") == 0) {
-               if (*invert)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Multiple `!' flags not allowed");
-               *invert = TRUE;
-               if (my_optind != NULL) {
-                       ++*my_optind;
-                       if (argc && *my_optind > argc)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "no argument following `!'");
-               }
-
-               return TRUE;
-       }
-       return FALSE;
-}
-
-/*
- *     All functions starting with "parse" should succeed, otherwise
- *     the program fails.
- *     Most routines return pointers to static data that may change
- *     between calls to the same or other routines with a few exceptions:
- *     "host_to_addr", "parse_hostnetwork", and "parse_hostnetworkmask"
- *     return global static data.
-*/
-
-/* Christophe Burki wants `-p 6' to imply `-m tcp'.  */
-static struct xtables_match *
-find_proto(const char *pname, enum ipt_tryload tryload, int nolookup, struct iptables_rule_match **matches)
-{
-       unsigned int proto;
-
-       if (string_to_number(pname, 0, 255, &proto) != -1) {
-               char *protoname = proto_to_name(proto, nolookup);
-
-               if (protoname)
-                       return find_match(protoname, tryload, matches);
-       } else
-               return find_match(pname, tryload, matches);
-
-       return NULL;
-}
-
-u_int16_t
-parse_protocol(const char *s)
-{
-       unsigned int proto;
-
-       if (string_to_number(s, 0, 255, &proto) == -1) {
-               struct protoent *pent;
-
-               /* first deal with the special case of 'all' to prevent
-                * people from being able to redefine 'all' in nsswitch
-                * and/or provoke expensive [not working] ldap/nis/... 
-                * lookups */
-               if (!strcmp(s, "all"))
-                       return 0;
-
-               if ((pent = getprotobyname(s)))
-                       proto = pent->p_proto;
-               else {
-                       unsigned int i;
-                       for (i = 0;
-                            i < sizeof(chain_protos)/sizeof(struct pprot);
-                            i++) {
-                               if (strcmp(s, chain_protos[i].name) == 0) {
-                                       proto = chain_protos[i].num;
-                                       break;
-                               }
-                       }
-                       if (i == sizeof(chain_protos)/sizeof(struct pprot))
-                               exit_error(PARAMETER_PROBLEM,
-                                          "unknown protocol `%s' specified",
-                                          s);
-               }
-       }
-
-       return (u_int16_t)proto;
-}
-
-/* Can't be zero. */
-static int
-parse_rulenumber(const char *rule)
-{
-       unsigned int rulenum;
-
-       if (string_to_number(rule, 1, INT_MAX, &rulenum) == -1)
-               exit_error(PARAMETER_PROBLEM,
-                          "Invalid rule number `%s'", rule);
-
-       return rulenum;
-}
-
-static const char *
-parse_target(const char *targetname)
-{
-       const char *ptr;
-
-       if (strlen(targetname) < 1)
-               exit_error(PARAMETER_PROBLEM,
-                          "Invalid target name (too short)");
-
-       if (strlen(targetname)+1 > sizeof(ipt_chainlabel))
-               exit_error(PARAMETER_PROBLEM,
-                          "Invalid target name `%s' (%u chars max)",
-                          targetname, (unsigned int)sizeof(ipt_chainlabel)-1);
-
-       for (ptr = targetname; *ptr; ptr++)
-               if (isspace(*ptr))
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Invalid target name `%s'", targetname);
-       return targetname;
-}
-
-static void
-set_option(unsigned int *options, unsigned int option, u_int8_t *invflg,
-          int invert)
-{
-       if (*options & option)
-               exit_error(PARAMETER_PROBLEM, "multiple -%c flags not allowed",
-                          opt2char(option));
-       *options |= option;
-
-       if (invert) {
-               unsigned int i;
-               for (i = 0; 1 << i != option; i++);
-
-               if (!inverse_for_options[i])
-                       exit_error(PARAMETER_PROBLEM,
-                                  "cannot have ! before -%c",
-                                  opt2char(option));
-               *invflg |= inverse_for_options[i];
-       }
-}
-
-static struct option *
-merge_options(struct option *oldopts, const struct option *newopts,
-             unsigned int *option_offset)
-{
-       unsigned int num_old, num_new, i;
-       struct option *merge;
-
-       if (newopts == NULL)
-               return oldopts;
-
-       for (num_old = 0; oldopts[num_old].name; num_old++);
-       for (num_new = 0; newopts[num_new].name; num_new++);
-
-       global_option_offset += OPTION_OFFSET;
-       *option_offset = global_option_offset;
-
-       merge = malloc(sizeof(struct option) * (num_new + num_old + 1));
-       if (merge == NULL)
-               return NULL;
-       memcpy(merge, oldopts, num_old * sizeof(struct option));
-       free_opts(0); /* Release previous options merged if any */
-       for (i = 0; i < num_new; i++) {
-               merge[num_old + i] = newopts[i];
-               merge[num_old + i].val += *option_offset;
-       }
-       memset(merge + num_old + num_new, 0, sizeof(struct option));
-
-       return merge;
-}
-
-static void
-print_num(u_int64_t number, unsigned int format)
-{
-       if (format & FMT_KILOMEGAGIGA) {
-               if (number > 99999) {
-                       number = (number + 500) / 1000;
-                       if (number > 9999) {
-                               number = (number + 500) / 1000;
-                               if (number > 9999) {
-                                       number = (number + 500) / 1000;
-                                       if (number > 9999) {
-                                               number = (number + 500) / 1000;
-                                               printf(FMT("%4lluT ","%lluT "), (unsigned long long)number);
-                                       }
-                                       else printf(FMT("%4lluG ","%lluG "), (unsigned long long)number);
-                               }
-                               else printf(FMT("%4lluM ","%lluM "), (unsigned long long)number);
-                       } else
-                               printf(FMT("%4lluK ","%lluK "), (unsigned long long)number);
-               } else
-                       printf(FMT("%5llu ","%llu "), (unsigned long long)number);
-       } else
-               printf(FMT("%8llu ","%llu "), (unsigned long long)number);
-}
-
-
-static void
-print_header(unsigned int format, const char *chain, iptc_handle_t *handle)
-{
-       struct ipt_counters counters;
-       const char *pol = iptc_get_policy(chain, &counters, handle);
-       printf("Chain %s", chain);
-       if (pol) {
-               printf(" (policy %s", pol);
-               if (!(format & FMT_NOCOUNTS)) {
-                       fputc(' ', stdout);
-                       print_num(counters.pcnt, (format|FMT_NOTABLE));
-                       fputs("packets, ", stdout);
-                       print_num(counters.bcnt, (format|FMT_NOTABLE));
-                       fputs("bytes", stdout);
-               }
-               printf(")\n");
-       } else {
-               unsigned int refs;
-               if (!iptc_get_references(&refs, chain, handle))
-                       printf(" (ERROR obtaining refs)\n");
-               else
-                       printf(" (%u references)\n", refs);
-       }
-
-       if (format & FMT_LINENUMBERS)
-               printf(FMT("%-4s ", "%s "), "num");
-       if (!(format & FMT_NOCOUNTS)) {
-               if (format & FMT_KILOMEGAGIGA) {
-                       printf(FMT("%5s ","%s "), "pkts");
-                       printf(FMT("%5s ","%s "), "bytes");
-               } else {
-                       printf(FMT("%8s ","%s "), "pkts");
-                       printf(FMT("%10s ","%s "), "bytes");
-               }
-       }
-       if (!(format & FMT_NOTARGET))
-               printf(FMT("%-9s ","%s "), "target");
-       fputs(" prot ", stdout);
-       if (format & FMT_OPTIONS)
-               fputs("opt", stdout);
-       if (format & FMT_VIA) {
-               printf(FMT(" %-6s ","%s "), "in");
-               printf(FMT("%-6s ","%s "), "out");
-       }
-       printf(FMT(" %-19s ","%s "), "source");
-       printf(FMT(" %-19s "," %s "), "destination");
-       printf("\n");
-}
-
-
-static int
-print_match(const struct ipt_entry_match *m,
-           const struct ipt_ip *ip,
-           int numeric)
-{
-       struct xtables_match *match = find_match(m->u.user.name, TRY_LOAD, NULL);
-
-       if (match) {
-               if (match->print)
-                       match->print(ip, m, numeric);
-               else
-                       printf("%s ", match->name);
-       } else {
-               if (m->u.user.name[0])
-                       printf("UNKNOWN match `%s' ", m->u.user.name);
-       }
-       /* Don't stop iterating. */
-       return 0;
-}
-
-/* e is called `fw' here for historical reasons */
-static void
-print_firewall(const struct ipt_entry *fw,
-              const char *targname,
-              unsigned int num,
-              unsigned int format,
-              const iptc_handle_t handle)
-{
-       struct xtables_target *target = NULL;
-       const struct ipt_entry_target *t;
-       u_int8_t flags;
-       char buf[BUFSIZ];
-
-       if (!iptc_is_chain(targname, handle))
-               target = find_target(targname, TRY_LOAD);
-       else
-               target = find_target(IPT_STANDARD_TARGET, LOAD_MUST_SUCCEED);
-
-       t = ipt_get_target((struct ipt_entry *)fw);
-       flags = fw->ip.flags;
-
-       if (format & FMT_LINENUMBERS)
-               printf(FMT("%-4u ", "%u "), num);
-
-       if (!(format & FMT_NOCOUNTS)) {
-               print_num(fw->counters.pcnt, format);
-               print_num(fw->counters.bcnt, format);
-       }
-
-       if (!(format & FMT_NOTARGET))
-               printf(FMT("%-9s ", "%s "), targname);
-
-       fputc(fw->ip.invflags & IPT_INV_PROTO ? '!' : ' ', stdout);
-       {
-               char *pname = proto_to_name(fw->ip.proto, format&FMT_NUMERIC);
-               if (pname)
-                       printf(FMT("%-5s", "%s "), pname);
-               else
-                       printf(FMT("%-5hu", "%hu "), fw->ip.proto);
-       }
-
-       if (format & FMT_OPTIONS) {
-               if (format & FMT_NOTABLE)
-                       fputs("opt ", stdout);
-               fputc(fw->ip.invflags & IPT_INV_FRAG ? '!' : '-', stdout);
-               fputc(flags & IPT_F_FRAG ? 'f' : '-', stdout);
-               fputc(' ', stdout);
-       }
-
-       if (format & FMT_VIA) {
-               char iface[IFNAMSIZ+2];
-
-               if (fw->ip.invflags & IPT_INV_VIA_IN) {
-                       iface[0] = '!';
-                       iface[1] = '\0';
-               }
-               else iface[0] = '\0';
-
-               if (fw->ip.iniface[0] != '\0') {
-                       strcat(iface, fw->ip.iniface);
-               }
-               else if (format & FMT_NUMERIC) strcat(iface, "*");
-               else strcat(iface, "any");
-               printf(FMT(" %-6s ","in %s "), iface);
-
-               if (fw->ip.invflags & IPT_INV_VIA_OUT) {
-                       iface[0] = '!';
-                       iface[1] = '\0';
-               }
-               else iface[0] = '\0';
-
-               if (fw->ip.outiface[0] != '\0') {
-                       strcat(iface, fw->ip.outiface);
-               }
-               else if (format & FMT_NUMERIC) strcat(iface, "*");
-               else strcat(iface, "any");
-               printf(FMT("%-6s ","out %s "), iface);
-       }
-
-       fputc(fw->ip.invflags & IPT_INV_SRCIP ? '!' : ' ', stdout);
-       if (fw->ip.smsk.s_addr == 0L && !(format & FMT_NUMERIC))
-               printf(FMT("%-19s ","%s "), "anywhere");
-       else {
-               if (format & FMT_NUMERIC)
-                       sprintf(buf, "%s", ipaddr_to_numeric(&fw->ip.src));
-               else
-                       sprintf(buf, "%s", ipaddr_to_anyname(&fw->ip.src));
-               strcat(buf, ipmask_to_numeric(&fw->ip.smsk));
-               printf(FMT("%-19s ","%s "), buf);
-       }
-
-       fputc(fw->ip.invflags & IPT_INV_DSTIP ? '!' : ' ', stdout);
-       if (fw->ip.dmsk.s_addr == 0L && !(format & FMT_NUMERIC))
-               printf(FMT("%-19s ","-> %s"), "anywhere");
-       else {
-               if (format & FMT_NUMERIC)
-                       sprintf(buf, "%s", ipaddr_to_numeric(&fw->ip.dst));
-               else
-                       sprintf(buf, "%s", ipaddr_to_anyname(&fw->ip.dst));
-               strcat(buf, ipmask_to_numeric(&fw->ip.dmsk));
-               printf(FMT("%-19s ","-> %s"), buf);
-       }
-
-       if (format & FMT_NOTABLE)
-               fputs("  ", stdout);
-
-#ifdef IPT_F_GOTO
-       if(fw->ip.flags & IPT_F_GOTO)
-               printf("[goto] ");
-#endif
-
-       IPT_MATCH_ITERATE(fw, print_match, &fw->ip, format & FMT_NUMERIC);
-
-       if (target) {
-               if (target->print)
-                       /* Print the target information. */
-                       target->print(&fw->ip, t, format & FMT_NUMERIC);
-       } else if (t->u.target_size != sizeof(*t))
-               printf("[%u bytes of unknown target data] ",
-                      (unsigned int)(t->u.target_size - sizeof(*t)));
-
-       if (!(format & FMT_NONEWLINE))
-               fputc('\n', stdout);
-}
-
-static void
-print_firewall_line(const struct ipt_entry *fw,
-                   const iptc_handle_t h)
-{
-       struct ipt_entry_target *t;
-
-       t = ipt_get_target((struct ipt_entry *)fw);
-       print_firewall(fw, t->u.user.name, 0, FMT_PRINT_RULE, h);
-}
-
-static int
-append_entry(const ipt_chainlabel chain,
-            struct ipt_entry *fw,
-            unsigned int nsaddrs,
-            const struct in_addr saddrs[],
-            unsigned int ndaddrs,
-            const struct in_addr daddrs[],
-            int verbose,
-            iptc_handle_t *handle)
-{
-       unsigned int i, j;
-       int ret = 1;
-
-       for (i = 0; i < nsaddrs; i++) {
-               fw->ip.src.s_addr = saddrs[i].s_addr;
-               for (j = 0; j < ndaddrs; j++) {
-                       fw->ip.dst.s_addr = daddrs[j].s_addr;
-                       if (verbose)
-                               print_firewall_line(fw, *handle);
-                       ret &= iptc_append_entry(chain, fw, handle);
-               }
-       }
-
-       return ret;
-}
-
-static int
-replace_entry(const ipt_chainlabel chain,
-             struct ipt_entry *fw,
-             unsigned int rulenum,
-             const struct in_addr *saddr,
-             const struct in_addr *daddr,
-             int verbose,
-             iptc_handle_t *handle)
-{
-       fw->ip.src.s_addr = saddr->s_addr;
-       fw->ip.dst.s_addr = daddr->s_addr;
-
-       if (verbose)
-               print_firewall_line(fw, *handle);
-       return iptc_replace_entry(chain, fw, rulenum, handle);
-}
-
-static int
-insert_entry(const ipt_chainlabel chain,
-            struct ipt_entry *fw,
-            unsigned int rulenum,
-            unsigned int nsaddrs,
-            const struct in_addr saddrs[],
-            unsigned int ndaddrs,
-            const struct in_addr daddrs[],
-            int verbose,
-            iptc_handle_t *handle)
-{
-       unsigned int i, j;
-       int ret = 1;
-
-       for (i = 0; i < nsaddrs; i++) {
-               fw->ip.src.s_addr = saddrs[i].s_addr;
-               for (j = 0; j < ndaddrs; j++) {
-                       fw->ip.dst.s_addr = daddrs[j].s_addr;
-                       if (verbose)
-                               print_firewall_line(fw, *handle);
-                       ret &= iptc_insert_entry(chain, fw, rulenum, handle);
-               }
-       }
-
-       return ret;
-}
-
-static unsigned char *
-make_delete_mask(struct ipt_entry *fw, struct iptables_rule_match *matches)
-{
-       /* Establish mask for comparison */
-       unsigned int size;
-       struct iptables_rule_match *matchp;
-       unsigned char *mask, *mptr;
-
-       size = sizeof(struct ipt_entry);
-       for (matchp = matches; matchp; matchp = matchp->next)
-               size += IPT_ALIGN(sizeof(struct ipt_entry_match)) + matchp->match->size;
-
-       mask = fw_calloc(1, size
-                        + IPT_ALIGN(sizeof(struct ipt_entry_target))
-                        + xtables_targets->size);
-
-       memset(mask, 0xFF, sizeof(struct ipt_entry));
-       mptr = mask + sizeof(struct ipt_entry);
-
-       for (matchp = matches; matchp; matchp = matchp->next) {
-               memset(mptr, 0xFF,
-                      IPT_ALIGN(sizeof(struct ipt_entry_match))
-                      + matchp->match->userspacesize);
-               mptr += IPT_ALIGN(sizeof(struct ipt_entry_match)) + matchp->match->size;
-       }
-
-       memset(mptr, 0xFF,
-              IPT_ALIGN(sizeof(struct ipt_entry_target))
-              + xtables_targets->userspacesize);
-
-       return mask;
-}
-
-static int
-delete_entry(const ipt_chainlabel chain,
-            struct ipt_entry *fw,
-            unsigned int nsaddrs,
-            const struct in_addr saddrs[],
-            unsigned int ndaddrs,
-            const struct in_addr daddrs[],
-            int verbose,
-            iptc_handle_t *handle,
-            struct iptables_rule_match *matches)
-{
-       unsigned int i, j;
-       int ret = 1;
-       unsigned char *mask;
-
-       mask = make_delete_mask(fw, matches);
-       for (i = 0; i < nsaddrs; i++) {
-               fw->ip.src.s_addr = saddrs[i].s_addr;
-               for (j = 0; j < ndaddrs; j++) {
-                       fw->ip.dst.s_addr = daddrs[j].s_addr;
-                       if (verbose)
-                               print_firewall_line(fw, *handle);
-                       ret &= iptc_delete_entry(chain, fw, mask, handle);
-               }
-       }
-       free(mask);
-
-       return ret;
-}
-
-int
-for_each_chain(int (*fn)(const ipt_chainlabel, int, iptc_handle_t *),
-              int verbose, int builtinstoo, iptc_handle_t *handle)
-{
-        int ret = 1;
-       const char *chain;
-       char *chains;
-       unsigned int i, chaincount = 0;
-
-       chain = iptc_first_chain(handle);
-       while (chain) {
-               chaincount++;
-               chain = iptc_next_chain(handle);
-        }
-
-       chains = fw_malloc(sizeof(ipt_chainlabel) * chaincount);
-       i = 0;
-       chain = iptc_first_chain(handle);
-       while (chain) {
-               strcpy(chains + i*sizeof(ipt_chainlabel), chain);
-               i++;
-               chain = iptc_next_chain(handle);
-        }
-
-       for (i = 0; i < chaincount; i++) {
-               if (!builtinstoo
-                   && iptc_builtin(chains + i*sizeof(ipt_chainlabel),
-                                   *handle) == 1)
-                       continue;
-               ret &= fn(chains + i*sizeof(ipt_chainlabel), verbose, handle);
-       }
-
-       free(chains);
-        return ret;
-}
-
-int
-flush_entries(const ipt_chainlabel chain, int verbose,
-             iptc_handle_t *handle)
-{
-       if (!chain)
-               return for_each_chain(flush_entries, verbose, 1, handle);
-
-       if (verbose)
-               fprintf(stdout, "Flushing chain `%s'\n", chain);
-       return iptc_flush_entries(chain, handle);
-}
-
-static int
-zero_entries(const ipt_chainlabel chain, int verbose,
-            iptc_handle_t *handle)
-{
-       if (!chain)
-               return for_each_chain(zero_entries, verbose, 1, handle);
-
-       if (verbose)
-               fprintf(stdout, "Zeroing chain `%s'\n", chain);
-       return iptc_zero_entries(chain, handle);
-}
-
-int
-delete_chain(const ipt_chainlabel chain, int verbose,
-            iptc_handle_t *handle)
-{
-       if (!chain)
-               return for_each_chain(delete_chain, verbose, 0, handle);
-
-       if (verbose)
-               fprintf(stdout, "Deleting chain `%s'\n", chain);
-       return iptc_delete_chain(chain, handle);
-}
-
-static int
-list_entries(const ipt_chainlabel chain, int rulenum, int verbose, int numeric,
-            int expanded, int linenumbers, iptc_handle_t *handle)
-{
-       int found = 0;
-       unsigned int format;
-       const char *this;
-
-       format = FMT_OPTIONS;
-       if (!verbose)
-               format |= FMT_NOCOUNTS;
-       else
-               format |= FMT_VIA;
-
-       if (numeric)
-               format |= FMT_NUMERIC;
-
-       if (!expanded)
-               format |= FMT_KILOMEGAGIGA;
-
-       if (linenumbers)
-               format |= FMT_LINENUMBERS;
-
-       for (this = iptc_first_chain(handle);
-            this;
-            this = iptc_next_chain(handle)) {
-               const struct ipt_entry *i;
-               unsigned int num;
-
-               if (chain && strcmp(chain, this) != 0)
-                       continue;
-
-               if (found) printf("\n");
-
-               if (!rulenum)
-                       print_header(format, this, handle);
-               i = iptc_first_rule(this, handle);
-
-               num = 0;
-               while (i) {
-                       num++;
-                       if (!rulenum || num == rulenum)
-                               print_firewall(i,
-                                              iptc_get_target(i, handle),
-                                              num,
-                                              format,
-                                              *handle);
-                       i = iptc_next_rule(i, handle);
-               }
-               found = 1;
-       }
-
-       errno = ENOENT;
-       return found;
-}
-
-static void print_proto(u_int16_t proto, int invert)
-{
-       if (proto) {
-               unsigned int i;
-               const char *invertstr = invert ? "! " : "";
-
-               struct protoent *pent = getprotobynumber(proto);
-               if (pent) {
-                       printf("-p %s%s ", invertstr, pent->p_name);
-                       return;
-               }
-
-               for (i = 0; i < sizeof(chain_protos)/sizeof(struct pprot); i++)
-                       if (chain_protos[i].num == proto) {
-                               printf("-p %s%s ",
-                                      invertstr, chain_protos[i].name);
-                               return;
-                       }
-
-               printf("-p %s%u ", invertstr, proto);
-       }
-}
-
-#define IP_PARTS_NATIVE(n)                     \
-(unsigned int)((n)>>24)&0xFF,                  \
-(unsigned int)((n)>>16)&0xFF,                  \
-(unsigned int)((n)>>8)&0xFF,                   \
-(unsigned int)((n)&0xFF)
-
-#define IP_PARTS(n) IP_PARTS_NATIVE(ntohl(n))
-
-/* This assumes that mask is contiguous, and byte-bounded. */
-static void
-print_iface(char letter, const char *iface, const unsigned char *mask,
-           int invert)
-{
-       unsigned int i;
-
-       if (mask[0] == 0)
-               return;
-
-       printf("-%c %s", letter, invert ? "! " : "");
-
-       for (i = 0; i < IFNAMSIZ; i++) {
-               if (mask[i] != 0) {
-                       if (iface[i] != '\0')
-                               printf("%c", iface[i]);
-               } else {
-                       /* we can access iface[i-1] here, because
-                        * a few lines above we make sure that mask[0] != 0 */
-                       if (iface[i-1] != '\0')
-                               printf("+");
-                       break;
-               }
-       }
-
-       printf(" ");
-}
-
-static int print_match_save(const struct ipt_entry_match *e,
-                       const struct ipt_ip *ip)
-{
-       struct xtables_match *match
-               = find_match(e->u.user.name, TRY_LOAD, NULL);
-
-       if (match) {
-               printf("-m %s ", e->u.user.name);
-
-               /* some matches don't provide a save function */
-               if (match->save)
-                       match->save(ip, e);
-       } else {
-               if (e->u.match_size) {
-                       fprintf(stderr,
-                               "Can't find library for match `%s'\n",
-                               e->u.user.name);
-                       exit(1);
-               }
-       }
-       return 0;
-}
-
-/* print a given ip including mask if neccessary */
-static void print_ip(char *prefix, u_int32_t ip, u_int32_t mask, int invert)
-{
-       u_int32_t bits, hmask = ntohl(mask);
-       int i;
-
-       if (!mask && !ip && !invert)
-               return;
-
-       printf("%s %s%u.%u.%u.%u",
-               prefix,
-               invert ? "! " : "",
-               IP_PARTS(ip));
-
-       if (mask == 0xFFFFFFFFU) {
-               printf("/32 ");
-               return;
-       }
-
-       i    = 32;
-       bits = 0xFFFFFFFEU;
-       while (--i >= 0 && hmask != bits)
-               bits <<= 1;
-       if (i >= 0)
-               printf("/%u ", i);
-       else
-               printf("/%u.%u.%u.%u ", IP_PARTS(mask));
-}
-
-/* We want this to be readable, so only print out neccessary fields.
- * Because that's the kind of world I want to live in.  */
-void print_rule(const struct ipt_entry *e,
-               iptc_handle_t *h, const char *chain, int counters)
-{
-       struct ipt_entry_target *t;
-       const char *target_name;
-
-       /* print counters for iptables-save */
-       if (counters > 0)
-               printf("[%llu:%llu] ", (unsigned long long)e->counters.pcnt, (unsigned long long)e->counters.bcnt);
-
-       /* print chain name */
-       printf("-A %s ", chain);
-
-       /* Print IP part. */
-       print_ip("-s", e->ip.src.s_addr,e->ip.smsk.s_addr,
-                       e->ip.invflags & IPT_INV_SRCIP);
-
-       print_ip("-d", e->ip.dst.s_addr, e->ip.dmsk.s_addr,
-                       e->ip.invflags & IPT_INV_DSTIP);
-
-       print_iface('i', e->ip.iniface, e->ip.iniface_mask,
-                   e->ip.invflags & IPT_INV_VIA_IN);
-
-       print_iface('o', e->ip.outiface, e->ip.outiface_mask,
-                   e->ip.invflags & IPT_INV_VIA_OUT);
-
-       print_proto(e->ip.proto, e->ip.invflags & IPT_INV_PROTO);
-
-       if (e->ip.flags & IPT_F_FRAG)
-               printf("%s-f ",
-                      e->ip.invflags & IPT_INV_FRAG ? "! " : "");
-
-       /* Print matchinfo part */
-       if (e->target_offset) {
-               IPT_MATCH_ITERATE(e, print_match_save, &e->ip);
-       }
-
-       /* print counters for iptables -R */
-       if (counters < 0)
-               printf("-c %llu %llu ", (unsigned long long)e->counters.pcnt, (unsigned long long)e->counters.bcnt);
-
-       /* Print target name */
-       target_name = iptc_get_target(e, h);
-       if (target_name && (*target_name != '\0'))
-#ifdef IPT_F_GOTO
-               printf("-%c %s ", e->ip.flags & IPT_F_GOTO ? 'g' : 'j', target_name);
-#else
-               printf("-j %s ", target_name);
-#endif
-
-       /* Print targinfo part */
-       t = ipt_get_target((struct ipt_entry *)e);
-       if (t->u.user.name[0]) {
-               struct xtables_target *target
-                       = find_target(t->u.user.name, TRY_LOAD);
-
-               if (!target) {
-                       fprintf(stderr, "Can't find library for target `%s'\n",
-                               t->u.user.name);
-                       exit(1);
-               }
-
-               if (target->save)
-                       target->save(&e->ip, t);
-               else {
-                       /* If the target size is greater than ipt_entry_target
-                        * there is something to be saved, we just don't know
-                        * how to print it */
-                       if (t->u.target_size !=
-                           sizeof(struct ipt_entry_target)) {
-                               fprintf(stderr, "Target `%s' is missing "
-                                               "save function\n",
-                                       t->u.user.name);
-                               exit(1);
-                       }
-               }
-       }
-       printf("\n");
-}
-
-static int
-list_rules(const ipt_chainlabel chain, int rulenum, int counters,
-            iptc_handle_t *handle)
-{
-       const char *this = NULL;
-       int found = 0;
-
-       if (counters)
-           counters = -1;              /* iptables -c format */
-
-       /* Dump out chain names first,
-        * thereby preventing dependency conflicts */
-       if (!rulenum) for (this = iptc_first_chain(handle);
-            this;
-            this = iptc_next_chain(handle)) {
-               if (chain && strcmp(this, chain) != 0)
-                       continue;
-
-               if (iptc_builtin(this, *handle)) {
-                       struct ipt_counters count;
-                       printf("-P %s %s", this, iptc_get_policy(this, &count, handle));
-                       if (counters)
-                           printf(" -c %llu %llu", (unsigned long long)count.pcnt, (unsigned long long)count.bcnt);
-                       printf("\n");
-               } else {
-                       printf("-N %s\n", this);
-               }
-       }
-
-       for (this = iptc_first_chain(handle);
-            this;
-            this = iptc_next_chain(handle)) {
-               const struct ipt_entry *e;
-               int num = 0;
-
-               if (chain && strcmp(this, chain) != 0)
-                       continue;
-
-               /* Dump out rules */
-               e = iptc_first_rule(this, handle);
-               while(e) {
-                       num++;
-                       if (!rulenum || num == rulenum)
-                           print_rule(e, handle, this, counters);
-                       e = iptc_next_rule(e, handle);
-               }
-               found = 1;
-       }
-
-       errno = ENOENT;
-       return found;
-}
-
-static struct ipt_entry *
-generate_entry(const struct ipt_entry *fw,
-              struct iptables_rule_match *matches,
-              struct ipt_entry_target *target)
-{
-       unsigned int size;
-       struct iptables_rule_match *matchp;
-       struct ipt_entry *e;
-
-       size = sizeof(struct ipt_entry);
-       for (matchp = matches; matchp; matchp = matchp->next)
-               size += matchp->match->m->u.match_size;
-
-       e = fw_malloc(size + target->u.target_size);
-       *e = *fw;
-       e->target_offset = size;
-       e->next_offset = size + target->u.target_size;
-
-       size = 0;
-       for (matchp = matches; matchp; matchp = matchp->next) {
-               memcpy(e->elems + size, matchp->match->m, matchp->match->m->u.match_size);
-               size += matchp->match->m->u.match_size;
-       }
-       memcpy(e->elems + size, target, target->u.target_size);
-
-       return e;
-}
-
-static void clear_rule_matches(struct iptables_rule_match **matches)
-{
-       struct iptables_rule_match *matchp, *tmp;
-
-       for (matchp = *matches; matchp;) {
-               tmp = matchp->next;
-               if (matchp->match->m) {
-                       free(matchp->match->m);
-                       matchp->match->m = NULL;
-               }
-               if (matchp->match == matchp->match->next) {
-                       free(matchp->match);
-                       matchp->match = NULL;
-               }
-               free(matchp);
-               matchp = tmp;
-       }
-
-       *matches = NULL;
-}
-
-static void set_revision(char *name, u_int8_t revision)
-{
-       /* Old kernel sources don't have ".revision" field,
-          but we stole a byte from name. */
-       name[IPT_FUNCTION_MAXNAMELEN - 2] = '\0';
-       name[IPT_FUNCTION_MAXNAMELEN - 1] = revision;
-}
-
-void
-get_kernel_version(void) {
-       static struct utsname uts;
-       int x = 0, y = 0, z = 0;
-
-       if (uname(&uts) == -1) {
-               fprintf(stderr, "Unable to retrieve kernel version.\n");
-               free_opts(1);
-               exit(1);
-       }
-
-       sscanf(uts.release, "%d.%d.%d", &x, &y, &z);
-       kernel_version = LINUX_VERSION(x, y, z);
-}
-
-int do_command(int argc, char *argv[], char **table, iptc_handle_t *handle)
-{
-       struct ipt_entry fw, *e = NULL;
-       int invert = 0;
-       unsigned int nsaddrs = 0, ndaddrs = 0;
-       struct in_addr *saddrs = NULL, *daddrs = NULL;
-
-       int c, verbose = 0;
-       const char *chain = NULL;
-       const char *shostnetworkmask = NULL, *dhostnetworkmask = NULL;
-       const char *policy = NULL, *newname = NULL;
-       unsigned int rulenum = 0, options = 0, command = 0;
-       const char *pcnt = NULL, *bcnt = NULL;
-       int ret = 1;
-       struct xtables_match *m;
-       struct iptables_rule_match *matches = NULL;
-       struct iptables_rule_match *matchp;
-       struct xtables_target *target = NULL;
-       struct xtables_target *t;
-       const char *jumpto = "";
-       char *protocol = NULL;
-       int proto_used = 0;
-       unsigned long long cnt;
-
-       memset(&fw, 0, sizeof(fw));
-
-       /* re-set optind to 0 in case do_command gets called
-        * a second time */
-       optind = 0;
-
-       /* clear mflags in case do_command gets called a second time
-        * (we clear the global list of all matches for security)*/
-       for (m = xtables_matches; m; m = m->next)
-               m->mflags = 0;
-
-       for (t = xtables_targets; t; t = t->next) {
-               t->tflags = 0;
-               t->used = 0;
-       }
-
-       /* Suppress error messages: we may add new options if we
-           demand-load a protocol. */
-       opterr = 0;
-
-       while ((c = getopt_long(argc, argv,
-          "-A:D:R:I:L::S::M:F::Z::N:X::E:P:Vh::o:p:s:d:j:i:fbvnt:m:xc:g:",
-                                          opts, NULL)) != -1) {
-               switch (c) {
-                       /*
-                        * Command selection
-                        */
-               case 'A':
-                       add_command(&command, CMD_APPEND, CMD_NONE,
-                                   invert);
-                       chain = optarg;
-                       break;
-
-               case 'D':
-                       add_command(&command, CMD_DELETE, CMD_NONE,
-                                   invert);
-                       chain = optarg;
-                       if (optind < argc && argv[optind][0] != '-'
-                           && argv[optind][0] != '!') {
-                               rulenum = parse_rulenumber(argv[optind++]);
-                               command = CMD_DELETE_NUM;
-                       }
-                       break;
-
-               case 'R':
-                       add_command(&command, CMD_REPLACE, CMD_NONE,
-                                   invert);
-                       chain = optarg;
-                       if (optind < argc && argv[optind][0] != '-'
-                           && argv[optind][0] != '!')
-                               rulenum = parse_rulenumber(argv[optind++]);
-                       else
-                               exit_error(PARAMETER_PROBLEM,
-                                          "-%c requires a rule number",
-                                          cmd2char(CMD_REPLACE));
-                       break;
-
-               case 'I':
-                       add_command(&command, CMD_INSERT, CMD_NONE,
-                                   invert);
-                       chain = optarg;
-                       if (optind < argc && argv[optind][0] != '-'
-                           && argv[optind][0] != '!')
-                               rulenum = parse_rulenumber(argv[optind++]);
-                       else rulenum = 1;
-                       break;
-
-               case 'L':
-                       add_command(&command, CMD_LIST, CMD_ZERO,
-                                   invert);
-                       if (optarg) chain = optarg;
-                       else if (optind < argc && argv[optind][0] != '-'
-                                && argv[optind][0] != '!')
-                               chain = argv[optind++];
-                       if (optind < argc && argv[optind][0] != '-'
-                           && argv[optind][0] != '!')
-                               rulenum = parse_rulenumber(argv[optind++]);
-                       break;
-
-               case 'S':
-                       add_command(&command, CMD_LIST_RULES, CMD_ZERO,
-                                   invert);
-                       if (optarg) chain = optarg;
-                       else if (optind < argc && argv[optind][0] != '-'
-                                && argv[optind][0] != '!')
-                               chain = argv[optind++];
-                       if (optind < argc && argv[optind][0] != '-'
-                           && argv[optind][0] != '!')
-                               rulenum = parse_rulenumber(argv[optind++]);
-                       break;
-
-               case 'F':
-                       add_command(&command, CMD_FLUSH, CMD_NONE,
-                                   invert);
-                       if (optarg) chain = optarg;
-                       else if (optind < argc && argv[optind][0] != '-'
-                                && argv[optind][0] != '!')
-                               chain = argv[optind++];
-                       break;
-
-               case 'Z':
-                       add_command(&command, CMD_ZERO, CMD_LIST|CMD_LIST_RULES,
-                                   invert);
-                       if (optarg) chain = optarg;
-                       else if (optind < argc && argv[optind][0] != '-'
-                               && argv[optind][0] != '!')
-                               chain = argv[optind++];
-                       break;
-
-               case 'N':
-                       if (optarg && (*optarg == '-' || *optarg == '!'))
-                               exit_error(PARAMETER_PROBLEM,
-                                          "chain name not allowed to start "
-                                          "with `%c'\n", *optarg);
-                       if (find_target(optarg, TRY_LOAD))
-                               exit_error(PARAMETER_PROBLEM,
-                                          "chain name may not clash "
-                                          "with target name\n");
-                       add_command(&command, CMD_NEW_CHAIN, CMD_NONE,
-                                   invert);
-                       chain = optarg;
-                       break;
-
-               case 'X':
-                       add_command(&command, CMD_DELETE_CHAIN, CMD_NONE,
-                                   invert);
-                       if (optarg) chain = optarg;
-                       else if (optind < argc && argv[optind][0] != '-'
-                                && argv[optind][0] != '!')
-                               chain = argv[optind++];
-                       break;
-
-               case 'E':
-                       add_command(&command, CMD_RENAME_CHAIN, CMD_NONE,
-                                   invert);
-                       chain = optarg;
-                       if (optind < argc && argv[optind][0] != '-'
-                           && argv[optind][0] != '!')
-                               newname = argv[optind++];
-                       else
-                               exit_error(PARAMETER_PROBLEM,
-                                          "-%c requires old-chain-name and "
-                                          "new-chain-name",
-                                           cmd2char(CMD_RENAME_CHAIN));
-                       break;
-
-               case 'P':
-                       add_command(&command, CMD_SET_POLICY, CMD_NONE,
-                                   invert);
-                       chain = optarg;
-                       if (optind < argc && argv[optind][0] != '-'
-                           && argv[optind][0] != '!')
-                               policy = argv[optind++];
-                       else
-                               exit_error(PARAMETER_PROBLEM,
-                                          "-%c requires a chain and a policy",
-                                          cmd2char(CMD_SET_POLICY));
-                       break;
-
-               case 'h':
-                       if (!optarg)
-                               optarg = argv[optind];
-
-                       /* iptables -p icmp -h */
-                       if (!matches && protocol)
-                               find_match(protocol, TRY_LOAD, &matches);
-
-                       exit_printhelp(matches);
-
-                       /*
-                        * Option selection
-                        */
-               case 'p':
-                       check_inverse(optarg, &invert, &optind, argc);
-                       set_option(&options, OPT_PROTOCOL, &fw.ip.invflags,
-                                  invert);
-
-                       /* Canonicalize into lower case */
-                       for (protocol = argv[optind-1]; *protocol; protocol++)
-                               *protocol = tolower(*protocol);
-
-                       protocol = argv[optind-1];
-                       fw.ip.proto = parse_protocol(protocol);
-
-                       if (fw.ip.proto == 0
-                           && (fw.ip.invflags & IPT_INV_PROTO))
-                               exit_error(PARAMETER_PROBLEM,
-                                          "rule would never match protocol");
-                       break;
-
-               case 's':
-                       check_inverse(optarg, &invert, &optind, argc);
-                       set_option(&options, OPT_SOURCE, &fw.ip.invflags,
-                                  invert);
-                       shostnetworkmask = argv[optind-1];
-                       break;
-
-               case 'd':
-                       check_inverse(optarg, &invert, &optind, argc);
-                       set_option(&options, OPT_DESTINATION, &fw.ip.invflags,
-                                  invert);
-                       dhostnetworkmask = argv[optind-1];
-                       break;
-
-#ifdef IPT_F_GOTO
-               case 'g':
-                       set_option(&options, OPT_JUMP, &fw.ip.invflags,
-                                  invert);
-                       fw.ip.flags |= IPT_F_GOTO;
-                       jumpto = parse_target(optarg);
-                       break;
-#endif
-
-               case 'j':
-                       set_option(&options, OPT_JUMP, &fw.ip.invflags,
-                                  invert);
-                       jumpto = parse_target(optarg);
-                       /* TRY_LOAD (may be chain name) */
-                       target = find_target(jumpto, TRY_LOAD);
-
-                       if (target) {
-                               size_t size;
-
-                               size = IPT_ALIGN(sizeof(struct ipt_entry_target))
-                                       + target->size;
-
-                               target->t = fw_calloc(1, size);
-                               target->t->u.target_size = size;
-                               strcpy(target->t->u.user.name, jumpto);
-                               set_revision(target->t->u.user.name,
-                                            target->revision);
-                               if (target->init != NULL)
-                                       target->init(target->t);
-                               opts = merge_options(opts,
-                                                    target->extra_opts,
-                                                    &target->option_offset);
-                               if (opts == NULL)
-                                       exit_error(OTHER_PROBLEM,
-                                                  "can't alloc memory!");
-                       }
-                       break;
-
-
-               case 'i':
-                       check_inverse(optarg, &invert, &optind, argc);
-                       set_option(&options, OPT_VIANAMEIN, &fw.ip.invflags,
-                                  invert);
-                       parse_interface(argv[optind-1],
-                                       fw.ip.iniface,
-                                       fw.ip.iniface_mask);
-                       break;
-
-               case 'o':
-                       check_inverse(optarg, &invert, &optind, argc);
-                       set_option(&options, OPT_VIANAMEOUT, &fw.ip.invflags,
-                                  invert);
-                       parse_interface(argv[optind-1],
-                                       fw.ip.outiface,
-                                       fw.ip.outiface_mask);
-                       break;
-
-               case 'f':
-                       set_option(&options, OPT_FRAGMENT, &fw.ip.invflags,
-                                  invert);
-                       fw.ip.flags |= IPT_F_FRAG;
-                       break;
-
-               case 'v':
-                       if (!verbose)
-                               set_option(&options, OPT_VERBOSE,
-                                          &fw.ip.invflags, invert);
-                       verbose++;
-                       break;
-
-               case 'm': {
-                       size_t size;
-
-                       if (invert)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "unexpected ! flag before --match");
-
-                       m = find_match(optarg, LOAD_MUST_SUCCEED, &matches);
-                       size = IPT_ALIGN(sizeof(struct ipt_entry_match))
-                                        + m->size;
-                       m->m = fw_calloc(1, size);
-                       m->m->u.match_size = size;
-                       strcpy(m->m->u.user.name, m->name);
-                       set_revision(m->m->u.user.name, m->revision);
-                       if (m->init != NULL)
-                               m->init(m->m);
-                       if (m != m->next) {
-                               /* Merge options for non-cloned matches */
-                               opts = merge_options(opts,
-                                                    m->extra_opts,
-                                                    &m->option_offset);
-                               if (opts == NULL)
-                                       exit_error(OTHER_PROBLEM,
-                                                  "can't alloc memory!");
-                       }
-               }
-               break;
-
-               case 'n':
-                       set_option(&options, OPT_NUMERIC, &fw.ip.invflags,
-                                  invert);
-                       break;
-
-               case 't':
-                       if (invert)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "unexpected ! flag before --table");
-                       *table = argv[optind-1];
-                       break;
-
-               case 'x':
-                       set_option(&options, OPT_EXPANDED, &fw.ip.invflags,
-                                  invert);
-                       break;
-
-               case 'V':
-                       if (invert)
-                               printf("Not %s ;-)\n", program_version);
-                       else
-                               printf("%s v%s\n",
-                                      program_name, program_version);
-                       exit(0);
-
-               case '0':
-                       set_option(&options, OPT_LINENUMBERS, &fw.ip.invflags,
-                                  invert);
-                       break;
-
-               case 'M':
-                       modprobe_program = optarg;
-                       break;
-
-               case 'c':
-
-                       set_option(&options, OPT_COUNTERS, &fw.ip.invflags,
-                                  invert);
-                       pcnt = optarg;
-                       bcnt = strchr(pcnt + 1, ',');
-                       if (bcnt)
-                           bcnt++;
-                       if (!bcnt && optind < argc && argv[optind][0] != '-'
-                           && argv[optind][0] != '!')
-                               bcnt = argv[optind++];
-                       if (!bcnt)
-                               exit_error(PARAMETER_PROBLEM,
-                                       "-%c requires packet and byte counter",
-                                       opt2char(OPT_COUNTERS));
-
-                       if (sscanf(pcnt, "%llu", &cnt) != 1)
-                               exit_error(PARAMETER_PROBLEM,
-                                       "-%c packet counter not numeric",
-                                       opt2char(OPT_COUNTERS));
-                       fw.counters.pcnt = cnt;
-
-                       if (sscanf(bcnt, "%llu", &cnt) != 1)
-                               exit_error(PARAMETER_PROBLEM,
-                                       "-%c byte counter not numeric",
-                                       opt2char(OPT_COUNTERS));
-                       fw.counters.bcnt = cnt;
-                       break;
-
-
-               case 1: /* non option */
-                       if (optarg[0] == '!' && optarg[1] == '\0') {
-                               if (invert)
-                                       exit_error(PARAMETER_PROBLEM,
-                                                  "multiple consecutive ! not"
-                                                  " allowed");
-                               invert = TRUE;
-                               optarg[0] = '\0';
-                               continue;
-                       }
-                       fprintf(stderr, "Bad argument `%s'\n", optarg);
-                       exit_tryhelp(2);
-
-               default:
-                       if (!target
-                           || !(target->parse(c - target->option_offset,
-                                              argv, invert,
-                                              &target->tflags,
-                                              &fw, &target->t))) {
-                               for (matchp = matches; matchp; matchp = matchp->next) {
-                                       if (matchp->completed)
-                                               continue;
-                                       if (matchp->match->parse(c - matchp->match->option_offset,
-                                                    argv, invert,
-                                                    &matchp->match->mflags,
-                                                    &fw,
-                                                    &matchp->match->m))
-                                               break;
-                               }
-                               m = matchp ? matchp->match : NULL;
-
-                               /* If you listen carefully, you can
-                                  actually hear this code suck. */
-
-                               /* some explanations (after four different bugs
-                                * in 3 different releases): If we encounter a
-                                * parameter, that has not been parsed yet,
-                                * it's not an option of an explicitly loaded
-                                * match or a target.  However, we support
-                                * implicit loading of the protocol match
-                                * extension.  '-p tcp' means 'l4 proto 6' and
-                                * at the same time 'load tcp protocol match on
-                                * demand if we specify --dport'.
-                                *
-                                * To make this work, we need to make sure:
-                                * - the parameter has not been parsed by
-                                *   a match (m above)
-                                * - a protocol has been specified
-                                * - the protocol extension has not been
-                                *   loaded yet, or is loaded and unused
-                                *   [think of iptables-restore!]
-                                * - the protocol extension can be successively
-                                *   loaded
-                                */
-                               if (m == NULL
-                                   && protocol
-                                   && (!find_proto(protocol, DONT_LOAD,
-                                                  options&OPT_NUMERIC, NULL)
-                                       || (find_proto(protocol, DONT_LOAD,
-                                                       options&OPT_NUMERIC, NULL)
-                                           && (proto_used == 0))
-                                      )
-                                   && (m = find_proto(protocol, TRY_LOAD,
-                                                      options&OPT_NUMERIC, &matches))) {
-                                       /* Try loading protocol */
-                                       size_t size;
-
-                                       proto_used = 1;
-
-                                       size = IPT_ALIGN(sizeof(struct ipt_entry_match))
-                                                        + m->size;
-
-                                       m->m = fw_calloc(1, size);
-                                       m->m->u.match_size = size;
-                                       strcpy(m->m->u.user.name, m->name);
-                                       set_revision(m->m->u.user.name,
-                                                    m->revision);
-                                       if (m->init != NULL)
-                                               m->init(m->m);
-
-                                       opts = merge_options(opts,
-                                                            m->extra_opts,
-                                                            &m->option_offset);
-                                       if (opts == NULL)
-                                               exit_error(OTHER_PROBLEM,
-                                                       "can't alloc memory!");
-
-                                       optind--;
-                                       continue;
-                               }
-                               if (!m)
-                                       exit_error(PARAMETER_PROBLEM,
-                                                  "Unknown arg `%s'",
-                                                  argv[optind-1]);
-                       }
-               }
-               invert = FALSE;
-       }
-
-       for (matchp = matches; matchp; matchp = matchp->next)
-               if (matchp->match->final_check != NULL)
-                       matchp->match->final_check(matchp->match->mflags);
-
-       if (target != NULL && target->final_check != NULL)
-               target->final_check(target->tflags);
-
-       /* Fix me: must put inverse options checking here --MN */
-
-       if (optind < argc)
-               exit_error(PARAMETER_PROBLEM,
-                          "unknown arguments found on commandline");
-       if (!command)
-               exit_error(PARAMETER_PROBLEM, "no command specified");
-       if (invert)
-               exit_error(PARAMETER_PROBLEM,
-                          "nothing appropriate following !");
-
-       if (command & (CMD_REPLACE | CMD_INSERT | CMD_DELETE | CMD_APPEND)) {
-               if (!(options & OPT_DESTINATION))
-                       dhostnetworkmask = "0.0.0.0/0";
-               if (!(options & OPT_SOURCE))
-                       shostnetworkmask = "0.0.0.0/0";
-       }
-
-       if (shostnetworkmask)
-               ipparse_hostnetworkmask(shostnetworkmask, &saddrs,
-                                       &fw.ip.smsk, &nsaddrs);
-
-       if (dhostnetworkmask)
-               ipparse_hostnetworkmask(dhostnetworkmask, &daddrs,
-                                       &fw.ip.dmsk, &ndaddrs);
-
-       if ((nsaddrs > 1 || ndaddrs > 1) &&
-           (fw.ip.invflags & (IPT_INV_SRCIP | IPT_INV_DSTIP)))
-               exit_error(PARAMETER_PROBLEM, "! not allowed with multiple"
-                          " source or destination IP addresses");
-
-       if (command == CMD_REPLACE && (nsaddrs != 1 || ndaddrs != 1))
-               exit_error(PARAMETER_PROBLEM, "Replacement rule does not "
-                          "specify a unique address");
-
-       generic_opt_check(command, options);
-
-       if (chain && strlen(chain) > IPT_FUNCTION_MAXNAMELEN)
-               exit_error(PARAMETER_PROBLEM,
-                          "chain name `%s' too long (must be under %i chars)",
-                          chain, IPT_FUNCTION_MAXNAMELEN);
-
-       /* only allocate handle if we weren't called with a handle */
-       if (!*handle)
-               *handle = iptc_init(*table);
-
-       /* try to insmod the module if iptc_init failed */
-       if (!*handle && load_xtables_ko(modprobe_program, 0) != -1)
-               *handle = iptc_init(*table);
-
-       if (!*handle)
-               exit_error(VERSION_PROBLEM,
-                          "can't initialize iptables table `%s': %s",
-                          *table, iptc_strerror(errno));
-
-       if (command == CMD_APPEND
-           || command == CMD_DELETE
-           || command == CMD_INSERT
-           || command == CMD_REPLACE) {
-               if (strcmp(chain, "PREROUTING") == 0
-                   || strcmp(chain, "INPUT") == 0) {
-                       /* -o not valid with incoming packets. */
-                       if (options & OPT_VIANAMEOUT)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "Can't use -%c with %s\n",
-                                          opt2char(OPT_VIANAMEOUT),
-                                          chain);
-               }
-
-               if (strcmp(chain, "POSTROUTING") == 0
-                   || strcmp(chain, "OUTPUT") == 0) {
-                       /* -i not valid with outgoing packets */
-                       if (options & OPT_VIANAMEIN)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "Can't use -%c with %s\n",
-                                          opt2char(OPT_VIANAMEIN),
-                                          chain);
-               }
-
-               if (target && iptc_is_chain(jumpto, *handle)) {
-                       fprintf(stderr,
-                               "Warning: using chain %s, not extension\n",
-                               jumpto);
-
-                       if (target->t)
-                               free(target->t);
-
-                       target = NULL;
-               }
-
-               /* If they didn't specify a target, or it's a chain
-                  name, use standard. */
-               if (!target
-                   && (strlen(jumpto) == 0
-                       || iptc_is_chain(jumpto, *handle))) {
-                       size_t size;
-
-                       target = find_target(IPT_STANDARD_TARGET,
-                                            LOAD_MUST_SUCCEED);
-
-                       size = sizeof(struct ipt_entry_target)
-                               + target->size;
-                       target->t = fw_calloc(1, size);
-                       target->t->u.target_size = size;
-                       strcpy(target->t->u.user.name, jumpto);
-                       if (!iptc_is_chain(jumpto, *handle))
-                               set_revision(target->t->u.user.name,
-                                            target->revision);
-                       if (target->init != NULL)
-                               target->init(target->t);
-               }
-
-               if (!target) {
-                       /* it is no chain, and we can't load a plugin.
-                        * We cannot know if the plugin is corrupt, non
-                        * existant OR if the user just misspelled a
-                        * chain. */
-#ifdef IPT_F_GOTO
-                       if (fw.ip.flags & IPT_F_GOTO)
-                               exit_error(PARAMETER_PROBLEM,
-                                          "goto '%s' is not a chain\n", jumpto);
-#endif
-                       find_target(jumpto, LOAD_MUST_SUCCEED);
-               } else {
-                       e = generate_entry(&fw, matches, target->t);
-                       free(target->t);
-               }
-       }
-
-       switch (command) {
-       case CMD_APPEND:
-               ret = append_entry(chain, e,
-                                  nsaddrs, saddrs, ndaddrs, daddrs,
-                                  options&OPT_VERBOSE,
-                                  handle);
-               break;
-       case CMD_DELETE:
-               ret = delete_entry(chain, e,
-                                  nsaddrs, saddrs, ndaddrs, daddrs,
-                                  options&OPT_VERBOSE,
-                                  handle, matches);
-               break;
-       case CMD_DELETE_NUM:
-               ret = iptc_delete_num_entry(chain, rulenum - 1, handle);
-               break;
-       case CMD_REPLACE:
-               ret = replace_entry(chain, e, rulenum - 1,
-                                   saddrs, daddrs, options&OPT_VERBOSE,
-                                   handle);
-               break;
-       case CMD_INSERT:
-               ret = insert_entry(chain, e, rulenum - 1,
-                                  nsaddrs, saddrs, ndaddrs, daddrs,
-                                  options&OPT_VERBOSE,
-                                  handle);
-               break;
-       case CMD_FLUSH:
-               ret = flush_entries(chain, options&OPT_VERBOSE, handle);
-               break;
-       case CMD_ZERO:
-               ret = zero_entries(chain, options&OPT_VERBOSE, handle);
-               break;
-       case CMD_LIST:
-       case CMD_LIST|CMD_ZERO:
-               ret = list_entries(chain,
-                                  rulenum,
-                                  options&OPT_VERBOSE,
-                                  options&OPT_NUMERIC,
-                                  options&OPT_EXPANDED,
-                                  options&OPT_LINENUMBERS,
-                                  handle);
-               if (ret && (command & CMD_ZERO))
-                       ret = zero_entries(chain,
-                                          options&OPT_VERBOSE, handle);
-               break;
-       case CMD_LIST_RULES:
-       case CMD_LIST_RULES|CMD_ZERO:
-               ret = list_rules(chain,
-                                  rulenum,
-                                  options&OPT_VERBOSE,
-                                  handle);
-               if (ret && (command & CMD_ZERO))
-                       ret = zero_entries(chain,
-                                          options&OPT_VERBOSE, handle);
-               break;
-       case CMD_NEW_CHAIN:
-               ret = iptc_create_chain(chain, handle);
-               break;
-       case CMD_DELETE_CHAIN:
-               ret = delete_chain(chain, options&OPT_VERBOSE, handle);
-               break;
-       case CMD_RENAME_CHAIN:
-               ret = iptc_rename_chain(chain, newname, handle);
-               break;
-       case CMD_SET_POLICY:
-               ret = iptc_set_policy(chain, policy, options&OPT_COUNTERS ? &fw.counters : NULL, handle);
-               break;
-       default:
-               /* We should never reach this... */
-               exit_tryhelp(2);
-       }
-
-       if (verbose > 1)
-               dump_entries(*handle);
-
-       clear_rule_matches(&matches);
-
-       if (e != NULL) {
-               free(e);
-               e = NULL;
-       }
-
-       free(saddrs);
-       free(daddrs);
-       free_opts(1);
-
-       return ret;
-}
old mode 100755 (executable)
new mode 100644 (file)
index 48633fe..7e22bbf
 #
 ### BEGIN INIT INFO
 # Provides: iptables
-# Default-Start:  2 3 4 5
+# Required-Start:
+# Required-Stop:
+# Default-Start: 2 3 4 5
 # Default-Stop: 0 1 6
 # Short-Description: start and stop iptables firewall
 # Description: Start, stop and save iptables firewall
 ### END INIT INFO
 
-# from http://fr2.rpmfind.net/linux/fedora/releases/10/Everything/source/SRPMS/iptables-1.4.1.1-2.fc10.src.rpm
-
 # Source function library.
 . /etc/init.d/functions
 
@@ -46,6 +46,8 @@ IPTABLES_SAVE_ON_STOP="no"
 IPTABLES_SAVE_ON_RESTART="no"
 IPTABLES_SAVE_COUNTER="no"
 IPTABLES_STATUS_NUMERIC="yes"
+IPTABLES_STATUS_VERBOSE="no"
+IPTABLES_STATUS_LINENUMBERS="yes"
 
 # Load firewall configuration.
 [ -f "$IPTABLES_CONFIG" ] && . "$IPTABLES_CONFIG"
index 2b8cfb0..88f2281 100644 (file)
@@ -1,57 +1,34 @@
-#
-# $Id: iproute.spec 7668 2008-01-08 11:49:43Z thierry $
-#
-%define url $URL: svn+ssh://thierry@svn.planet-lab.org/svn/iproute2/trunk/iproute.spec $
-
-%define name iptables
-%define version 1.4.1.1
-%define taglevel 1
-
-%define release %{taglevel}%{?pldistro:.%{pldistro}}%{?date:.%{date}}
-
-Vendor: PlanetLab
-Packager: PlanetLab Central <support@planet-lab.org>
-Distribution: PlanetLab %{plrelease}
-URL: %(echo %{url} | cut -d ' ' -f 2)
-
-%define build_devel 1
-%define linux_header 0
-
-Summary: Tools for managing Linux kernel packet filtering capabilities.
-Name: %{name}
-Version: %{version}
-Release: %{release}
-Source: http://www.netfilter.org/%{name}-%{version}.tar.bz2
-%define SOURCE1 iptables.init
-%define SOURCE2 iptables-config
-%define SOURCE3 planetlab-config
+Name: iptables
+Summary: Tools for managing Linux kernel packet filtering capabilities
+Version: 1.4.7
+Release: 2%{?dist}
+Source: http://www.netfilter.org/projects/iptables/files/%{name}-%{version}.tar.bz2
+Source1: iptables.init
+Source2: iptables-config
+Source3: planetlab-config
+Patch1: copy-xid.patch
 Group: System Environment/Base
-#URL: http://www.netfilter.org/
-BuildRoot: %{_tmppath}/%{name}-buildroot
-License: GPL
-BuildPrereq: /usr/bin/perl
-Requires: kernel >= 2.6.27
-Requires(post,postun): chkconfig
-Prefix: %{_prefix}
-BuildRequires: kernel-devel
-
-%package ipv6
-Summary: IPv6 support for iptables.
-Group: System Environment/Base
-Requires: %{name} = %{version}
-
-%if %{build_devel}
-%package devel
-Summary: Development package for iptables.
-Group: System Environment/Base
-Requires: %{name} = %{version}
-%endif
+URL: http://www.netfilter.org/
+BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
+License: GPLv2
+BuildRequires: libselinux-devel
+BuildRequires: kernel-headers
+Conflicts: kernel < 2.4.20
+Requires(post): chkconfig
+Requires(preun): chkconfig
 
 %description
 The iptables utility controls the network packet filtering code in the
 Linux kernel. If you need to set up firewalls and/or IP masquerading,
 you should install this package.
 
+%package ipv6
+Summary: IPv6 support for iptables
+Group: System Environment/Base
+Requires: %{name} = %{version}-%{release}
+Requires(post): chkconfig
+Requires(preun): chkconfig
+
 %description ipv6
 The iptables package contains IPv6 (the next version of the IP
 protocol) support for iptables. Iptables controls the Linux kernel
@@ -61,135 +38,628 @@ masquerading.
 Install iptables-ipv6 if you need to set up firewalling for your
 network and you are using ipv6.
 
-%if %{build_devel}
+%package devel
+Summary: Development package for iptables
+Group: System Environment/Base
+Requires: %{name} = %{version}-%{release}
+Requires: pkgconfig
+
 %description devel
-The iptables utility controls the network packet filtering code in the
-Linux kernel. If you need to set up firewalls and/or IP masquerading,
-you should install this package.
-%endif
+iptables development headers and libraries.
 
-%prep
-rm -rf %{buildroot}
+The iptc interface is upstream marked as not public. The interface is not 
+stable and may change with every new version. It is therefore unsupported.
 
+%prep
 %setup -q
-
-# Put it to a reasonable place
-find . -type f -exec perl -pi -e "s,/usr,%{prefix},g" {} \;
+%patch1 -p1 
 
 %build
-TOPDIR=`pwd`
-OPT="$RPM_OPT_FLAGS -I$TOPDIR/include"
-
-%define KERNEL %(rpm -q --qf '%%{VERSION}-%%{RELEASE}-%%{ARCH}\\n' kernel-devel | tail -n 1 )
-count=$(rpm -q kernel-devel| wc -l)
-if [ $count -gt 1 ] ; then
-       echo "WARNING: choosing kernel-devel-%{KERNEL}"
-       echo "  but there are other kernel-devel packages installed: $(rpm -q kernel-devel)"
-fi
-       
-%define KERNEL_DIR "/usr/src/kernels/%{KERNEL}"
-
-%if %{build_devel}
-%define configure_option --enable-devel
-%else
-%define configure_option
-%endif
+CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" \
+./configure --enable-devel --enable-libipq --bindir=/bin --sbindir=/sbin --sysconfdir=/etc --libdir=/%{_lib} --libexecdir=/%{_lib} --mandir=%{_mandir} --includedir=%{_includedir} --with-kernel=/usr --with-kbuild=/usr --with-ksource=/usr
 
-./configure --prefix=/usr %{configure_option} --enable-libipq --bindir=/bin --sbindir=/sbin --sysconfdir=/etc --libdir=/%{_libdir} --libexecdir=/%{_lib} --mandir=%{_mandir} --includedir=%{_includedir}
+# do not use rpath
+sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
+sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool
 
-make COPT_FLAGS="$OPT" KERNEL_DIR=%{KERNEL_DIR} LIBDIR=/%{_lib}
+make
 
 %install
-# Thierry : for 1.4.1.1
-# from http://fr2.rpmfind.net/linux/fedora/releases/10/Everything/source/SRPMS/iptables-1.4.1.1-2.fc10.src.rpm
+rm -rf %{buildroot}
+
 make install DESTDIR=%{buildroot} 
+# remove la file(s)
+rm -f %{buildroot}/%{_lib}/*.la
+
+# install ip*tables.h header files
+install -m 644 include/ip*tables.h %{buildroot}%{_includedir}/
+install -d -m 755 %{buildroot}%{_includedir}/iptables
+install -m 644 include/iptables/internal.h %{buildroot}%{_includedir}/iptables/
 
-# install iptc devel library
-%if %{build_devel}
-install -m 644 libiptc/libiptc.a %{buildroot}/%{_libdir}
-%endif
+# install ipulog header file
+install -d -m 755 %{buildroot}%{_includedir}/libipulog/
+install -m 644 include/libipulog/*.h %{buildroot}%{_includedir}/libipulog/
+
+# create symlinks for devel so libs
+install -d -m 755 %{buildroot}%{_libdir}
+for i in %{buildroot}/%{_lib}/*.so; do
+    ln -s ../../%{_lib}/${i##*/} %{buildroot}%{_libdir}/${i##*/}
+done
+
+# move pkgconfig to %{_libdir}
+mv %{buildroot}/%{_lib}/pkgconfig %{buildroot}/%{_libdir}/
 
 # install init scripts and configuration files
-install -d -m 755 $RPM_BUILD_ROOT/etc/rc.d/init.d
-install -c -m 755 %{SOURCE1} $RPM_BUILD_ROOT/etc/rc.d/init.d/iptables
+install -d -m 755 %{buildroot}/etc/rc.d/init.d
+install -c -m 755 %{SOURCE1} %{buildroot}/etc/rc.d/init.d/iptables
 sed -e 's;iptables;ip6tables;g' -e 's;IPTABLES;IP6TABLES;g' < %{SOURCE1} > ip6tables.init
-install -c -m 755 ip6tables.init $RPM_BUILD_ROOT/etc/rc.d/init.d/ip6tables
-install -d -m 755 $RPM_BUILD_ROOT/etc/sysconfig
-install -c -m 755 %{SOURCE2} $RPM_BUILD_ROOT/etc/sysconfig/iptables-config
+install -c -m 755 ip6tables.init %{buildroot}/etc/rc.d/init.d/ip6tables
+install -d -m 755 %{buildroot}/etc/sysconfig
+install -c -m 755 %{SOURCE2} %{buildroot}/etc/sysconfig/iptables-config
 sed -e 's;iptables;ip6tables;g' -e 's;IPTABLES;IP6TABLES;g' < %{SOURCE2} > ip6tables-config
-install -c -m 755 ip6tables-config $RPM_BUILD_ROOT/etc/sysconfig/ip6tables-config
-install -c -m755 %{SOURCE3} $RPM_BUILD_ROOT/etc/sysconfig/iptables
+install -c -m 755 ip6tables-config %{buildroot}/etc/sysconfig/ip6tables-config
 
 %clean
-rm -rf $RPM_BUILD_ROOT 
+rm -rf %{buildroot}
 
 %post
+/sbin/ldconfig
 /sbin/chkconfig --add iptables
-if [ "$PL_BOOTCD" != "1" ] ; then
-    /sbin/service iptables restart
-fi
+
+%postun -p /sbin/ldconfig
 
 %preun
 if [ "$1" = 0 ]; then
-    /sbin/chkconfig --del iptables
+       /sbin/chkconfig --del iptables
 fi
 
 %post ipv6
 /sbin/chkconfig --add ip6tables
-if [ "$PL_BOOTCD" != "1" ] ; then
-    /sbin/service ip6tables restart
-fi
 
 %preun ipv6
 if [ "$1" = 0 ]; then
-    /sbin/chkconfig --del ip6tables
+       /sbin/chkconfig --del ip6tables
 fi
 
 %files
-%defattr(-,root,root,0755)
+%defattr(-,root,root)
 %doc COPYING INSTALL INCOMPATIBILITIES
-%config %attr(0755,root,root) /etc/rc.d/init.d/iptables
+%attr(0755,root,root) /etc/rc.d/init.d/iptables
 %config(noreplace) %attr(0600,root,root) /etc/sysconfig/iptables-config
-%config(noreplace) %attr(0600,root,root) /etc/sysconfig/iptables
 /sbin/iptables*
+/bin/iptables-xml
 %{_mandir}/man8/iptables*
-
-# Thierry - WARNING : location changed
 %dir /%{_lib}/xtables
-# WARNING : location changed
 /%{_lib}/xtables/libipt*
-# WARNING : new stuff
 /%{_lib}/xtables/libxt*
-# WARNING : not found at all
-#/sbin/ipset*
-#%{_mandir}/man8/ipset*
-#%dir /%{_lib}/ipset
-#/%{_lib}/ipset/libipset*
+/%{_lib}/libip*tc.so.*
+/%{_lib}/libipq.so.*
+/%{_lib}/libxtables.so.*
 
 %files ipv6
-%defattr(-,root,root,0755)
-%config %attr(0755,root,root) /etc/rc.d/init.d/ip6tables
+%defattr(-,root,root)
+%attr(0755,root,root) /etc/rc.d/init.d/ip6tables
 %config(noreplace) %attr(0600,root,root) /etc/sysconfig/ip6tables-config
 /sbin/ip6tables*
-# Thierry - WARNING : new stuff
-/bin/iptables-xml
 %{_mandir}/man8/ip6tables*
-# WARNING : location changed
 /%{_lib}/xtables/libip6t*
 
-%if %{build_devel}
 %files devel
-%defattr(-,root,root,0755)
+%defattr(-,root,root)
+%dir %{_includedir}/iptables
+%{_includedir}/iptables/*.h
 %{_includedir}/*.h
 %dir %{_includedir}/libiptc
 %{_includedir}/libiptc/*.h
-%{_libdir}/libipq.a
-%{_libdir}/libiptc.a
+%dir %{_includedir}/libipulog
+%{_includedir}/libipulog/*.h
 %{_mandir}/man3/*
-%endif
+/%{_lib}/libip*tc.so
+/%{_lib}/libipq.so
+/%{_lib}/libxtables.so
+%{_libdir}/libip*tc.so
+%{_libdir}/libipq.so
+%{_libdir}/libxtables.so
+%{_libdir}/pkgconfig/libiptc.pc
+%{_libdir}/pkgconfig/xtables.pc
 
 %changelog
-* Sun May 31 2009 Sapan Bhatia <sapanb@cs.princeton.edu> - iptables-1.4.1.1-1
+* Wed Mar 24 2010 Thomas Woerner <twoerner@redhat.com> 1.4.7-2
+- added default values for IPTABLES_STATUS_VERBOSE and
+  IPTABLES_STATUS_LINENUMBERS in init script
+- added missing lsb keywords Required-Start and Required-Stop to init script
+
+* Fri Mar  5 2010 Thomas Woerner <twoerner@redhat.com> 1.4.7-1
+- new version 1.4.7 with support for all new features of 2.6.33 (rhbz#570767)
+  - libip4tc: Add static qualifier to dump_entry()
+  - libipq: build as shared library
+  - recent: reorder cases in code (cosmetic cleanup)
+  - several man page and documentation fixes
+  - policy: fix error message showing wrong option
+  - includes: header updates
+  - Lift restrictions on interface names
+- fixed license and moved iptables-xml into base package according to review
+
+* Wed Jan 27 2010 Thomas Woerner <twoerner@redhat.com> 1.4.6-2
+- moved libip*tc and libxtables libs to /lib[64], added symlinks for .so libs
+  to /usr/lib[64] for compatibility (rhbz#558796)
+
+* Wed Jan 13 2010 Thomas Woerner <twoerner@redhat.com> 1.4.6-1
+- new version 1.4.6 with support for all new features of 2.6.32
+  - several man page fixes
+  - Support for nommu arches
+  - realm: remove static initializations
+  - libiptc: remove unused functions
+  - libiptc: avoid strict-aliasing warnings
+  - iprange: do accept non-ranges for xt_iprange v1
+  - iprange: warn on reverse range
+  - iprange: roll address parsing into a loop
+  - iprange: do accept non-ranges for xt_iprange v1 (log)
+  - iprange: warn on reverse range (log)
+  - libiptc: fix wrong maptype of base chain counters on restore
+  - iptables: fix undersized deletion mask creation
+  - style: reduce indent in xtables_check_inverse
+  - libxtables: hand argv to xtables_check_inverse
+  - iptables/extensions: make bundled options work again
+  - CONNMARK: print mark rules with mask 0xffffffff as set instead of xset
+  - iptables: take masks into consideration for replace command
+  - doc: explain experienced --hitcount limit
+  - doc: name resolution clarification
+  - iptables: expose option to zero packet/byte counters for a specific rule
+  - build: restore --disable-ipv6 functionality on system w/o v6 headers
+  - MARK: print mark rules with mask 0xffffffff as --set-mark instead of --set-xmark
+  - DNAT: fix incorrect check during parsing
+  - extensions: add osf extension
+  - conntrack: fix --expires parsing
+
+* Thu Dec 17 2009 Thomas Woerner <twoerner@redhat.com> 1.4.5-2
+- dropped nf_ext_init remains from cloexec patch
+
+* Thu Sep 17 2009 Thomas Woerner <twoerner@redhat.com> 1.4.5-1
+- new version 1.4.5 with support for all new features of 2.6.31
+  - libxt_NFQUEUE: add new v1 version with queue-balance option
+  - xt_conntrack: revision 2 for enlarged state_mask member
+  - libxt_helper: fix invalid passed option to check_inverse
+  - libiptc: split v4 and v6
+  - extensions: collapse registration structures
+  - iptables: allow for parse-less extensions
+  - iptables: allow for help-less extensions
+  - extensions: remove empty help and parse functions
+  - xtables: add multi-registration functions
+  - extensions: collapse data variables to use multi-reg calls
+  - xtables: warn of missing version identifier in extensions
+  - multi binary: allow subcommand via argv[1]
+  - iptables: accept multiple IP address specifications for -s, -d
+  - several build fixes
+  - several man page fixes
+- fixed two leaked file descriptors on sockets (rhbz#521397)
+
+* Mon Aug 24 2009 Thomas Woerner <twoerner@redhat.com> 1.4.4-1
+- new version 1.4.4 with support for all new features of 2.6.30
+  - several man page fixes
+  - iptables: replace open-coded sizeof by ARRAY_SIZE
+  - libip6t_policy: remove redundant functions
+  - policy: use direct xt_policy_info instead of ipt/ip6t
+  - policy: merge ipv6 and ipv4 variant
+  - extensions: add `cluster' match support
+  - extensions: add const qualifiers in print/save functions
+  - extensions: use NFPROTO_UNSPEC for .family field
+  - extensions: remove redundant casts
+  - iptables: close open file descriptors
+  - fix segfault if incorrect protocol name is used
+  - replace open-coded sizeof by ARRAY_SIZE
+  - do not include v4-only modules in ip6tables manpage
+  - use direct xt_policy_info instead of ipt/ip6t
+  - xtables: fix segfault if incorrect protocol name is used
+  - libxt_connlimit: initialize v6_mask
+  - SNAT/DNAT: add support for persistent multi-range NAT mappings
+
+* Fri Jul 24 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.4.3.2-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
+
+* Wed Apr 15 2009 Thomas Woerner <twoerner@redhat.com> 1.4.3.2-1
+- new version 1.4.3.2
+- also install iptables/internal.h, needed for iptables.h and ip6tables.h
+
+* Mon Mar 30 2009 Thomas Woerner <twoerner@redhat.com> 1.4.3.1-1
+- new version 1.4.3.1
+  - libiptc is now shared
+  - supports all new features of the 2.6.29 kernel
+- dropped typo_latter patch
+
+* Thu Mar  5 2009 Thomas Woerner <twoerner@redhat.com> 1.4.2-3
+- still more review fixes (rhbz#225906)
+  - consistent macro usage
+  - use sed instead of perl for rpath removal
+  - use standard RPM CFLAGS, but also -fno-strict-aliasing (needed for libiptc*)
+
+* Wed Feb 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.4.2-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
+
+* Fri Feb 20 2009 Thomas Woerner <twoerner@redhat.com> 1.4.2-1
+- new version 1.4.2
+- removed TOS value mask patch (upstream)
+- more review fixes (rhbz#225906)
+- install all header files (rhbz#462207)
+- dropped nf_ext_init (rhbz#472548)
+
+* Tue Jul 22 2008 Thomas Woerner <twoerner@redhat.com> 1.4.1.1-2
+- fixed TOS value mask problem (rhbz#456244) (upstream patch)
+- two more cloexec fixes
+
+* Tue Jul  1 2008 Thomas Woerner <twoerner@redhat.com> 1.4.1.1-1
+- upstream bug fix release 1.4.1.1
+- dropped extra patch for 1.4.1 - not needed anymore
+
+* Tue Jun 10 2008 Thomas Woerner <twoerner@redhat.com> 1.4.1-1
+- new version 1.4.1 with new build environment
+- additional ipv6 network mask patch from Jan Engelhardt
+- spec file cleanup
+- removed old patches
+
+* Fri Jun  6 2008 Tom "spot" Callaway <tcallawa@redhat.com> 1.4.0-5
+- use normal kernel headers, not linux/compiler.h
+- change BuildRequires: kernel-devel to kernel-headers
+- We need to do this to be able to build for both sparcv9 and sparc64 
+  (there is no kernel-devel.sparcv9)
+
+* Thu Mar 20 2008 Thomas Woerner <twoerner@redhat.com> 1.4.0-4
+- use O_CLOEXEC for all opened files in all applications (rhbz#438189)
+
+* Mon Mar  3 2008 Thomas Woerner <twoerner@redhat.com> 1.4.0-3
+- use the kernel headers from the build tree for iptables for now to be able to 
+  compile this package, but this makes the package more kernel dependant
+- use s6_addr32 instead of in6_u.u6_addr32
+
+* Wed Feb 20 2008 Fedora Release Engineering <rel-eng@fedoraproject.org> - 1.4.0-2
+- Autorebuild for GCC 4.3
+
+* Mon Feb 11 2008 Thomas Woerner <twoerner@redhat.com> 1.4.0-1
+- new version 1.4.0
+- fixed condrestart (rhbz#428148)
+- report the module in rmmod_r if there is an error
+- use nf_ext_init instead of my_init for extension constructors
+
+* Mon Nov  5 2007 Thomas Woerner <twoerner@redhat.com> 1.3.8-6
+- fixed leaked file descriptor before fork/exec (rhbz#312191)
+- blacklisting is not working, use "install X /bin/(true|false)" test instead
+- return private exit code 150 for disabled ipv6 support
+- use script name for output messages
+
+* Tue Oct 16 2007 Thomas Woerner <twoerner@redhat.com> 1.3.8-5
+- fixed error code for stopping a already stopped firewall (rhbz#321751)
+- moved blacklist test into start
+
+* Wed Sep 26 2007 Thomas Woerner <twoerner@redhat.com> 1.3.8-4.1
+- do not start ip6tables if ipv6 is blacklisted (rhbz#236888)
+- use simpler fix for (rhbz#295611)
+  Thanks to Linus Torvalds for the patch.
+
+* Mon Sep 24 2007 Thomas Woerner <twoerner@redhat.com> 1.3.8-4
+- fixed IPv6 reject type (rhbz#295181)
+- fixed init script: start, stop and status
+- support netfilter compiled into kernel in init script (rhbz#295611)
+- dropped inversion for limit modules from man pages (rhbz#220780)
+- fixed typo in ip6tables man page (rhbz#236185)
+
+* Wed Sep 19 2007 Thomas Woerner <twoerner@redhat.com> 1.3.8-3
+- do not depend on local_fs in lsb header - this delayes start after network
+- fixed exit code for initscript usage
+
+* Mon Sep 17 2007 Thomas Woerner <twoerner@redhat.com> 1.3.8-2.1
+- do not use lock file for condrestart test
+
+* Thu Aug 23 2007 Thomas Woerner <twoerner@redhat.com> 1.3.8-2
+- fixed initscript for LSB conformance (rhbz#246953, rhbz#242459)
+- provide iptc interface again, but unsupported (rhbz#216733)
+- compile all extension, which are supported by the kernel-headers package
+- review fixes (rhbz#225906)
+
+* Tue Jul 31 2007 Thomas Woerner <twoerner@redhat.com>
+- reverted ipv6 fix, because it disables the ipv6 at all (rhbz#236888)
+
+* Fri Jul 13 2007 Steve Conklin <sconklin@redhat.com> - 1.3.8-1
+- New version 1.3.8
+
+* Mon Apr 23 2007 Jeremy Katz <katzj@redhat.com> - 1.3.7-2
+- fix error when ipv6 support isn't loaded in the kernel (#236888)
+
+* Wed Jan 10 2007 Thomas Woerner <twoerner@redhat.com> 1.3.7-1.1
+- fixed installation of secmark modules
+
+* Tue Jan  9 2007 Thomas Woerner <twoerner@redhat.com> 1.3.7-1
+- new verison 1.3.7
+- iptc is not a public interface and therefore not installed anymore
+- dropped upstream secmark patch
+
+* Thu Sep 19 2006 Thomas Woerner <twoerner@redhat.com> 1.3.5-2
+- added secmark iptables patches (#201573)
+
+* Wed Jul 12 2006 Jesse Keating <jkeating@redhat.com> - 1.3.5-1.2.1
+- rebuild
+
+* Fri Feb 10 2006 Jesse Keating <jkeating@redhat.com> - 1.3.5-1.2
+- bump again for double-long bug on ppc(64)
+
+* Tue Feb 07 2006 Jesse Keating <jkeating@redhat.com> - 1.3.5-1.1
+- rebuilt for new gcc4.1 snapshot and glibc changes
+
+* Thu Feb  2 2006 Thomas Woerner <twoerner@redhat.com> 1.3.5-1
+- new version 1.3.5
+- fixed init script to set policy for raw tables, too (#179094)
+
+* Tue Jan 24 2006 Thomas Woerner <twoerner@redhat.com> 1.3.4-3
+- added important iptables header files to devel package
+
+* Fri Dec 09 2005 Jesse Keating <jkeating@redhat.com>
+- rebuilt
+
+* Fri Nov 25 2005 Thomas Woerner <twoerner@redhat.com> 1.3.4-2
+- fix for plugin problem: link with "gcc -shared" instead of "ld -shared" and 
+  replace "_init" with "__attribute((constructor)) my_init"
+
+* Fri Nov 25 2005 Thomas Woerner <twoerner@redhat.com> 1.3.4-1.1
+- rebuild due to unresolved symbols in shared libraries
+
+* Fri Nov 18 2005 Thomas Woerner <twoerner@redhat.com> 1.3.4-1
+- new version 1.3.4
+- dropped free_opts patch (upstream fixed)
+- made libipq PIC (#158623)
+- additional configuration options for iptables startup script (#172929)
+  Thanks to Jan Gruenwald for the patch
+- spec file cleanup (dropped linux_header define and usage)
+
+* Mon Jul 18 2005 Thomas Woerner <twoerner@redhat.com> 1.3.2-1
+- new version 1.3.2 with additional patch for the misplaced free_opts call
+  from Marcus Sundberg
+
+* Wed May 11 2005 Thomas Woerner <twoerner@redhat.com> 1.3.1-1
+- new version 1.3.1
+
+* Fri Mar 18 2005 Thomas Woerner <twoerner@redhat.com> 1.3.0-2
+- Remove unnecessary explicit kernel dep (#146142)
+- Fixed out of bounds accesses (#131848): Thanks to Steve Grubb
+  for the patch
+- Adapted iptables-config to reference to modprobe.conf (#150143)
+- Remove misleading message (#140154): Thanks to Ulrich Drepper
+  for the patch
+
+* Mon Feb 21 2005 Thomas Woerner <twoerner@redhat.com> 1.3.0-1
+- new version 1.3.0
+
+* Thu Nov 11 2004 Thomas Woerner <twoerner@redhat.com> 1.2.11-3.2
+- fixed autoload problem in iptables and ip6tables (CAN-2004-0986)
+
+* Fri Sep 17 2004 Thomas Woerner <twoerner@redhat.com> 1.2.11-3.1
+- changed default behaviour for IPTABLES_STATUS_NUMERIC to "yes" (#129731)
+- modified config file to match this change and un-commented variables with
+  default values
+
+* Thu Sep 16 2004 Thomas Woerner <twoerner@redhat.com> 1.2.11-3
+- applied second part of cleanup patch from (#131848): thanks to Steve Grubb
+  for the patch
+
+* Wed Aug 25 2004 Thomas Woerner <twoerner@redhat.com> 1.2.11-2
+- fixed free bug in iptables (#128322)
+
+* Tue Jun 22 2004 Thomas Woerner <twoerner@redhat.com> 1.2.11-1
+- new version 1.2.11
+
+* Thu Jun 17 2004 Thomas Woerner <twoerner@redhat.com> 1.2.10-1
+- new version 1.2.10
+
+* Tue Jun 15 2004 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Tue Mar 02 2004 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Thu Feb 26 2004 Thomas Woerner <twoerner@redhat.com> 1.2.9-2.3
+- fixed iptables-restore -c fault if there are no counters (#116421)
+
+* Fri Feb 13 2004 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Sun Jan  25 2004 Dan Walsh <dwalsh@redhat.com> 1.2.9-1.2
+- Close File descriptors to prevent SELinux error message
+
+* Wed Jan  7 2004 Thomas Woerner <twoerner@redhat.com> 1.2.9-1.1
+- rebuild
+
+* Wed Dec 17 2003 Thomas Woerner <twoerner@redhat.com> 1.2.9-1
+- vew version 1.2.9
+- new config options in ipXtables-config:
+  IPTABLES_MODULES_UNLOAD
+- more documentation in ipXtables-config
+- fix for netlink security issue in libipq (devel package)
+- print fix for libipt_icmp (#109546)
+
+* Thu Oct 23 2003 Thomas Woerner <twoerner@redhat.com> 1.2.8-13
+- marked all messages in iptables init script for translation (#107462)
+- enabled devel package (#105884, #106101)
+- bumped build for fedora for libipt_recent.so (#106002)
+
+* Tue Sep 23 2003 Thomas Woerner <twoerner@redhat.com> 1.2.8-12.1
+- fixed lost udp port range in ip6tables-save (#104484)
+- fixed non numeric multiport port output in ipXtables-savs
+
+* Mon Sep 22 2003 Florian La Roche <Florian.LaRoche@redhat.de> 1.2.8-11
+- do not link against -lnsl
+
+* Wed Sep 17 2003 Thomas Woerner <twoerner@redhat.com> 1.2.8-10
+- made variables in rmmod_r local
+
+* Tue Jul 22 2003 Thomas Woerner <twoerner@redhat.com> 1.2.8-9
+- fixed permission for init script
+
+* Sat Jul 19 2003 Thomas Woerner <twoerner@redhat.com> 1.2.8-8
+- fixed save when iptables file is missing and iptables-config permissions
+
+* Tue Jul  8 2003 Thomas Woerner <twoerner@redhat.com> 1.2.8-7
+- fixes for ip6tables: module unloading, setting policy only for existing 
+  tables
+
+* Thu Jul  3 2003 Thomas Woerner <twoerner@redhat.com> 1.2.8-6
+- IPTABLES_SAVE_COUNTER defaults to no, now
+- install config file in /etc/sysconfig
+- exchange unload of ip_tables and ip_conntrack
+- fixed start function
+
+* Wed Jul  2 2003 Thomas Woerner <twoerner@redhat.com> 1.2.8-5
+- new config option IPTABLES_SAVE_ON_RESTART
+- init script: new status, save and restart
+- fixes #44905, #65389, #80785, #82860, #91040, #91560 and #91374
+
+* Mon Jun 30 2003 Thomas Woerner <twoerner@redhat.com> 1.2.8-4
+- new config option IPTABLES_STATUS_NUMERIC
+- cleared IPTABLES_MODULES in iptables-config
+
+* Mon Jun 30 2003 Thomas Woerner <twoerner@redhat.com> 1.2.8-3
+- new init scripts
+
+* Sat Jun 28 2003 Florian La Roche <Florian.LaRoche@redhat.de>
+- remove check for very old kernel versions in init scripts
+- sync up both init scripts and remove some further ugly things
+- add some docu into rpm
+
+* Thu Jun 26  2003 Thomas Woerner <twoerner@redhat.com> 1.2.8-2
+- rebuild
+
+* Mon Jun 16 2003 Thomas Woerner <twoerner@redhat.com> 1.2.8-1
+- update to 1.2.8
+
+* Wed Jan 22 2003 Tim Powers <timp@redhat.com>
+- rebuilt
+
+* Mon Jan 13 2003 Bill Nottingham <notting@redhat.com> 1.2.7a-1
+- update to 1.2.7a
+- add a plethora of bugfixes courtesy Michael Schwendt <mschewndt@yahoo.com>
+
+* Fri Dec 13 2002 Elliot Lee <sopwith@redhat.com> 1.2.6a-3
+- Fix multilib
+
+* Wed Aug 07 2002 Karsten Hopp <karsten@redhat.de>
+- fixed iptables and ip6tables initscript output, based on #70511
+- check return status of all iptables calls, not just the last one
+  in a 'for' loop.
+
+* Mon Jul 29 2002 Bernhard Rosenkraenzer <bero@redhat.com> 1.2.6a-1
+- 1.2.6a (bugfix release, #69747)
+
+* Fri Jun 21 2002 Tim Powers <timp@redhat.com>
+- automated rebuild
+
+* Thu May 23 2002 Tim Powers <timp@redhat.com>
+- automated rebuild
+
+* Mon Mar  4 2002 Bernhard Rosenkraenzer <bero@redhat.com> 1.2.5-3
+- Add some fixes from CVS, fixing bug #60465
+
+* Tue Feb 12 2002 Bernhard Rosenkraenzer <bero@redhat.com> 1.2.5-2
+- Merge ip6tables improvements from Ian Prowell <iprowell@prowell.org>
+  #59402
+- Update URL (#59354)
+- Use /sbin/chkconfig rather than chkconfig in %%postun script
+
+* Fri Jan 11 2002 Bernhard Rosenkraenzer <bero@redhat.com> 1.2.5-1
+- 1.2.5
+
+* Wed Jan 09 2002 Tim Powers <timp@redhat.com>
+- automated rebuild
+
+* Mon Nov  5 2001 Bernhard Rosenkraenzer <bero@redhat.com> 1.2.4-2
+- Fix %%preun script
+
+* Tue Oct 30 2001 Bernhard Rosenkraenzer <bero@redhat.com> 1.2.4-1
+- Update to 1.2.4 (various fixes, including security fixes; among others:
+  #42990, #50500, #53325, #54280)
+- Fix init script (#31133)
+
+* Mon Sep  3 2001 Bernhard Rosenkraenzer <bero@redhat.com> 1.2.3-1
+- 1.2.3 (5 security fixes, some other fixes)
+- Fix updating (#53032)
+
+* Mon Aug 27 2001 Bernhard Rosenkraenzer <bero@redhat.com> 1.2.2-4
+- Fix #50990
+- Add some fixes from current CVS; should fix #52620
+
+* Mon Jul 16 2001 Bernhard Rosenkraenzer <bero@redhat.com> 1.2.2-3
+- Add some fixes from the current CVS tree; fixes #49154 and some IPv6
+  issues
+
+* Tue Jun 26 2001 Bernhard Rosenkraenzer <bero@redhat.com> 1.2.2-2
+- Fix iptables-save reject-with (#45632), Patch from Michael Schwendt
+  <mschwendt@yahoo.com>
+
+* Tue May  8 2001 Bernhard Rosenkraenzer <bero@redhat.com> 1.2.2-1
+- 1.2.2
+
+* Wed Mar 21 2001 Bernhard Rosenkraenzer <bero@redhat.com>
+- 1.2.1a, fixes #28412, #31136, #31460, #31133
+
+* Thu Mar  1 2001 Bernhard Rosenkraenzer <bero@redhat.com>
+- Yet another initscript fix (#30173)
+- Fix the fixes; they fixed some issues but broke more important
+  stuff :/ (#30176)
+
+* Tue Feb 27 2001 Bernhard Rosenkraenzer <bero@redhat.com>
+- Fix up initscript (#27962)
+- Add fixes from CVS to iptables-{restore,save}, fixing #28412
+
+* Fri Feb 09 2001 Karsten Hopp <karsten@redhat.de>
+- create /etc/sysconfig/iptables mode 600 (same problem as #24245)
+
+* Mon Feb 05 2001 Karsten Hopp <karsten@redhat.de>
+- fix bugzilla #25986 (initscript not marked as config file)
+- fix bugzilla #25962 (iptables-restore)
+- mv chkconfig --del from postun to preun
+
+* Thu Feb  1 2001 Trond Eivind Glomsrød <teg@redhat.com>
+- Fix check for ipchains
+
+* Mon Jan 29 2001 Bernhard Rosenkraenzer <bero@redhat.com>
+- Some fixes to init scripts
+
+* Wed Jan 24 2001 Bernhard Rosenkraenzer <bero@redhat.com>
+- Add some fixes from CVS, fixes among other things Bug #24732
+
+* Wed Jan 17 2001 Bernhard Rosenkraenzer <bero@redhat.com>
+- Add missing man pages, fix up init script (Bug #17676)
+
+* Mon Jan 15 2001 Bill Nottingham <notting@redhat.com>
+- add init script
+
+* Mon Jan 15 2001 Bernhard Rosenkraenzer <bero@redhat.com>
+- 1.2
+- fix up ipv6 split
+- add init script
+- Move the plugins from /usr/lib/iptables to /lib/iptables.
+  This needs to work before /usr is mounted...
+- Use -O1 on alpha (compiler bug)
+
+* Sat Jan  6 2001 Bernhard Rosenkraenzer <bero@redhat.com>
+- 1.1.2
+- Add IPv6 support (in separate package)
+
+* Thu Aug 17 2000 Bill Nottingham <notting@redhat.com>
+- build everywhere
+
+* Tue Jul 25 2000 Bernhard Rosenkraenzer <bero@redhat.com>
+- 1.1.1
+
+* Thu Jul 13 2000 Prospector <bugzilla@redhat.com>
+- automatic rebuild
+
+* Tue Jun 27 2000 Preston Brown <pbrown@redhat.com>
+- move iptables to /sbin.
+- excludearch alpha for now, not building there because of compiler bug(?)
+
+* Fri Jun  9 2000 Bill Nottingham <notting@redhat.com>
+- don't obsolete ipchains either
+- update to 1.1.0
+
+* Mon Jun  4 2000 Bill Nottingham <notting@redhat.com>
+- remove explicit kernel requirement
 
-* Sun Feb 22 2009 Sapan Bhatia <sapanb@cs.princeton.edu>
-- Checking in initial version of iptables 1.4.1.1
+* Tue May  2 2000 Bernhard Rosenkränzer <bero@redhat.com>
+- initial package
diff --git a/iptables.xslt b/iptables.xslt
deleted file mode 100644 (file)
index d6a432c..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!-- Converts from simple xml iptables format to iptables-save format  
-     Copyright 2006 UfoMechanic 
-     Author: azez@ufomechanic.net 
-     This code is distributed and licensed under the terms of GNU GPL v2
-     
-     This sample usage outputs roughly want goes in
-       iptables-save | iptables-xml -c | xsltproc iptables.xslt -
-     -->
-<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-  <xsl:output method = "text" />
-  <xsl:strip-space elements="*" />
-
-  <!-- output conditions of a rule but not an action -->
-  <xsl:template match="iptables-rules/table/chain/rule/conditions/*">
-    <!-- <match> is the psuedo module when a match module doesn't need to be loaded
-         and when -m does not need to be inserted -->
-    <xsl:if test="name() != 'match'">
-      <xsl:text> -m </xsl:text><xsl:value-of select="name()"/>
-    </xsl:if>
-    <xsl:apply-templates select="node()"/>
-  </xsl:template>
-
-  <!-- delete the actions or conditions containers, and process child nodes -->
-  <xsl:template match="iptables-rules/table/chain/rule/actions|table/chain/rule/conditions">
-    <xsl:apply-templates select="*"/>
-  </xsl:template>
-
-  <xsl:template match="iptables-rules/table/chain/rule/actions/goto">
-    <xsl:text> -g </xsl:text>
-    <xsl:apply-templates select="*"/>
-    <xsl:text>&#xA;</xsl:text>
-  </xsl:template>
-  <xsl:template match="iptables-rules/table/chain/rule/actions/call">
-    <xsl:text> -j </xsl:text>
-    <xsl:apply-templates select="*"/>
-    <xsl:text>&#xA;</xsl:text>
-  </xsl:template>
-  <!-- all other actions are module actions -->
-  <xsl:template match="iptables-rules/table/chain/rule/actions/*">
-    <xsl:text> -j </xsl:text><xsl:value-of select="name()"/>
-    <xsl:apply-templates select="*"/>
-    <xsl:text>&#xA;</xsl:text>
-  </xsl:template>
-  
-  <!-- all child action nodes -->
-  <xsl:template match="iptables-rules/table/chain/rule/actions//*|iptables-rules/table/chain/rule/conditions//*" priority="0">
-    <xsl:if test="@invert=1"><xsl:text> !</xsl:text></xsl:if>
-    <xsl:text> -</xsl:text>
-    <!-- if length of name is 1 character, then only do 1 - not 2 -->
-    <xsl:if test="string-length(name())&gt;1">
-      <xsl:text>-</xsl:text>
-    </xsl:if>
-    <xsl:value-of select="name()"/>
-    <xsl:text> </xsl:text>
-    <xsl:apply-templates select="node()"/>
-  </xsl:template>
-
-  <xsl:template match="iptables-rules/table/chain/rule/actions/call/*|iptables-rules/table/chain/rule/actions/goto/*">
-    <xsl:value-of select="name()"/>
-    <!-- I bet there are no child nodes, should we risk it? -->
-    <xsl:apply-templates select="node()"/>
-  </xsl:template>
-
-  <!-- output the head of the rule, and any conditions -->
-  <xsl:template name="rule-head">
-    <xsl:if test="string-length(@packet-count)+string-length(@byte-count)">
-      <xsl:call-template name="counters"><xsl:with-param name="node" select="."/></xsl:call-template>
-      <xsl:text> </xsl:text>
-    </xsl:if>
-    <xsl:text>-A </xsl:text><!-- a rule must be under a chain -->
-    <xsl:value-of select="../@name" />
-    <xsl:apply-templates select="conditions"/>
-  </xsl:template>
-
-  <!-- Output a single rule, perhaps as multiple rules if we have more than one action -->
-  <xsl:template match="iptables-rules/table/chain/rule">
-    <xsl:choose>
-      <xsl:when test="count(actions/*)&gt;0">
-        <xsl:for-each select="actions/*">
-          <!-- and a for-each to re-select the rule as the current node, to write the rule-head -->
-          <xsl:for-each select="../..">
-            <xsl:call-template name="rule-head"/>
-          </xsl:for-each>
-          <!-- now write the this action -->
-          <xsl:apply-templates select="."/>
-        </xsl:for-each>
-      </xsl:when>
-      <xsl:otherwise>
-        <!-- no need to loop if there are no actions, just output conditions -->
-        <xsl:call-template name="rule-head"/>
-        <xsl:text>&#xA;</xsl:text>
-      </xsl:otherwise>
-    </xsl:choose>
-  </xsl:template>
-
-  <xsl:template match="iptables-rules/table">
-    <xsl:text># Generated by iptables.xslt&#xA;</xsl:text>
-    <xsl:text>*</xsl:text><xsl:value-of select="@name"/><xsl:text>&#xA;</xsl:text>
-    <!-- Loop through each chain and output the chain header -->
-    <xsl:for-each select="chain">
-      <xsl:text>:</xsl:text>
-      <xsl:value-of select="@name"/>
-      <xsl:text> </xsl:text>
-      <xsl:choose>
-        <xsl:when test="not(string-length(@policy))"><xsl:text>-</xsl:text></xsl:when>
-        <xsl:otherwise><xsl:value-of select="@policy"/></xsl:otherwise>
-      </xsl:choose>
-      <xsl:text> </xsl:text>
-      <xsl:call-template name="counters"><xsl:with-param name="node" select="."/></xsl:call-template>
-      <xsl:text>&#xA;</xsl:text>
-    </xsl:for-each>
-    <!-- Loop through each chain and output the rules -->
-    <xsl:apply-templates select="node()"/>
-    <xsl:text>COMMIT&#xA;# Completed&#xA;</xsl:text>
-  </xsl:template>
-  
-  <xsl:template name="counters">
-    <xsl:param name="node"/>
-    <xsl:text>[</xsl:text>
-    <xsl:if test="string-length($node/@packet-count)"><xsl:value-of select="$node/@packet-count"/></xsl:if>
-    <xsl:if test="string-length($node/@packet-count)=0">0</xsl:if>
-    <xsl:text>:</xsl:text>
-    <xsl:if test="string-length($node/@byte-count)"><xsl:value-of select="$node/@byte-count"/></xsl:if>
-    <xsl:if test="string-length($node/@byte-count)=0">0</xsl:if>
-    <xsl:text>]</xsl:text>
-  </xsl:template>  
-  
-  <!-- the bit that automatically recurses for us, NOTE: we use * not node(), we don't want to copy every white space text -->
-  <xsl:template match="@*|node()">
-    <xsl:copy>
-      <!-- with libxslt xsltproc we can't do @*|node() or the nodes may get processed before the attributes -->
-      <xsl:apply-templates select="@*"/>
-      <xsl:apply-templates select="node()"/>
-    </xsl:copy>
-  </xsl:template>
-
-</xsl:transform>
diff --git a/libipq/Makefile.am b/libipq/Makefile.am
deleted file mode 100644 (file)
index d4245e7..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-# -*- Makefile -*-
-
-AM_CFLAGS = ${regular_CFLAGS} -I${top_builddir}/include -I${top_srcdir}/include
-
-libipq_a_SOURCES = libipq.c
-lib_LIBRARIES    = libipq.a
-include_HEADERS  = ${top_srcdir}/include/libipq/libipq.h
-man_MANS         = ipq_create_handle.3 ipq_destroy_handle.3 ipq_errstr.3 \
-                   ipq_get_msgerr.3 ipq_get_packet.3 ipq_message_type.3 \
-                   ipq_perror.3 ipq_read.3 ipq_set_mode.3 ipq_set_verdict.3 \
-                   libipq.3
diff --git a/libipq/Makefile.in b/libipq/Makefile.in
deleted file mode 100644 (file)
index c838bf9..0000000
+++ /dev/null
@@ -1,564 +0,0 @@
-# Makefile.in generated by automake 1.9.6 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005  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@
-
-# -*- Makefile -*-
-
-
-srcdir = @srcdir@
-top_srcdir = @top_srcdir@
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-top_builddir = ..
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-INSTALL = @INSTALL@
-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 = libipq
-DIST_COMMON = $(include_HEADERS) $(srcdir)/Makefile.am \
-       $(srcdir)/Makefile.in
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-       $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_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 = `echo $$p | sed -e 's|^.*/||'`;
-am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(man3dir)" \
-       "$(DESTDIR)$(includedir)"
-libLIBRARIES_INSTALL = $(INSTALL_DATA)
-LIBRARIES = $(lib_LIBRARIES)
-ARFLAGS = cru
-libipq_a_AR = $(AR) $(ARFLAGS)
-libipq_a_LIBADD =
-am_libipq_a_OBJECTS = libipq.$(OBJEXT)
-libipq_a_OBJECTS = $(am_libipq_a_OBJECTS)
-DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \
-       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-       $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-       $(AM_LDFLAGS) $(LDFLAGS) -o $@
-SOURCES = $(libipq_a_SOURCES)
-DIST_SOURCES = $(libipq_a_SOURCES)
-man3dir = $(mandir)/man3
-NROFF = nroff
-MANS = $(man_MANS)
-includeHEADERS_INSTALL = $(INSTALL_HEADER)
-HEADERS = $(include_HEADERS)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMDEP_FALSE = @AMDEP_FALSE@
-AMDEP_TRUE = @AMDEP_TRUE@
-AMTAR = @AMTAR@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DSYMUTIL = @DSYMUTIL@
-ECHO = @ECHO@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-ENABLE_DEVEL_FALSE = @ENABLE_DEVEL_FALSE@
-ENABLE_DEVEL_TRUE = @ENABLE_DEVEL_TRUE@
-ENABLE_LIBIPQ_FALSE = @ENABLE_LIBIPQ_FALSE@
-ENABLE_LIBIPQ_TRUE = @ENABLE_LIBIPQ_TRUE@
-ENABLE_SHARED_FALSE = @ENABLE_SHARED_FALSE@
-ENABLE_SHARED_TRUE = @ENABLE_SHARED_TRUE@
-ENABLE_STATIC_FALSE = @ENABLE_STATIC_FALSE@
-ENABLE_STATIC_TRUE = @ENABLE_STATIC_TRUE@
-EXEEXT = @EXEEXT@
-F77 = @F77@
-FFLAGS = @FFLAGS@
-GREP = @GREP@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-LDFLAGS = @LDFLAGS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-NMEDIT = @NMEDIT@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-VERSION = @VERSION@
-XTABLES_VERSION_EXTRA = @XTABLES_VERSION_EXTRA@
-XTABLES_VERSION_MAJOR = @XTABLES_VERSION_MAJOR@
-XTABLES_VERSION_MINOR = @XTABLES_VERSION_MINOR@
-XTABLES_VERSION_PATCH = @XTABLES_VERSION_PATCH@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_F77 = @ac_ct_F77@
-am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
-am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
-am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
-am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-blacklist_modules = @blacklist_modules@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-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@
-kbuilddir = @kbuilddir@
-kinclude_CFLAGS = @kinclude_CFLAGS@
-ksourcedir = @ksourcedir@
-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@
-regular_CFLAGS = @regular_CFLAGS@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-xtlibdir = @xtlibdir@
-AM_CFLAGS = ${regular_CFLAGS} -I${top_builddir}/include -I${top_srcdir}/include
-libipq_a_SOURCES = libipq.c
-lib_LIBRARIES = libipq.a
-include_HEADERS = ${top_srcdir}/include/libipq/libipq.h
-man_MANS = ipq_create_handle.3 ipq_destroy_handle.3 ipq_errstr.3 \
-                   ipq_get_msgerr.3 ipq_get_packet.3 ipq_message_type.3 \
-                   ipq_perror.3 ipq_read.3 ipq_set_mode.3 ipq_set_verdict.3 \
-                   libipq.3
-
-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 \
-               && exit 0; \
-             exit 1;; \
-         esac; \
-       done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  libipq/Makefile'; \
-       cd $(top_srcdir) && \
-         $(AUTOMAKE) --gnu  libipq/Makefile
-.PRECIOUS: 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
-install-libLIBRARIES: $(lib_LIBRARIES)
-       @$(NORMAL_INSTALL)
-       test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)"
-       @list='$(lib_LIBRARIES)'; for p in $$list; do \
-         if test -f $$p; then \
-           f=$(am__strip_dir) \
-           echo " $(libLIBRARIES_INSTALL) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
-           $(libLIBRARIES_INSTALL) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
-         else :; fi; \
-       done
-       @$(POST_INSTALL)
-       @list='$(lib_LIBRARIES)'; for p in $$list; do \
-         if test -f $$p; then \
-           p=$(am__strip_dir) \
-           echo " $(RANLIB) '$(DESTDIR)$(libdir)/$$p'"; \
-           $(RANLIB) "$(DESTDIR)$(libdir)/$$p"; \
-         else :; fi; \
-       done
-
-uninstall-libLIBRARIES:
-       @$(NORMAL_UNINSTALL)
-       @list='$(lib_LIBRARIES)'; for p in $$list; do \
-         p=$(am__strip_dir) \
-         echo " rm -f '$(DESTDIR)$(libdir)/$$p'"; \
-         rm -f "$(DESTDIR)$(libdir)/$$p"; \
-       done
-
-clean-libLIBRARIES:
-       -test -z "$(lib_LIBRARIES)" || rm -f $(lib_LIBRARIES)
-libipq.a: $(libipq_a_OBJECTS) $(libipq_a_DEPENDENCIES) 
-       -rm -f libipq.a
-       $(libipq_a_AR) libipq.a $(libipq_a_OBJECTS) $(libipq_a_LIBADD)
-       $(RANLIB) libipq.a
-
-mostlyclean-compile:
-       -rm -f *.$(OBJEXT)
-
-distclean-compile:
-       -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libipq.Po@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(COMPILE) -c $<
-
-.c.obj:
-@am__fastdepCC_TRUE@   if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
-@am__fastdepCC_TRUE@   if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
-@am__fastdepCC_TRUE@   then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
-
-mostlyclean-libtool:
-       -rm -f *.lo
-
-clean-libtool:
-       -rm -rf .libs _libs
-
-distclean-libtool:
-       -rm -f libtool
-uninstall-info-am:
-install-man3: $(man3_MANS) $(man_MANS)
-       @$(NORMAL_INSTALL)
-       test -z "$(man3dir)" || $(mkdir_p) "$(DESTDIR)$(man3dir)"
-       @list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \
-       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-       for i in $$l2; do \
-         case "$$i" in \
-           *.3*) list="$$list $$i" ;; \
-         esac; \
-       done; \
-       for i in $$list; do \
-         if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
-         else file=$$i; fi; \
-         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-         case "$$ext" in \
-           3*) ;; \
-           *) ext='3' ;; \
-         esac; \
-         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-         inst=`echo $$inst | sed -e 's/^.*\///'`; \
-         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-         echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \
-         $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst"; \
-       done
-uninstall-man3:
-       @$(NORMAL_UNINSTALL)
-       @list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \
-       l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-       for i in $$l2; do \
-         case "$$i" in \
-           *.3*) list="$$list $$i" ;; \
-         esac; \
-       done; \
-       for i in $$list; do \
-         ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-         case "$$ext" in \
-           3*) ;; \
-           *) ext='3' ;; \
-         esac; \
-         inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-         inst=`echo $$inst | sed -e 's/^.*\///'`; \
-         inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-         echo " rm -f '$(DESTDIR)$(man3dir)/$$inst'"; \
-         rm -f "$(DESTDIR)$(man3dir)/$$inst"; \
-       done
-install-includeHEADERS: $(include_HEADERS)
-       @$(NORMAL_INSTALL)
-       test -z "$(includedir)" || $(mkdir_p) "$(DESTDIR)$(includedir)"
-       @list='$(include_HEADERS)'; for p in $$list; do \
-         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-         f=$(am__strip_dir) \
-         echo " $(includeHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(includedir)/$$f'"; \
-         $(includeHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(includedir)/$$f"; \
-       done
-
-uninstall-includeHEADERS:
-       @$(NORMAL_UNINSTALL)
-       @list='$(include_HEADERS)'; for p in $$list; do \
-         f=$(am__strip_dir) \
-         echo " rm -f '$(DESTDIR)$(includedir)/$$f'"; \
-         rm -f "$(DESTDIR)$(includedir)/$$f"; \
-       done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-       list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '    { files[$$0] = 1; } \
-              END { for (i in files) print i; }'`; \
-       mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       tags=; \
-       here=`pwd`; \
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '    { files[$$0] = 1; } \
-              END { for (i in files) print i; }'`; \
-       if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-         test -n "$$unique" || unique=$$empty_fix; \
-         $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-           $$tags $$unique; \
-       fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-               $(TAGS_FILES) $(LISP)
-       tags=; \
-       here=`pwd`; \
-       list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-       unique=`for i in $$list; do \
-           if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-         done | \
-         $(AWK) '    { files[$$0] = 1; } \
-              END { for (i in files) print i; }'`; \
-       test -z "$(CTAGS_ARGS)$$tags$$unique" \
-         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-            $$tags $$unique
-
-GTAGS:
-       here=`$(am__cd) $(top_builddir) && pwd` \
-         && cd $(top_srcdir) \
-         && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
-       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-       $(mkdir_p) $(distdir)/${top_srcdir}/include/libipq
-       @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
-       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
-       list='$(DISTFILES)'; for file in $$list; do \
-         case $$file in \
-           $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
-           $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
-         esac; \
-         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-         dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
-         if test "$$dir" != "$$file" && test "$$dir" != "."; then \
-           dir="/$$dir"; \
-           $(mkdir_p) "$(distdir)$$dir"; \
-         else \
-           dir=''; \
-         fi; \
-         if test -d $$d/$$file; then \
-           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-             cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-           fi; \
-           cp -pR $$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 $(LIBRARIES) $(MANS) $(HEADERS)
-installdirs:
-       for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(includedir)"; 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:
-       $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-         install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-         `test -z '$(STRIP)' || \
-           echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_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-libLIBRARIES clean-libtool \
-       mostlyclean-am
-
-distclean: distclean-am
-       -rm -rf ./$(DEPDIR)
-       -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-       distclean-libtool distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am: install-includeHEADERS install-man
-
-install-exec-am: install-libLIBRARIES
-
-install-info: install-info-am
-
-install-man: install-man3
-
-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-includeHEADERS uninstall-info-am \
-       uninstall-libLIBRARIES uninstall-man
-
-uninstall-man: uninstall-man3
-
-.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
-       clean-libLIBRARIES clean-libtool ctags 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-exec \
-       install-exec-am install-includeHEADERS install-info \
-       install-info-am install-libLIBRARIES install-man install-man3 \
-       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 uninstall uninstall-am \
-       uninstall-includeHEADERS uninstall-info-am \
-       uninstall-libLIBRARIES uninstall-man uninstall-man3
-
-# 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/libipq/ipq_create_handle.3 b/libipq/ipq_create_handle.3
deleted file mode 100644 (file)
index c833e88..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-.TH IPQ_CREATE_HANDLE 3 "16 October 2001" "Linux iptables 1.2" "Linux Programmer's Manual" 
-.\"
-\" $Id: ipq_create_handle.3,v 1.2 2001/10/16 14:41:02 jamesm Exp $
-.\"
-.\"     Copyright (c) 2000-2001 Netfilter Core Team
-.\"
-.\"     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 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, write to the Free Software
-.\"     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-.\"
-.\"
-.SH NAME
-ipq_create_handle, ipq_destroy_handle - create and destroy libipq handles.
-.SH SYNOPSIS
-.B #include <linux/netfilter.h>
-.br
-.B #include <libipq.h>
-.sp
-.BI "struct ipq_handle *ipq_create_handle(u_int32_t " flags ", u_int32_t " protocol ");"
-.br
-.BI "int ipq_destroy_handle(struct ipq_handle *" h );
-.SH DESCRIPTION
-The
-.B ipq_create_handle
-function initialises libipq for an application, attempts to bind to the
-Netlink socket used by ip_queue, and returns an opaque context handle.  It
-should be the first libipq function to be called by an application.  The
-handle returned should be used in all subsequent library calls which 
-require a handle parameter.
-.PP
-The
-.I flags
-parameter is not currently used and should be set to zero by the application
-for forward compatibility.
-.PP
-The
-.I protocol
-parameter is used to specify the protocol of the packets to be queued.
-Valid values are PF_INET for IPv4 and PF_INET6 for IPv6.  Currently, 
-only one protocol may be queued at a time for a handle.
-.PP
-The
-.B ipq_destroy_handle
-function frees up resources allocated by
-.BR ipq_create_handle ,
-and should be used when the handle is no longer required by the application.
-.SH RETURN VALUES
-On success,
-.B ipq_create_handle
-returns a pointer to a context handle.
-.br
-On failure, NULL is returned.
-.PP
-On success,
-.B ipq_destroy_handle
-returns zero.
-.br
-On failure, -1 is returned.
-.SH ERRORS
-On failure, a descriptive error message will be available
-via the
-.B ipq_errstr
-function.
-.SH BUGS
-None known.
-.SH AUTHOR
-James Morris <jmorris@intercode.com.au>
-.SH COPYRIGHT
-Copyright (c) 2000-2001 Netfilter Core Team.
-.PP
-Distributed under the GNU General Public License.
-.SH SEE ALSO
-.BR iptables (8),
-.BR libipq (3).
diff --git a/libipq/ipq_destroy_handle.3 b/libipq/ipq_destroy_handle.3
deleted file mode 100644 (file)
index 29dcd98..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ipq_create_handle.3
diff --git a/libipq/ipq_errstr.3 b/libipq/ipq_errstr.3
deleted file mode 100644 (file)
index 9661469..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-.TH IPQ_ERRSTR 3 "16 October 2001" "Linux iptables 1.2" "Linux Programmer's Manual" 
-.\"
-.\" $Id: ipq_errstr.3,v 1.1 2000/11/20 14:13:32 jamesm Exp $
-.\"
-.\"     Copyright (c) 2000 Netfilter Core Team
-.\"
-.\"     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 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, write to the Free Software
-.\"     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-.\"
-.\"
-.SH NAME
-ipq_errstr, ipq_perror - libipq error handling routines
-.SH SYNOPSIS
-.B #include <linux/netfilter.h>
-.br
-.B #include <libipq.h>
-.sp
-.BI "char *ipq_errstr(" void );
-.br
-.BI "void ipq_perror(const char *" s );
-.SH DESCRIPTION
-The
-.B ipq_errstr
-function returns a descriptive error message based on the current
-value of the internal
-.B ipq_errno
-variable.  All libipq API functions set this internal variable
-upon failure.
-.PP
-The
-.B ipq_perror
-function prints an error message to stderr corresponding to the
-current value of the internal
-.B ipq_error
-variable, and the global
-.B errno
-variable (if set).  The error message is prefixed with the string
-.I s
-as supplied by the application. If
-.I s
-is NULL, the error message is prefixed with the string "ERROR".
-.SH RETURN VALUE
-.B ipq_errstr
-returns an error message as outlined above.
-.SH BUGS
-None known.
-.SH AUTHOR
-James Morris <jmorris@intercode.com.au>
-.SH COPYRIGHT
-Copyright (c) 2000-2001 Netfilter Core Team.
-.PP
-Distributed under the GNU General Public License.
-.SH SEE ALSO
-.BR iptables (8),
-.BR libipq (3).
diff --git a/libipq/ipq_get_msgerr.3 b/libipq/ipq_get_msgerr.3
deleted file mode 100644 (file)
index 8a28be3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ipq_message_type.3
diff --git a/libipq/ipq_get_packet.3 b/libipq/ipq_get_packet.3
deleted file mode 100644 (file)
index 8a28be3..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ipq_message_type.3
diff --git a/libipq/ipq_message_type.3 b/libipq/ipq_message_type.3
deleted file mode 100644 (file)
index 0594518..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-.TH IPQ_MESSAGE_TYPE 3 "16 October 2001" "Linux iptables 1.2" "Linux Programmer's Manual" 
-.\"
-.\" $Id: ipq_message_type.3,v 1.1 2000/11/20 14:13:32 jamesm Exp $
-.\"
-.\"     Copyright (c) 2000-2001 Netfilter Core Team
-.\"
-.\"     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 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, write to the Free Software
-.\"     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-.\"
-.\"
-.SH NAME
-ipq_message_type, ipq_get_packet, ipq_getmsgerr - query queue messages
-.SH SYNOPSIS
-.B #include <linux/netfilter.h>
-.br
-.B #include <libipq.h>
-.sp
-.BI "int ipq_message_type(const unsigned char *" buf ");"
-.br
-.BI "ipq_packet_msg_t *ipq_get_packet(const unsigned char *" buf ");"
-.br
-.BI "int ipq_get_msgerr(const unsigned char *" buf ");"
-.SH DESCRIPTION
-The
-.B ipq_message_type
-function returns the type of queue message returned to userspace
-via
-.BR ipq_read .
-.PP
-.B ipq_message_type
-should always be called following a successful call to
-.B ipq_read
-to determine whether the message is a packet message or an
-error message. The
-.I buf
-parameter should be the same data obtained from
-the previous call to
-.BR ipq_read .
-.PP
-.B ipq_message_type
-will return one of the following values:
-.TP
-.B NLMSG_ERROR
-An error message generated by the Netlink transport.
-.PP
-.TP
-.B IPQM_PACKET
-A packet message containing packet metadata and optional packet payload data.
-.PP
-The
-.B ipq_get_packet
-function should be called if
-.B ipq_message_type
-returns
-.BR IPQM_PACKET .
-The
-.I buf
-parameter should point to the same data used for the call to
-.BR ipq_message_type .
-The pointer returned by
-.B ipq_get_packet
-points to a packet message, which is declared as follows:
-.PP
-.RS
-.nf
-typedef struct ipq_packet_msg {
-       unsigned long packet_id;        /* ID of queued packet */
-       unsigned long mark;             /* Netfilter mark value */
-       long timestamp_sec;             /* Packet arrival time (seconds) */
-       long timestamp_usec;            /* Packet arrvial time (+useconds) */
-       unsigned int hook;              /* Netfilter hook we rode in on */
-       char indev_name[IFNAMSIZ];      /* Name of incoming interface */
-       char outdev_name[IFNAMSIZ];     /* Name of outgoing interface */
-       unsigned short hw_protocol;     /* Hardware protocol (network order) */
-       unsigned short hw_type;         /* Hardware type */
-       unsigned char hw_addrlen;       /* Hardware address length */
-       unsigned char hw_addr[8];       /* Hardware address */
-       size_t data_len;                /* Length of packet data */
-       unsigned char payload[0];       /* Optional packet data */
-} ipq_packet_msg_t;
-.fi
-.RE
-.PP
-Each of these fields may be read by the application.  If the queue mode
-is
-.B IPQ_COPY_PACKET
-and the
-.I data_len
-value is greater than zero, the packet payload contents may be accessed
-in the memory following the
-.B ipq_packet_msg_t
-structure to a range of
-.I data_len.
-.PP
-The
-.I packet_id
-field contains a packet identifier to be used when calling
-.BR ipq_set_verdict .
-.PP
-The
-.B ipq_get_msgerr
-function should be called if
-.B ipq_message_type
-returns
-.BR NLMSG_ERROR.
-The
-.I buf
-parameter should point to the same data used for the call to
-.BR ipq_message_type .
-The value returned by
-.B ipq_get_msgerr
-is set by higher level kernel code and corresponds to standard
-.B errno
-values.
-.SH BUGS
-None known.
-.SH AUTHOR
-James Morris <jmorris@intercode.com.au>
-.SH COPYRIGHT
-Copyright (c) 2000-2001 Netfilter Core Team.
-.PP
-Distributed under the GNU General Public License.
-.SH SEE ALSO
-.BR iptables (8),
-.BR libipq (3).
diff --git a/libipq/ipq_perror.3 b/libipq/ipq_perror.3
deleted file mode 100644 (file)
index 6efd53d..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.so man3/ipq_errstr.3
diff --git a/libipq/ipq_read.3 b/libipq/ipq_read.3
deleted file mode 100644 (file)
index 5d96737..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-.TH IPQ_READ 3 "16 October 2001" "Linux iptables 1.2" "Linux Programmer's Manual" 
-.\"
-.\" $Id: ipq_read.3,v 1.2 2001/10/16 14:41:02 jamesm Exp $
-.\"
-.\"     Copyright (c) 2000-2001 Netfilter Core Team
-.\"
-.\"     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 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, write to the Free Software
-.\"     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-.\"
-.\"
-.SH NAME
-ipq_read - read queue messages from ip_queue and read into supplied buffer
-.SH SYNOPSIS
-.B #include <linux/netfilter.h>
-.br
-.B #include <libipq.h>
-.sp
-.BI "ssize_t ipq_read(const struct ipq_handle *" h ", unsigned char *" buf ", size_t " len ", int " timeout ");"
-.SH DESCRIPTION
-The
-.B ipq_read
-function reads a queue message from the kernel and copies it to
-the memory pointed to by 
-.I buf
-to a maximum length of
-. IR len .
-.PP
-The
-.I h
-parameter is a context handle which must previously have been returned 
-successfully from a call to
-.BR ipq_create_handle .
-.PP
-The caller is responsible for ensuring that the memory pointed to by
-.I buf
-is large enough to contain
-.I len
-bytes.
-.PP
-The
-.I timeout
-parameter may be used to set a timeout for the operation, specified in microseconds.
-This is implemented internally by the library via the
-.BR select
-system call.  A value of zero provides normal, backwards-compatible blocking behaviour
-with no timeout.  A negative value causes the function to return immediately.
-.PP
-Data returned via
-.I buf
-should not be accessed directly.  Use the 
-.BR ipq_message_type ,
-.BR ipq_get_packet ", and"
-.BR ipq_get_msgerr
-functions to access the queue message in the buffer.
-.SH RETURN VALUE
-On failure, -1 is returned.
-.br
-On success, a non-zero positive value is returned when no timeout
-value is specified.
-.br
-On success with a timeout value specified, zero is returned if no data
-was available to read, or if a non-blocked signal was caught.  In the
-latter case, the global
-.B errno
-value will be set to 
-.BR EINTR .
-.SH ERRORS
-On error, a descriptive error message will be available
-via the
-.B ipq_errstr
-function.
-.SH DIAGNOSTICS
-While the
-.B ipq_read
-function may return successfully, the queue message copied to the buffer
-may itself be an error message from a higher level kernel component.  Use
-.B ipq_message_type
-to determine if it is an error message, and
-.B ipq_get_msgerr
-to access the value of the message.
-.SH BUGS
-None known.
-.SH AUTHOR
-James Morris <jmorris@intercode.com.au>
-.SH COPYRIGHT
-Copyright (c) 2000-2001 Netfilter Core Team.
-.PP
-Distributed under the GNU General Public License.
-.SH CREDITS
-Joost Remijn implemented the timeout feature, which appeared in the 1.2.4 release of iptables.
-.SH SEE ALSO
-.BR iptables (8),
-.BR libipq (3),
-.BR select (2).
-
diff --git a/libipq/ipq_set_mode.3 b/libipq/ipq_set_mode.3
deleted file mode 100644 (file)
index 241581e..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-.TH IPQ_SET_MODE 3 "16 October 2001" "Linux iptables 1.2" "Linux Programmer's Manual" 
-.\"
-.\" $Id: ipq_set_mode.3,v 1.1 2000/11/20 14:13:32 jamesm Exp $
-.\"
-.\"     Copyright (c) 2000-2001 Netfilter Core Team
-.\"
-.\"     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 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, write to the Free Software
-.\"     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-.\"
-.\"
-.SH NAME
-ipq_set_mode - set the ip_queue queuing mode
-.SH SYNOPSIS
-.B #include <linux/netfilter.h>
-.br
-.B #include <libipq.h>
-.sp
-.BI "int ipq_set_mode(const struct ipq_handle *" h ", u_int8_t " mode ", size_t " range );
-.SH DESCRIPTION
-The
-.B ipq_set_mode
-function sends a message to the kernel ip_queue module, specifying whether
-packet metadata only, or packet payloads as well as metadata should be copied to
-userspace.
-.PP
-The
-.I h
-parameter is a context handle which must previously have been returned 
-successfully from a call to
-.BR ipq_create_handle .
-.PP
-The
-.I mode
-parameter must be one of:
-.TP
-.B IPQ_COPY_META
-Copy only packet metadata to userspace.
-.TP
-.B IPQ_COPY_PACKET
-Copy packet metadata and packet payloads to userspace.
-.PP
-The
-.I range
-parameter is used to specify how many bytes of the payload to copy
-to userspace.  It is only valid for
-.B IPQ_COPY_PACKET
-mode and is otherwise ignored.  The maximum useful value for
-.I range
-is 65535 (greater values will be clamped to this by ip_queue).
-.PP
-.B ipq_set_mode
-is usually used immediately following
-.B ipq_create_handle
-to enable the flow of packets to userspace.
-.PP
-Note that as the underlying Netlink messaging transport is connectionless,
-the ip_queue module does not know that a userspace application is ready to
-communicate until it receives a message such as this.
-.SH RETURN VALUE
-On failure, -1 is returned.
-.br
-On success, a non-zero positive value is returned.
-.SH ERRORS
-On failure, a descriptive error message will be available
-via the
-.B ipq_errstr
-function.
-.SH DIAGNOSTICS
-A relatively common failure may occur if the ip_queue module is not loaded.
-In this case, the following code excerpt:
-.PP
-.RS
-.nf
-status = ipq_set_mode(h, IPQ_COPY_META, 0);
-if (status < 0) {
-       ipq_perror("myapp");
-       ipq_destroy_handle(h);
-       exit(1);
-}
-.RE
-.fi
-.PP
-would generate the following output:
-.PP
-.I myapp: Failed to send netlink message: Connection refused
-.SH BUGS
-None known.
-.SH AUTHOR
-James Morris <jmorris@intercode.com.au>
-.SH COPYRIGHT
-Copyright (c) 2000-2001 Netfilter Core Team.
-.PP
-Distributed under the GNU General Public License.
-.SH SEE ALSO
-.BR libipq (3),
-.BR iptables (8).
diff --git a/libipq/ipq_set_verdict.3 b/libipq/ipq_set_verdict.3
deleted file mode 100644 (file)
index 84a9411..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-.TH IPQ_SET_VERDICT 3 "16 October 2001" "Linux iptables 1.2" "Linux Programmer's Manual" 
-.\"
-.\" $Id: ipq_set_verdict.3,v 1.1 2000/11/20 14:13:32 jamesm Exp $
-.\"
-.\"     Copyright (c) 2000-2001 Netfilter Core Team
-.\"
-.\"     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 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, write to the Free Software
-.\"     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-.\"
-.\"
-.SH NAME
-ipq_set_verdict - issue verdict and optionally modified packet to kernel
-.SH SYNOPSIS
-.B #include <linux/netfilter.h>
-.br
-.B #include <libipq.h>
-.sp
-.BI "int ipq_set_verdict(const struct ipq_handle *" h ", ipq_id_t " id ", unsigned int " verdict ", size_t " data_len ", unsigned char *" buf ");"
-.SH DESCRIPTION
-The
-.B ipq_set_verdict
-function issues a verdict on a packet previously obtained with
-.BR ipq_read ,
-specifing the intended disposition of the packet, and optionally
-supplying a modified version of the payload data.
-.PP
-The
-.I h
-parameter is a context handle which must previously have been returned 
-successfully from a call to
-.BR ipq_create_handle .
-.PP
-The
-.I id
-parameter is the packet identifier obtained via
-.BR ipq_get_packet .
-.PP
-The
-.I verdict
-parameter must be one of:
-.TP
-.B NF_ACCEPT
-Accept the packet and continue traversal within the kernel.
-.br
-.TP
-.B NF_DROP
-Drop the packet.
-.PP
-The
-.I data_len
-parameter is the length of the data pointed to
-by
-.IR buf ,
-the optional replacement payload data.
-.PP
-If simply setting a verdict without modifying the payload data, use zero
-for
-.I data_len
-and NULL for
-.IR buf .
-.PP
-The application is responsible for recalculating any packet checksums
-when modifying packets.
-.SH RETURN VALUE
-On failure, -1 is returned.
-.br
-On success, a non-zero positive value is returned.
-.SH ERRORS
-On error, a descriptive error message will be available
-via the
-.B ipq_errstr
-function.
-.SH BUGS
-None known.
-.SH AUTHOR
-James Morris <jmorris@intercode.com.au>
-.SH COPYRIGHT
-Copyright (c) 2000-2001 Netfilter Core Team.
-.PP
-Distributed under the GNU General Public License.
-.SH SEE ALSO
-.BR iptables (8),
-.BR libipq (3).
-
diff --git a/libipq/libipq.3 b/libipq/libipq.3
deleted file mode 100644 (file)
index c2295c1..0000000
+++ /dev/null
@@ -1,279 +0,0 @@
-.TH LIBIPQ 3 "16 October 2001" "Linux iptables 1.2" "Linux Programmer's Manual" 
-.\"
-.\" $Id: libipq.3,v 1.4 2001/10/16 16:58:25 jamesm Exp $
-.\"
-.\"     Copyright (c) 2000-2001 Netfilter Core Team
-.\"
-.\"     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 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, write to the Free Software
-.\"     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-.\"
-.\"
-.SH NAME
-libipq \- iptables userspace packet queuing library.
-.SH SYNOPSIS
-.B #include <linux/netfilter.h>
-.br
-.B #include <libipq.h>
-.SH DESCRIPTION
-libipq is a development library for iptables userspace packet queuing.
-.SS Userspace Packet Queuing
-Netfilter provides a mechanism for passing packets out of the stack for
-queueing to userspace, then receiving these packets back into the kernel
-with a verdict specifying what to do with the packets (such as ACCEPT
-or DROP).  These packets may also be modified in userspace prior to
-reinjection back into the kernel.
-.PP
-For each supported protocol, a kernel module called a
-.I queue handler
-may register with Netfilter to perform the mechanics of passing
-packets to and from userspace.
-.PP
-The standard queue handler for IPv4 is ip_queue.  It is provided as an
-experimental module with 2.4 kernels, and uses a Netlink socket for
-kernel/userspace communication.
-.PP
-Once ip_queue is loaded, IP packets may be selected with iptables
-and queued for userspace processing via the QUEUE target.  For example,
-running the following commands:
-.PP
-       # modprobe iptable_filter
-.br    
-       # modprobe ip_queue
-.br    
-       # iptables -A OUTPUT -p icmp -j QUEUE
-.PP
-will cause any locally generated ICMP packets (e.g. ping output) to
-be sent to the ip_queue module, which will then attempt to deliver the
-packets to a userspace application.  If no userspace application is waiting,
-the packets will be dropped
-.PP
-An application may receive and process these packets via libipq.
-.PP
-.PP
-.SS Libipq Overview
-Libipq provides an API for communicating with ip_queue.  The following is
-an overview of API usage, refer to individual man pages for more details
-on each function.
-.PP
-.B Initialisation
-.br
-To initialise the library, call
-.BR ipq_create_handle (3).
-This will attempt to bind to the Netlink socket used by ip_queue and
-return an opaque context handle for subsequent library calls.
-.PP
-.B Setting the Queue Mode
-.br
-.BR ipq_set_mode (3)
-allows the application to specify whether packet metadata, or packet
-payloads as well as metadata are copied to userspace.  It is also used to
-initially notify ip_queue that an application is ready to receive queue
-messages.
-.PP
-.B Receiving Packets from the Queue
-.br
-.BR ipq_read (3)
-waits for queue messages to arrive from ip_queue and copies
-them into a supplied buffer.
-Queue messages may be
-.I packet messages
-or
-.I error messages.
-.PP
-The type of packet may be determined with
-.BR ipq_message_type (3).
-.PP
-If it's a packet message, the metadata and optional payload may be retrieved with
-.BR ipq_get_packet (3).
-.PP
-To retrieve the value of an error message, use
-.BR ipq_get_msgerr (3).
-.PP
-.B Issuing Verdicts on Packets
-.br
-To issue a verdict on a packet, and optionally return a modified version
-of the packet to the kernel, call
-.BR ipq_set_verdict (3).
-.PP
-.B Error Handling
-.br
-An error string corresponding to the current value of the internal error
-variable
-.B ipq_errno
-may be obtained with
-.BR ipq_errstr (3).
-.PP
-For simple applications, calling
-.BR ipq_perror (3)
-will print the same message as
-.BR ipq_errstr (3),
-as well as the string corresponding to the global
-.B errno
-value (if set) to stderr.
-.PP
-.B Cleaning Up
-.br
-To free up the Netlink socket and destroy resources associated with
-the context handle, call
-.BR ipq_destroy_handle (3).
-.SH SUMMARY
-.TP 4
-.BR ipq_create_handle (3)
-Initialise library, return context handle.
-.TP
-.BR ipq_set_mode (3)
-Set the queue mode, to copy either packet metadata, or payloads
-as well as metadata to userspace.
-.TP
-.BR ipq_read (3)
-Wait for a queue message to arrive from ip_queue and read it into
-a buffer.
-.TP
-.BR ipq_message_type (3)
-Determine message type in the buffer.
-.TP
-.BR ipq_get_packet (3)
-Retrieve a packet message from the buffer.
-.TP
-.BR ipq_get_msgerr (3)
-Retrieve an error message from the buffer.
-.TP
-.BR ipq_set_verdict (3)
-Set a verdict on a packet, optionally replacing its contents.
-.TP
-.BR ipq_errstr (3)
-Return an error message corresponding to the internal ipq_errno variable.
-.TP
-.BR ipq_perror (3)
-Helper function to print error messages to stderr.
-.TP
-.BR ipq_destroy_handle (3)
-Destroy context handle and associated resources.
-.SH EXAMPLE
-The following is an example of a simple application which receives
-packets and issues NF_ACCEPT verdicts on each packet.
-.RS
-.nf
-/*
- * This code is GPL.
- */
-#include <linux/netfilter.h>
-#include <libipq.h>
-#include <stdio.h>
-
-#define BUFSIZE 2048 
-
-static void die(struct ipq_handle *h)
-{
-       ipq_perror("passer");
-       ipq_destroy_handle(h);
-       exit(1);
-}
-
-int main(int argc, char **argv)
-{
-       int status;
-       unsigned char buf[BUFSIZE];
-       struct ipq_handle *h;
-       
-       h = ipq_create_handle(0, PF_INET);
-       if (!h)
-               die(h);
-               
-       status = ipq_set_mode(h, IPQ_COPY_PACKET, BUFSIZE);
-       if (status < 0)
-               die(h);
-               
-       do{
-               status = ipq_read(h, buf, BUFSIZE, 0);
-               if (status < 0)
-                       die(h);
-                       
-               switch (ipq_message_type(buf)) {
-                       case NLMSG_ERROR:
-                               fprintf(stderr, "Received error message %d\\n",
-                                       ipq_get_msgerr(buf));
-                               break;
-                               
-                       case IPQM_PACKET: {
-                               ipq_packet_msg_t *m = ipq_get_packet(buf);
-                               
-                               status = ipq_set_verdict(h, m->packet_id,
-                                                        NF_ACCEPT, 0, NULL);
-                               if (status < 0)
-                                       die(h);
-                               break;
-                       }
-                       
-                       default:
-                               fprintf(stderr, "Unknown message type!\\n");
-                               break;
-               }
-       } while (1);
-       
-       ipq_destroy_handle(h);
-       return 0;
-}
-.RE
-.fi
-.PP
-Pointers to more libipq application examples may be found in The
-Netfilter FAQ.
-.SH DIAGNOSTICS
-For information about monitoring and tuning ip_queue, refer to the
-Linux 2.4 Packet Filtering HOWTO.
-.PP
-If an application modifies a packet, it needs to also update any
-checksums for the packet.  Typically, the kernel will silently discard
-modified packets with invalid checksums. 
-.SH SECURITY
-Processes require CAP_NET_ADMIN capabilty to access the kernel ip_queue
-module.  Such processes can potentially access and modify any IP packets
-received, generated or forwarded by the kernel.
-.SH TODO
-Per-handle
-.B ipq_errno
-values.
-.SH BUGS
-Probably.
-.SH AUTHOR
-James Morris <jmorris@intercode.com.au>
-.SH COPYRIGHT
-Copyright (c) 2000-2001 Netfilter Core Team.
-.PP
-Distributed under the GNU General Public License.
-.SH CREDITS
-Joost Remijn implemented the
-.B ipq_read
-timeout feature, which appeared in the 1.2.4 release of iptables.
-.PP
-Fernando Anton added support for IPv6.
-.SH SEE ALSO
-.BR iptables (8),
-.BR ipq_create_handle (3),
-.BR ipq_destroy_handle (3),
-.BR ipq_errstr (3),
-.BR ipq_get_msgerr (3),
-.BR ipq_get_packet (3),
-.BR ipq_message_type (3),
-.BR ipq_perror (3),
-.BR ipq_read (3),
-.BR ipq_set_mode (3),
-.BR ipq_set_verdict (3).
-.PP
-The Netfilter home page at http://netfilter.samba.org/
-which has links to The Networking Concepts HOWTO, The Linux 2.4 Packet
-Filtering HOWTO, The Linux 2.4 NAT HOWTO, The Netfilter Hacking HOWTO,
-The Netfilter FAQ and many other useful resources.
-
diff --git a/libipq/libipq.c b/libipq/libipq.c
deleted file mode 100644 (file)
index 658af97..0000000
+++ /dev/null
@@ -1,378 +0,0 @@
-/*
- * libipq.c
- *
- * IPQ userspace library.
- *
- * Please note that this library is still developmental, and there may
- * be some API changes.
- *
- * Author: James Morris <jmorris@intercode.com.au>
- *
- * 07-11-2001 Modified by Fernando Anton to add support for IPv6.
- *
- * Copyright (c) 2000-2001 Netfilter Core Team
- *
- * 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 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.
- *
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/time.h>
-#include <sys/types.h>
-
-#include <libipq/libipq.h>
-
-/****************************************************************************
- *
- * Private interface
- *
- ****************************************************************************/
-
-enum {
-       IPQ_ERR_NONE = 0,
-       IPQ_ERR_IMPL,
-       IPQ_ERR_HANDLE,
-       IPQ_ERR_SOCKET,
-       IPQ_ERR_BIND,
-       IPQ_ERR_BUFFER,
-       IPQ_ERR_RECV,
-       IPQ_ERR_NLEOF,
-       IPQ_ERR_ADDRLEN,
-       IPQ_ERR_STRUNC,
-       IPQ_ERR_RTRUNC,
-       IPQ_ERR_NLRECV,
-       IPQ_ERR_SEND,
-       IPQ_ERR_SUPP,
-       IPQ_ERR_RECVBUF,
-       IPQ_ERR_TIMEOUT,
-        IPQ_ERR_PROTOCOL
-};
-#define IPQ_MAXERR IPQ_ERR_PROTOCOL
-
-struct ipq_errmap_t {
-       int errcode;
-       char *message;
-} ipq_errmap[] = {
-       { IPQ_ERR_NONE, "Unknown error" },
-       { IPQ_ERR_IMPL, "Implementation error" },
-       { IPQ_ERR_HANDLE, "Unable to create netlink handle" },
-       { IPQ_ERR_SOCKET, "Unable to create netlink socket" },
-       { IPQ_ERR_BIND, "Unable to bind netlink socket" },
-       { IPQ_ERR_BUFFER, "Unable to allocate buffer" },
-       { IPQ_ERR_RECV, "Failed to receive netlink message" },
-       { IPQ_ERR_NLEOF, "Received EOF on netlink socket" },
-       { IPQ_ERR_ADDRLEN, "Invalid peer address length" },
-       { IPQ_ERR_STRUNC, "Sent message truncated" },
-       { IPQ_ERR_RTRUNC, "Received message truncated" },
-       { IPQ_ERR_NLRECV, "Received error from netlink" },
-       { IPQ_ERR_SEND, "Failed to send netlink message" },
-       { IPQ_ERR_SUPP, "Operation not supported" },
-       { IPQ_ERR_RECVBUF, "Receive buffer size invalid" },
-       { IPQ_ERR_TIMEOUT, "Timeout"},
-       { IPQ_ERR_PROTOCOL, "Invalid protocol specified" }
-};
-
-static int ipq_errno = IPQ_ERR_NONE;
-
-static ssize_t ipq_netlink_sendto(const struct ipq_handle *h,
-                                  const void *msg, size_t len);
-
-static ssize_t ipq_netlink_recvfrom(const struct ipq_handle *h,
-                                    unsigned char *buf, size_t len,
-                                    int timeout);
-
-static ssize_t ipq_netlink_sendmsg(const struct ipq_handle *h,
-                                   const struct msghdr *msg,
-                                   unsigned int flags);
-
-static char *ipq_strerror(int errcode);
-
-static ssize_t ipq_netlink_sendto(const struct ipq_handle *h,
-                                  const void *msg, size_t len)
-{
-       int status = sendto(h->fd, msg, len, 0,
-                           (struct sockaddr *)&h->peer, sizeof(h->peer));
-       if (status < 0)
-               ipq_errno = IPQ_ERR_SEND;
-       return status;
-}
-
-static ssize_t ipq_netlink_sendmsg(const struct ipq_handle *h,
-                                   const struct msghdr *msg,
-                                   unsigned int flags)
-{
-       int status = sendmsg(h->fd, msg, flags);
-       if (status < 0)
-               ipq_errno = IPQ_ERR_SEND;
-       return status;
-}
-
-static ssize_t ipq_netlink_recvfrom(const struct ipq_handle *h,
-                                    unsigned char *buf, size_t len,
-                                    int timeout)
-{
-       unsigned int addrlen;
-       int status;
-       struct nlmsghdr *nlh;
-
-       if (len < sizeof(struct nlmsgerr)) {
-               ipq_errno = IPQ_ERR_RECVBUF;
-               return -1;
-       }
-       addrlen = sizeof(h->peer);
-
-       if (timeout != 0) {
-               int ret;
-               struct timeval tv;
-               fd_set read_fds;
-               
-               if (timeout < 0) {
-                       /* non-block non-timeout */
-                       tv.tv_sec = 0;
-                       tv.tv_usec = 0;
-               } else {
-                       tv.tv_sec = timeout / 1000000;
-                       tv.tv_usec = timeout % 1000000;
-               }
-
-               FD_ZERO(&read_fds);
-               FD_SET(h->fd, &read_fds);
-               ret = select(h->fd+1, &read_fds, NULL, NULL, &tv);
-               if (ret < 0) {
-                       if (errno == EINTR) {
-                               return 0;
-                       } else {
-                               ipq_errno = IPQ_ERR_RECV;
-                               return -1;
-                       }
-               }
-               if (!FD_ISSET(h->fd, &read_fds)) {
-                       ipq_errno = IPQ_ERR_TIMEOUT;
-                       return 0;
-               }
-       }
-       status = recvfrom(h->fd, buf, len, 0,
-                             (struct sockaddr *)&h->peer, &addrlen);
-       if (status < 0) {
-               ipq_errno = IPQ_ERR_RECV;
-               return status;
-       }
-       if (addrlen != sizeof(h->peer)) {
-               ipq_errno = IPQ_ERR_RECV;
-               return -1;
-       }
-       if (h->peer.nl_pid != 0) {
-               ipq_errno = IPQ_ERR_RECV;
-               return -1;
-       }
-       if (status == 0) {
-               ipq_errno = IPQ_ERR_NLEOF;
-               return -1;
-       }
-       nlh = (struct nlmsghdr *)buf;
-       if (nlh->nlmsg_flags & MSG_TRUNC || nlh->nlmsg_len > status) {
-               ipq_errno = IPQ_ERR_RTRUNC;
-               return -1;
-       }
-       return status;
-}
-
-static char *ipq_strerror(int errcode)
-{
-       if (errcode < 0 || errcode > IPQ_MAXERR)
-               errcode = IPQ_ERR_IMPL;
-       return ipq_errmap[errcode].message;
-}
-
-/****************************************************************************
- *
- * Public interface
- *
- ****************************************************************************/
-
-/*
- * Create and initialise an ipq handle.
- */
-struct ipq_handle *ipq_create_handle(u_int32_t flags, u_int32_t protocol)
-{
-       int status;
-       struct ipq_handle *h;
-
-       h = (struct ipq_handle *)malloc(sizeof(struct ipq_handle));
-       if (h == NULL) {
-               ipq_errno = IPQ_ERR_HANDLE;
-               return NULL;
-       }
-       
-       memset(h, 0, sizeof(struct ipq_handle));
-       
-        if (protocol == PF_INET)
-                h->fd = socket(PF_NETLINK, SOCK_RAW, NETLINK_FIREWALL);
-        else if (protocol == PF_INET6)
-                h->fd = socket(PF_NETLINK, SOCK_RAW, NETLINK_IP6_FW);
-        else {
-               ipq_errno = IPQ_ERR_PROTOCOL;
-               free(h);
-               return NULL;
-        }
-        
-       if (h->fd == -1) {
-               ipq_errno = IPQ_ERR_SOCKET;
-               close(h->fd);
-               free(h);
-               return NULL;
-       }
-       memset(&h->local, 0, sizeof(struct sockaddr_nl));
-       h->local.nl_family = AF_NETLINK;
-       h->local.nl_pid = getpid();
-       h->local.nl_groups = 0;
-       status = bind(h->fd, (struct sockaddr *)&h->local, sizeof(h->local));
-       if (status == -1) {
-               ipq_errno = IPQ_ERR_BIND;
-               close(h->fd);
-               free(h);
-               return NULL;
-       }
-       memset(&h->peer, 0, sizeof(struct sockaddr_nl));
-       h->peer.nl_family = AF_NETLINK;
-       h->peer.nl_pid = 0;
-       h->peer.nl_groups = 0;
-       return h;
-}
-
-/*
- * No error condition is checked here at this stage, but it may happen
- * if/when reliable messaging is implemented.
- */
-int ipq_destroy_handle(struct ipq_handle *h)
-{
-       if (h) {
-               close(h->fd);
-               free(h);
-       }
-       return 0;
-}
-
-int ipq_set_mode(const struct ipq_handle *h,
-                 u_int8_t mode, size_t range)
-{
-       struct {
-               struct nlmsghdr nlh;
-               ipq_peer_msg_t pm;
-       } req;
-
-       memset(&req, 0, sizeof(req));
-       req.nlh.nlmsg_len = NLMSG_LENGTH(sizeof(req));
-       req.nlh.nlmsg_flags = NLM_F_REQUEST;
-       req.nlh.nlmsg_type = IPQM_MODE;
-       req.nlh.nlmsg_pid = h->local.nl_pid;
-       req.pm.msg.mode.value = mode;
-       req.pm.msg.mode.range = range;
-       return ipq_netlink_sendto(h, (void *)&req, req.nlh.nlmsg_len);
-}
-
-/*
- * timeout is in microseconds (1 second is 1000000 (1 million) microseconds)
- *
- */
-ssize_t ipq_read(const struct ipq_handle *h,
-                 unsigned char *buf, size_t len, int timeout)
-{
-       return ipq_netlink_recvfrom(h, buf, len, timeout);
-}
-
-int ipq_message_type(const unsigned char *buf)
-{
-       return ((struct nlmsghdr*)buf)->nlmsg_type;
-}
-
-int ipq_get_msgerr(const unsigned char *buf)
-{
-       struct nlmsghdr *h = (struct nlmsghdr *)buf;
-       struct nlmsgerr *err = (struct nlmsgerr*)NLMSG_DATA(h);
-       return -err->error;
-}
-
-ipq_packet_msg_t *ipq_get_packet(const unsigned char *buf)
-{
-       return NLMSG_DATA((struct nlmsghdr *)(buf));
-}
-
-int ipq_set_verdict(const struct ipq_handle *h,
-                    ipq_id_t id,
-                    unsigned int verdict,
-                    size_t data_len,
-                    unsigned char *buf)
-{
-       unsigned char nvecs;
-       size_t tlen;
-       struct nlmsghdr nlh;
-       ipq_peer_msg_t pm;
-       struct iovec iov[3];
-       struct msghdr msg;
-
-       memset(&nlh, 0, sizeof(nlh));
-       nlh.nlmsg_flags = NLM_F_REQUEST;
-       nlh.nlmsg_type = IPQM_VERDICT;
-       nlh.nlmsg_pid = h->local.nl_pid;
-       memset(&pm, 0, sizeof(pm));
-       pm.msg.verdict.value = verdict;
-       pm.msg.verdict.id = id;
-       pm.msg.verdict.data_len = data_len;
-       iov[0].iov_base = &nlh;
-       iov[0].iov_len = sizeof(nlh);
-       iov[1].iov_base = &pm;
-       iov[1].iov_len = sizeof(pm);
-       tlen = sizeof(nlh) + sizeof(pm);
-       nvecs = 2;
-       if (data_len && buf) {
-               iov[2].iov_base = buf;
-               iov[2].iov_len = data_len;
-               tlen += data_len;
-               nvecs++;
-       }
-       msg.msg_name = (void *)&h->peer;
-       msg.msg_namelen = sizeof(h->peer);
-       msg.msg_iov = iov;
-       msg.msg_iovlen = nvecs;
-       msg.msg_control = NULL;
-       msg.msg_controllen = 0;
-       msg.msg_flags = 0;
-       nlh.nlmsg_len = tlen;
-       return ipq_netlink_sendmsg(h, &msg, 0);
-}
-
-/* Not implemented yet */
-int ipq_ctl(const struct ipq_handle *h, int request, ...)
-{
-       return 1;
-}
-
-char *ipq_errstr(void)
-{
-       return ipq_strerror(ipq_errno);
-}
-
-void ipq_perror(const char *s)
-{
-       if (s)
-               fputs(s, stderr);
-       else
-               fputs("ERROR", stderr);
-       if (ipq_errno)
-               fprintf(stderr, ": %s", ipq_errstr());
-       if (errno)
-               fprintf(stderr, ": %s", strerror(errno));
-       fputc('\n', stderr);
-}
diff --git a/libiptc/libip4tc.c b/libiptc/libip4tc.c
deleted file mode 100644 (file)
index 71af17f..0000000
+++ /dev/null
@@ -1,498 +0,0 @@
-/* Library which manipulates firewall rules.  Version 0.1. */
-
-/* Architecture of firewall rules is as follows:
- *
- * Chains go INPUT, FORWARD, OUTPUT then user chains.
- * Each user chain starts with an ERROR node.
- * Every chain ends with an unconditional jump: a RETURN for user chains,
- * and a POLICY for built-ins.
- */
-
-/* (C)1999 Paul ``Rusty'' Russell - Placed under the GNU GPL (See
-   COPYING for details). */
-
-#include <assert.h>
-#include <string.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-
-#ifdef DEBUG_CONNTRACK
-#define inline
-#endif
-
-#if !defined(__GLIBC__) || (__GLIBC__ < 2)
-typedef unsigned int socklen_t;
-#endif
-
-#include "libiptc/libiptc.h"
-
-#define IP_VERSION     4
-#define IP_OFFSET      0x1FFF
-
-#define HOOK_PRE_ROUTING       NF_IP_PRE_ROUTING
-#define HOOK_LOCAL_IN          NF_IP_LOCAL_IN
-#define HOOK_FORWARD           NF_IP_FORWARD
-#define HOOK_LOCAL_OUT         NF_IP_LOCAL_OUT
-#define HOOK_POST_ROUTING      NF_IP_POST_ROUTING
-#ifdef NF_IP_DROPPING
-#define HOOK_DROPPING          NF_IP_DROPPING
-#endif
-
-#define STRUCT_ENTRY_TARGET    struct ipt_entry_target
-#define STRUCT_ENTRY           struct ipt_entry
-#define STRUCT_ENTRY_MATCH     struct ipt_entry_match
-#define STRUCT_GETINFO         struct ipt_getinfo
-#define STRUCT_GET_ENTRIES     struct ipt_get_entries
-#define STRUCT_COUNTERS                struct ipt_counters
-#define STRUCT_COUNTERS_INFO   struct ipt_counters_info
-#define STRUCT_STANDARD_TARGET struct ipt_standard_target
-#define STRUCT_REPLACE         struct ipt_replace
-
-#define STRUCT_TC_HANDLE       struct iptc_handle
-#define TC_HANDLE_T            iptc_handle_t
-
-#define ENTRY_ITERATE          IPT_ENTRY_ITERATE
-#define TABLE_MAXNAMELEN       IPT_TABLE_MAXNAMELEN
-#define FUNCTION_MAXNAMELEN    IPT_FUNCTION_MAXNAMELEN
-
-#define GET_TARGET             ipt_get_target
-
-#define ERROR_TARGET           IPT_ERROR_TARGET
-#define NUMHOOKS               NF_IP_NUMHOOKS
-
-#define IPT_CHAINLABEL         ipt_chainlabel
-
-#define TC_DUMP_ENTRIES                dump_entries
-#define TC_IS_CHAIN            iptc_is_chain
-#define TC_FIRST_CHAIN         iptc_first_chain
-#define TC_NEXT_CHAIN          iptc_next_chain
-#define TC_FIRST_RULE          iptc_first_rule
-#define TC_NEXT_RULE           iptc_next_rule
-#define TC_GET_TARGET          iptc_get_target
-#define TC_BUILTIN             iptc_builtin
-#define TC_GET_POLICY          iptc_get_policy
-#define TC_INSERT_ENTRY                iptc_insert_entry
-#define TC_REPLACE_ENTRY       iptc_replace_entry
-#define TC_APPEND_ENTRY                iptc_append_entry
-#define TC_DELETE_ENTRY                iptc_delete_entry
-#define TC_DELETE_NUM_ENTRY    iptc_delete_num_entry
-#define TC_CHECK_PACKET                iptc_check_packet
-#define TC_FLUSH_ENTRIES       iptc_flush_entries
-#define TC_ZERO_ENTRIES                iptc_zero_entries
-#define TC_READ_COUNTER                iptc_read_counter
-#define TC_ZERO_COUNTER                iptc_zero_counter
-#define TC_SET_COUNTER         iptc_set_counter
-#define TC_CREATE_CHAIN                iptc_create_chain
-#define TC_GET_REFERENCES      iptc_get_references
-#define TC_DELETE_CHAIN                iptc_delete_chain
-#define TC_RENAME_CHAIN                iptc_rename_chain
-#define TC_SET_POLICY          iptc_set_policy
-#define TC_GET_RAW_SOCKET      iptc_get_raw_socket
-#define TC_INIT                        iptc_init
-#define TC_FREE                        iptc_free
-#define TC_COMMIT              iptc_commit
-#define TC_STRERROR            iptc_strerror
-#define TC_NUM_RULES           iptc_num_rules
-#define TC_GET_RULE            iptc_get_rule
-
-#define TC_AF                  AF_INET
-#define TC_IPPROTO             IPPROTO_IP
-
-#define SO_SET_REPLACE         IPT_SO_SET_REPLACE
-#define SO_SET_ADD_COUNTERS    IPT_SO_SET_ADD_COUNTERS
-#define SO_GET_INFO            IPT_SO_GET_INFO
-#define SO_GET_ENTRIES         IPT_SO_GET_ENTRIES
-#define SO_GET_VERSION         IPT_SO_GET_VERSION
-
-#define STANDARD_TARGET                IPT_STANDARD_TARGET
-#define LABEL_RETURN           IPTC_LABEL_RETURN
-#define LABEL_ACCEPT           IPTC_LABEL_ACCEPT
-#define LABEL_DROP             IPTC_LABEL_DROP
-#define LABEL_QUEUE            IPTC_LABEL_QUEUE
-
-#define ALIGN                  IPT_ALIGN
-#define RETURN                 IPT_RETURN
-
-#include "libiptc.c"
-
-#define IP_PARTS_NATIVE(n)                     \
-(unsigned int)((n)>>24)&0xFF,                  \
-(unsigned int)((n)>>16)&0xFF,                  \
-(unsigned int)((n)>>8)&0xFF,                   \
-(unsigned int)((n)&0xFF)
-
-#define IP_PARTS(n) IP_PARTS_NATIVE(ntohl(n))
-
-int
-dump_entry(STRUCT_ENTRY *e, const TC_HANDLE_T handle)
-{
-       size_t i;
-       STRUCT_ENTRY_TARGET *t;
-
-       printf("Entry %u (%lu):\n", iptcb_entry2index(handle, e),
-              iptcb_entry2offset(handle, e));
-       printf("SRC IP: %u.%u.%u.%u/%u.%u.%u.%u\n",
-              IP_PARTS(e->ip.src.s_addr),IP_PARTS(e->ip.smsk.s_addr));
-       printf("DST IP: %u.%u.%u.%u/%u.%u.%u.%u\n",
-              IP_PARTS(e->ip.dst.s_addr),IP_PARTS(e->ip.dmsk.s_addr));
-       printf("Interface: `%s'/", e->ip.iniface);
-       for (i = 0; i < IFNAMSIZ; i++)
-               printf("%c", e->ip.iniface_mask[i] ? 'X' : '.');
-       printf("to `%s'/", e->ip.outiface);
-       for (i = 0; i < IFNAMSIZ; i++)
-               printf("%c", e->ip.outiface_mask[i] ? 'X' : '.');
-       printf("\nProtocol: %u\n", e->ip.proto);
-       printf("Flags: %02X\n", e->ip.flags);
-       printf("Invflags: %02X\n", e->ip.invflags);
-       printf("Counters: %llu packets, %llu bytes\n",
-              (unsigned long long)e->counters.pcnt, (unsigned long long)e->counters.bcnt);
-       printf("Cache: %08X\n", e->nfcache);
-
-       IPT_MATCH_ITERATE(e, print_match);
-
-       t = GET_TARGET(e);
-       printf("Target name: `%s' [%u]\n", t->u.user.name, t->u.target_size);
-       if (strcmp(t->u.user.name, STANDARD_TARGET) == 0) {
-               int pos = *(int *)t->data;
-               if (pos < 0)
-                       printf("verdict=%s\n",
-                              pos == -NF_ACCEPT-1 ? "NF_ACCEPT"
-                              : pos == -NF_DROP-1 ? "NF_DROP"
-                              : pos == -NF_QUEUE-1 ? "NF_QUEUE"
-                              : pos == RETURN ? "RETURN"
-                              : "UNKNOWN");
-               else
-                       printf("verdict=%u\n", pos);
-       } else if (strcmp(t->u.user.name, IPT_ERROR_TARGET) == 0)
-               printf("error=`%s'\n", t->data);
-
-       printf("\n");
-       return 0;
-}
-
-static unsigned char *
-is_same(const STRUCT_ENTRY *a, const STRUCT_ENTRY *b, unsigned char *matchmask)
-{
-       unsigned int i;
-       unsigned char *mptr;
-
-       /* Always compare head structures: ignore mask here. */
-       if (a->ip.src.s_addr != b->ip.src.s_addr
-           || a->ip.dst.s_addr != b->ip.dst.s_addr
-           || a->ip.smsk.s_addr != b->ip.smsk.s_addr
-           || a->ip.dmsk.s_addr != b->ip.dmsk.s_addr
-           || a->ip.proto != b->ip.proto
-           || a->ip.flags != b->ip.flags
-           || a->ip.invflags != b->ip.invflags)
-               return NULL;
-
-       for (i = 0; i < IFNAMSIZ; i++) {
-               if (a->ip.iniface_mask[i] != b->ip.iniface_mask[i])
-                       return NULL;
-               if ((a->ip.iniface[i] & a->ip.iniface_mask[i])
-                   != (b->ip.iniface[i] & b->ip.iniface_mask[i]))
-                       return NULL;
-               if (a->ip.outiface_mask[i] != b->ip.outiface_mask[i])
-                       return NULL;
-               if ((a->ip.outiface[i] & a->ip.outiface_mask[i])
-                   != (b->ip.outiface[i] & b->ip.outiface_mask[i]))
-                       return NULL;
-       }
-
-       if (a->target_offset != b->target_offset
-           || a->next_offset != b->next_offset)
-               return NULL;
-
-       mptr = matchmask + sizeof(STRUCT_ENTRY);
-       if (IPT_MATCH_ITERATE(a, match_different, a->elems, b->elems, &mptr))
-               return NULL;
-       mptr += IPT_ALIGN(sizeof(struct ipt_entry_target));
-
-       return mptr;
-}
-
-#if 0
-/***************************** DEBUGGING ********************************/
-static inline int
-unconditional(const struct ipt_ip *ip)
-{
-       unsigned int i;
-
-       for (i = 0; i < sizeof(*ip)/sizeof(u_int32_t); i++)
-               if (((u_int32_t *)ip)[i])
-                       return 0;
-
-       return 1;
-}
-
-static inline int
-check_match(const STRUCT_ENTRY_MATCH *m, unsigned int *off)
-{
-       assert(m->u.match_size >= sizeof(STRUCT_ENTRY_MATCH));
-       assert(ALIGN(m->u.match_size) == m->u.match_size);
-
-       (*off) += m->u.match_size;
-       return 0;
-}
-
-static inline int
-check_entry(const STRUCT_ENTRY *e, unsigned int *i, unsigned int *off,
-           unsigned int user_offset, int *was_return,
-           TC_HANDLE_T h)
-{
-       unsigned int toff;
-       STRUCT_STANDARD_TARGET *t;
-
-       assert(e->target_offset >= sizeof(STRUCT_ENTRY));
-       assert(e->next_offset >= e->target_offset
-              + sizeof(STRUCT_ENTRY_TARGET));
-       toff = sizeof(STRUCT_ENTRY);
-       IPT_MATCH_ITERATE(e, check_match, &toff);
-
-       assert(toff == e->target_offset);
-
-       t = (STRUCT_STANDARD_TARGET *)
-               GET_TARGET((STRUCT_ENTRY *)e);
-       /* next_offset will have to be multiple of entry alignment. */
-       assert(e->next_offset == ALIGN(e->next_offset));
-       assert(e->target_offset == ALIGN(e->target_offset));
-       assert(t->target.u.target_size == ALIGN(t->target.u.target_size));
-       assert(!TC_IS_CHAIN(t->target.u.user.name, h));
-
-       if (strcmp(t->target.u.user.name, STANDARD_TARGET) == 0) {
-               assert(t->target.u.target_size
-                      == ALIGN(sizeof(STRUCT_STANDARD_TARGET)));
-
-               assert(t->verdict == -NF_DROP-1
-                      || t->verdict == -NF_ACCEPT-1
-                      || t->verdict == RETURN
-                      || t->verdict < (int)h->entries->size);
-
-               if (t->verdict >= 0) {
-                       STRUCT_ENTRY *te = get_entry(h, t->verdict);
-                       int idx;
-
-                       idx = iptcb_entry2index(h, te);
-                       assert(strcmp(GET_TARGET(te)->u.user.name,
-                                     IPT_ERROR_TARGET)
-                              != 0);
-                       assert(te != e);
-
-                       /* Prior node must be error node, or this node. */
-                       assert(t->verdict == iptcb_entry2offset(h, e)+e->next_offset
-                              || strcmp(GET_TARGET(index2entry(h, idx-1))
-                                        ->u.user.name, IPT_ERROR_TARGET)
-                              == 0);
-               }
-
-               if (t->verdict == RETURN
-                   && unconditional(&e->ip)
-                   && e->target_offset == sizeof(*e))
-                       *was_return = 1;
-               else
-                       *was_return = 0;
-       } else if (strcmp(t->target.u.user.name, IPT_ERROR_TARGET) == 0) {
-               assert(t->target.u.target_size
-                      == ALIGN(sizeof(struct ipt_error_target)));
-
-               /* If this is in user area, previous must have been return */
-               if (*off > user_offset)
-                       assert(*was_return);
-
-               *was_return = 0;
-       }
-       else *was_return = 0;
-
-       if (*off == user_offset)
-               assert(strcmp(t->target.u.user.name, IPT_ERROR_TARGET) == 0);
-
-       (*off) += e->next_offset;
-       (*i)++;
-       return 0;
-}
-
-#ifdef IPTC_DEBUG
-/* Do every conceivable sanity check on the handle */
-static void
-do_check(TC_HANDLE_T h, unsigned int line)
-{
-       unsigned int i, n;
-       unsigned int user_offset; /* Offset of first user chain */
-       int was_return;
-
-       assert(h->changed == 0 || h->changed == 1);
-       if (strcmp(h->info.name, "filter") == 0) {
-               assert(h->info.valid_hooks
-                      == (1 << NF_IP_LOCAL_IN
-                          | 1 << NF_IP_FORWARD
-                          | 1 << NF_IP_LOCAL_OUT));
-
-               /* Hooks should be first three */
-               assert(h->info.hook_entry[NF_IP_LOCAL_IN] == 0);
-
-               n = get_chain_end(h, 0);
-               n += get_entry(h, n)->next_offset;
-               assert(h->info.hook_entry[NF_IP_FORWARD] == n);
-
-               n = get_chain_end(h, n);
-               n += get_entry(h, n)->next_offset;
-               assert(h->info.hook_entry[NF_IP_LOCAL_OUT] == n);
-
-               user_offset = h->info.hook_entry[NF_IP_LOCAL_OUT];
-       } else if (strcmp(h->info.name, "nat") == 0) {
-               assert((h->info.valid_hooks
-                       == (1 << NF_IP_PRE_ROUTING
-                           | 1 << NF_IP_POST_ROUTING
-                           | 1 << NF_IP_LOCAL_OUT)) ||
-                      (h->info.valid_hooks
-                       == (1 << NF_IP_PRE_ROUTING
-                           | 1 << NF_IP_LOCAL_IN
-                           | 1 << NF_IP_POST_ROUTING
-                           | 1 << NF_IP_LOCAL_OUT)));
-
-               assert(h->info.hook_entry[NF_IP_PRE_ROUTING] == 0);
-
-               n = get_chain_end(h, 0);
-
-               n += get_entry(h, n)->next_offset;
-               assert(h->info.hook_entry[NF_IP_POST_ROUTING] == n);
-               n = get_chain_end(h, n);
-
-               n += get_entry(h, n)->next_offset;
-               assert(h->info.hook_entry[NF_IP_LOCAL_OUT] == n);
-               user_offset = h->info.hook_entry[NF_IP_LOCAL_OUT];
-
-               if (h->info.valid_hooks & (1 << NF_IP_LOCAL_IN)) {
-                       n = get_chain_end(h, n);
-                       n += get_entry(h, n)->next_offset;
-                       assert(h->info.hook_entry[NF_IP_LOCAL_IN] == n);
-                       user_offset = h->info.hook_entry[NF_IP_LOCAL_IN];
-               }
-
-       } else if (strcmp(h->info.name, "mangle") == 0) {
-               /* This code is getting ugly because linux < 2.4.18-pre6 had
-                * two mangle hooks, linux >= 2.4.18-pre6 has five mangle hooks
-                * */
-               assert((h->info.valid_hooks
-                       == (1 << NF_IP_PRE_ROUTING
-                           | 1 << NF_IP_LOCAL_OUT)) || 
-                      (h->info.valid_hooks
-                       == (1 << NF_IP_PRE_ROUTING
-                           | 1 << NF_IP_LOCAL_IN
-                           | 1 << NF_IP_FORWARD
-                           | 1 << NF_IP_LOCAL_OUT
-                           | 1 << NF_IP_POST_ROUTING)));
-
-               /* Hooks should be first five */
-               assert(h->info.hook_entry[NF_IP_PRE_ROUTING] == 0);
-
-               n = get_chain_end(h, 0);
-
-               if (h->info.valid_hooks & (1 << NF_IP_LOCAL_IN)) {
-                       n += get_entry(h, n)->next_offset;
-                       assert(h->info.hook_entry[NF_IP_LOCAL_IN] == n);
-                       n = get_chain_end(h, n);
-               }
-
-               if (h->info.valid_hooks & (1 << NF_IP_FORWARD)) {
-                       n += get_entry(h, n)->next_offset;
-                       assert(h->info.hook_entry[NF_IP_FORWARD] == n);
-                       n = get_chain_end(h, n);
-               }
-
-               n += get_entry(h, n)->next_offset;
-               assert(h->info.hook_entry[NF_IP_LOCAL_OUT] == n);
-               user_offset = h->info.hook_entry[NF_IP_LOCAL_OUT];
-
-               if (h->info.valid_hooks & (1 << NF_IP_POST_ROUTING)) {
-                       n = get_chain_end(h, n);
-                       n += get_entry(h, n)->next_offset;
-                       assert(h->info.hook_entry[NF_IP_POST_ROUTING] == n);
-                       user_offset = h->info.hook_entry[NF_IP_POST_ROUTING];
-               }
-       } else if (strcmp(h->info.name, "raw") == 0) {
-               assert(h->info.valid_hooks
-                      == (1 << NF_IP_PRE_ROUTING
-                          | 1 << NF_IP_LOCAL_OUT));
-
-               /* Hooks should be first three */
-               assert(h->info.hook_entry[NF_IP_PRE_ROUTING] == 0);
-
-               n = get_chain_end(h, n);
-               n += get_entry(h, n)->next_offset;
-               assert(h->info.hook_entry[NF_IP_LOCAL_OUT] == n);
-
-               user_offset = h->info.hook_entry[NF_IP_LOCAL_OUT];
-
-#ifdef NF_IP_DROPPING
-       } else if (strcmp(h->info.name, "drop") == 0) {
-               assert(h->info.valid_hooks == (1 << NF_IP_DROPPING));
-
-               /* Hook should be first */
-               assert(h->info.hook_entry[NF_IP_DROPPING] == 0);
-               user_offset = 0;
-#endif
-       } else {
-               fprintf(stderr, "Unknown table `%s'\n", h->info.name);
-               abort();
-       }
-
-       /* User chain == end of last builtin + policy entry */
-       user_offset = get_chain_end(h, user_offset);
-       user_offset += get_entry(h, user_offset)->next_offset;
-
-       /* Overflows should be end of entry chains, and unconditional
-           policy nodes. */
-       for (i = 0; i < NUMHOOKS; i++) {
-               STRUCT_ENTRY *e;
-               STRUCT_STANDARD_TARGET *t;
-
-               if (!(h->info.valid_hooks & (1 << i)))
-                       continue;
-               assert(h->info.underflow[i]
-                      == get_chain_end(h, h->info.hook_entry[i]));
-
-               e = get_entry(h, get_chain_end(h, h->info.hook_entry[i]));
-               assert(unconditional(&e->ip));
-               assert(e->target_offset == sizeof(*e));
-               t = (STRUCT_STANDARD_TARGET *)GET_TARGET(e);
-               assert(t->target.u.target_size == ALIGN(sizeof(*t)));
-               assert(e->next_offset == sizeof(*e) + ALIGN(sizeof(*t)));
-
-               assert(strcmp(t->target.u.user.name, STANDARD_TARGET)==0);
-               assert(t->verdict == -NF_DROP-1 || t->verdict == -NF_ACCEPT-1);
-
-               /* Hooks and underflows must be valid entries */
-               entry2index(h, get_entry(h, h->info.hook_entry[i]));
-               entry2index(h, get_entry(h, h->info.underflow[i]));
-       }
-
-       assert(h->info.size
-              >= h->info.num_entries * (sizeof(STRUCT_ENTRY)
-                                        +sizeof(STRUCT_STANDARD_TARGET)));
-
-       assert(h->entries.size
-              >= (h->new_number
-                  * (sizeof(STRUCT_ENTRY)
-                     + sizeof(STRUCT_STANDARD_TARGET))));
-       assert(strcmp(h->info.name, h->entries.name) == 0);
-
-       i = 0; n = 0;
-       was_return = 0;
-       /* Check all the entries. */
-       ENTRY_ITERATE(h->entries.entrytable, h->entries.size,
-                     check_entry, &i, &n, user_offset, &was_return, h);
-
-       assert(i == h->new_number);
-       assert(n == h->entries.size);
-
-       /* Final entry must be error node */
-       assert(strcmp(GET_TARGET(index2entry(h, h->new_number-1))
-                     ->u.user.name,
-                     ERROR_TARGET) == 0);
-}
-#endif /*IPTC_DEBUG*/
-
-#endif
diff --git a/libiptc/libip6tc.c b/libiptc/libip6tc.c
deleted file mode 100644 (file)
index 71e262e..0000000
+++ /dev/null
@@ -1,437 +0,0 @@
-/* Library which manipulates firewall rules.  Version 0.1. */
-
-/* Architecture of firewall rules is as follows:
- *
- * Chains go INPUT, FORWARD, OUTPUT then user chains.
- * Each user chain starts with an ERROR node.
- * Every chain ends with an unconditional jump: a RETURN for user chains,
- * and a POLICY for built-ins.
- */
-
-/* (C)1999 Paul ``Rusty'' Russell - Placed under the GNU GPL (See
-   COPYING for details). */
-
-#include <assert.h>
-#include <string.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <arpa/inet.h>
-
-#ifdef DEBUG_CONNTRACK
-#define inline
-#endif
-
-#if !defined(__GLIBC__) || (__GLIBC__ < 2)
-typedef unsigned int socklen_t;
-#endif
-
-#include "libiptc/libip6tc.h"
-
-#define HOOK_PRE_ROUTING       NF_IP6_PRE_ROUTING
-#define HOOK_LOCAL_IN          NF_IP6_LOCAL_IN
-#define HOOK_FORWARD           NF_IP6_FORWARD
-#define HOOK_LOCAL_OUT         NF_IP6_LOCAL_OUT
-#define HOOK_POST_ROUTING      NF_IP6_POST_ROUTING
-
-#define STRUCT_ENTRY_TARGET    struct ip6t_entry_target
-#define STRUCT_ENTRY           struct ip6t_entry
-#define STRUCT_ENTRY_MATCH     struct ip6t_entry_match
-#define STRUCT_GETINFO         struct ip6t_getinfo
-#define STRUCT_GET_ENTRIES     struct ip6t_get_entries
-#define STRUCT_COUNTERS                struct ip6t_counters
-#define STRUCT_COUNTERS_INFO   struct ip6t_counters_info
-#define STRUCT_STANDARD_TARGET struct ip6t_standard_target
-#define STRUCT_REPLACE         struct ip6t_replace
-
-#define STRUCT_TC_HANDLE       struct ip6tc_handle
-#define TC_HANDLE_T            ip6tc_handle_t
-
-#define ENTRY_ITERATE          IP6T_ENTRY_ITERATE
-#define TABLE_MAXNAMELEN       IP6T_TABLE_MAXNAMELEN
-#define FUNCTION_MAXNAMELEN    IP6T_FUNCTION_MAXNAMELEN
-
-#define GET_TARGET             ip6t_get_target
-
-#define ERROR_TARGET           IP6T_ERROR_TARGET
-#define NUMHOOKS               NF_IP6_NUMHOOKS
-
-#define IPT_CHAINLABEL         ip6t_chainlabel
-
-#define TC_DUMP_ENTRIES                dump_entries6
-#define TC_IS_CHAIN            ip6tc_is_chain
-#define TC_FIRST_CHAIN         ip6tc_first_chain
-#define TC_NEXT_CHAIN          ip6tc_next_chain
-#define TC_FIRST_RULE          ip6tc_first_rule
-#define TC_NEXT_RULE           ip6tc_next_rule
-#define TC_GET_TARGET          ip6tc_get_target
-#define TC_BUILTIN             ip6tc_builtin
-#define TC_GET_POLICY          ip6tc_get_policy
-#define TC_INSERT_ENTRY                ip6tc_insert_entry
-#define TC_REPLACE_ENTRY       ip6tc_replace_entry
-#define TC_APPEND_ENTRY                ip6tc_append_entry
-#define TC_DELETE_ENTRY                ip6tc_delete_entry
-#define TC_DELETE_NUM_ENTRY    ip6tc_delete_num_entry
-#define TC_CHECK_PACKET                ip6tc_check_packet
-#define TC_FLUSH_ENTRIES       ip6tc_flush_entries
-#define TC_ZERO_ENTRIES                ip6tc_zero_entries
-#define TC_ZERO_COUNTER                ip6tc_zero_counter
-#define TC_READ_COUNTER                ip6tc_read_counter
-#define TC_SET_COUNTER         ip6tc_set_counter
-#define TC_CREATE_CHAIN                ip6tc_create_chain
-#define TC_GET_REFERENCES      ip6tc_get_references
-#define TC_DELETE_CHAIN                ip6tc_delete_chain
-#define TC_RENAME_CHAIN                ip6tc_rename_chain
-#define TC_SET_POLICY          ip6tc_set_policy
-#define TC_GET_RAW_SOCKET      ip6tc_get_raw_socket
-#define TC_INIT                        ip6tc_init
-#define TC_FREE                        ip6tc_free
-#define TC_COMMIT              ip6tc_commit
-#define TC_STRERROR            ip6tc_strerror
-#define TC_NUM_RULES           ip6tc_num_rules
-#define TC_GET_RULE            ip6tc_get_rule
-
-#define TC_AF                  AF_INET6
-#define TC_IPPROTO             IPPROTO_IPV6
-
-#define SO_SET_REPLACE         IP6T_SO_SET_REPLACE
-#define SO_SET_ADD_COUNTERS    IP6T_SO_SET_ADD_COUNTERS
-#define SO_GET_INFO            IP6T_SO_GET_INFO
-#define SO_GET_ENTRIES         IP6T_SO_GET_ENTRIES
-#define SO_GET_VERSION         IP6T_SO_GET_VERSION
-
-#define STANDARD_TARGET                IP6T_STANDARD_TARGET
-#define LABEL_RETURN           IP6TC_LABEL_RETURN
-#define LABEL_ACCEPT           IP6TC_LABEL_ACCEPT
-#define LABEL_DROP             IP6TC_LABEL_DROP
-#define LABEL_QUEUE            IP6TC_LABEL_QUEUE
-
-#define ALIGN                  IP6T_ALIGN
-#define RETURN                 IP6T_RETURN
-
-#include "libiptc.c"
-
-#define BIT6(a, l) \
- ((ntohl(a->s6_addr32[(l) / 32]) >> (31 - ((l) & 31))) & 1)
-
-int
-ipv6_prefix_length(const struct in6_addr *a)
-{
-       int l, i;
-       for (l = 0; l < 128; l++) {
-               if (BIT6(a, l) == 0)
-                       break;
-       }
-       for (i = l + 1; i < 128; i++) {
-               if (BIT6(a, i) == 1)
-                       return -1;
-       }
-       return l;
-}
-
-static int
-dump_entry(struct ip6t_entry *e, const ip6tc_handle_t handle)
-{
-       size_t i;
-       char buf[40];
-       int len;
-       struct ip6t_entry_target *t;
-       
-       printf("Entry %u (%lu):\n", iptcb_entry2index(handle, e),
-              iptcb_entry2offset(handle, e));
-       puts("SRC IP: ");
-       inet_ntop(AF_INET6, &e->ipv6.src, buf, sizeof buf);
-       puts(buf);
-       putchar('/');
-       len = ipv6_prefix_length(&e->ipv6.smsk);
-       if (len != -1)
-               printf("%d", len);
-       else {
-               inet_ntop(AF_INET6, &e->ipv6.smsk, buf, sizeof buf);
-               puts(buf);
-       }
-       putchar('\n');
-       
-       puts("DST IP: ");
-       inet_ntop(AF_INET6, &e->ipv6.dst, buf, sizeof buf);
-       puts(buf);
-       putchar('/');
-       len = ipv6_prefix_length(&e->ipv6.dmsk);
-       if (len != -1)
-               printf("%d", len);
-       else {
-               inet_ntop(AF_INET6, &e->ipv6.dmsk, buf, sizeof buf);
-               puts(buf);
-       }
-       putchar('\n');
-       
-       printf("Interface: `%s'/", e->ipv6.iniface);
-       for (i = 0; i < IFNAMSIZ; i++)
-               printf("%c", e->ipv6.iniface_mask[i] ? 'X' : '.');
-       printf("to `%s'/", e->ipv6.outiface);
-       for (i = 0; i < IFNAMSIZ; i++)
-               printf("%c", e->ipv6.outiface_mask[i] ? 'X' : '.');
-       printf("\nProtocol: %u\n", e->ipv6.proto);
-       if (e->ipv6.flags & IP6T_F_TOS)
-               printf("TOS: %u\n", e->ipv6.tos);
-       printf("Flags: %02X\n", e->ipv6.flags);
-       printf("Invflags: %02X\n", e->ipv6.invflags);
-       printf("Counters: %llu packets, %llu bytes\n",
-              (unsigned long long)e->counters.pcnt, (unsigned long long)e->counters.bcnt);
-       printf("Cache: %08X\n", e->nfcache);
-       
-       IP6T_MATCH_ITERATE(e, print_match);
-
-       t = ip6t_get_target(e);
-       printf("Target name: `%s' [%u]\n", t->u.user.name, t->u.target_size);
-       if (strcmp(t->u.user.name, IP6T_STANDARD_TARGET) == 0) {
-               int pos = *(int *)t->data;
-               if (pos < 0)
-                       printf("verdict=%s\n",
-                              pos == -NF_ACCEPT-1 ? "NF_ACCEPT"
-                              : pos == -NF_DROP-1 ? "NF_DROP"
-                              : pos == IP6T_RETURN ? "RETURN"
-                              : "UNKNOWN");
-               else
-                       printf("verdict=%u\n", pos);
-       } else if (strcmp(t->u.user.name, IP6T_ERROR_TARGET) == 0)
-               printf("error=`%s'\n", t->data);
-
-       printf("\n");
-       return 0;
-}
-
-static unsigned char *
-is_same(const STRUCT_ENTRY *a, const STRUCT_ENTRY *b,
-       unsigned char *matchmask)
-{
-       unsigned int i;
-       unsigned char *mptr;
-
-       /* Always compare head structures: ignore mask here. */
-       if (memcmp(&a->ipv6.src, &b->ipv6.src, sizeof(struct in6_addr))
-           || memcmp(&a->ipv6.dst, &b->ipv6.dst, sizeof(struct in6_addr))
-           || memcmp(&a->ipv6.smsk, &b->ipv6.smsk, sizeof(struct in6_addr))
-           || memcmp(&a->ipv6.dmsk, &b->ipv6.dmsk, sizeof(struct in6_addr))
-           || a->ipv6.proto != b->ipv6.proto
-           || a->ipv6.tos != b->ipv6.tos
-           || a->ipv6.flags != b->ipv6.flags
-           || a->ipv6.invflags != b->ipv6.invflags)
-               return NULL;
-
-       for (i = 0; i < IFNAMSIZ; i++) {
-               if (a->ipv6.iniface_mask[i] != b->ipv6.iniface_mask[i])
-                       return NULL;
-               if ((a->ipv6.iniface[i] & a->ipv6.iniface_mask[i])
-                   != (b->ipv6.iniface[i] & b->ipv6.iniface_mask[i]))
-                       return NULL;
-               if (a->ipv6.outiface_mask[i] != b->ipv6.outiface_mask[i])
-                       return NULL;
-               if ((a->ipv6.outiface[i] & a->ipv6.outiface_mask[i])
-                   != (b->ipv6.outiface[i] & b->ipv6.outiface_mask[i]))
-                       return NULL;
-       }
-
-       if (a->target_offset != b->target_offset
-           || a->next_offset != b->next_offset)
-               return NULL;
-
-       mptr = matchmask + sizeof(STRUCT_ENTRY);
-       if (IP6T_MATCH_ITERATE(a, match_different, a->elems, b->elems, &mptr))
-               return NULL;
-       mptr += IP6T_ALIGN(sizeof(struct ip6t_entry_target));
-
-       return mptr;
-}
-
-/* All zeroes == unconditional rule. */
-static inline int
-unconditional(const struct ip6t_ip6 *ipv6)
-{
-       unsigned int i;
-
-       for (i = 0; i < sizeof(*ipv6); i++)
-               if (((char *)ipv6)[i])
-                       break;
-
-       return (i == sizeof(*ipv6));
-}
-
-#ifdef IPTC_DEBUG
-/* Do every conceivable sanity check on the handle */
-static void
-do_check(TC_HANDLE_T h, unsigned int line)
-{
-       unsigned int i, n;
-       unsigned int user_offset; /* Offset of first user chain */
-       int was_return;
-
-       assert(h->changed == 0 || h->changed == 1);
-       if (strcmp(h->info.name, "filter") == 0) {
-               assert(h->info.valid_hooks
-                      == (1 << NF_IP6_LOCAL_IN
-                          | 1 << NF_IP6_FORWARD
-                          | 1 << NF_IP6_LOCAL_OUT));
-
-               /* Hooks should be first three */
-               assert(h->info.hook_entry[NF_IP6_LOCAL_IN] == 0);
-
-               n = get_chain_end(h, 0);
-               n += get_entry(h, n)->next_offset;
-               assert(h->info.hook_entry[NF_IP6_FORWARD] == n);
-
-               n = get_chain_end(h, n);
-               n += get_entry(h, n)->next_offset;
-               assert(h->info.hook_entry[NF_IP6_LOCAL_OUT] == n);
-
-               user_offset = h->info.hook_entry[NF_IP6_LOCAL_OUT];
-       } else if (strcmp(h->info.name, "nat") == 0) {
-               assert((h->info.valid_hooks
-                       == (1 << NF_IP6_PRE_ROUTING
-                           | 1 << NF_IP6_LOCAL_OUT
-                           | 1 << NF_IP6_POST_ROUTING)) ||
-                      (h->info.valid_hooks
-                       == (1 << NF_IP6_PRE_ROUTING
-                           | 1 << NF_IP6_LOCAL_IN
-                           | 1 << NF_IP6_LOCAL_OUT
-                           | 1 << NF_IP6_POST_ROUTING)));
-
-               assert(h->info.hook_entry[NF_IP6_PRE_ROUTING] == 0);
-
-               n = get_chain_end(h, 0);
-
-               n += get_entry(h, n)->next_offset;
-               assert(h->info.hook_entry[NF_IP6_POST_ROUTING] == n);
-               n = get_chain_end(h, n);
-
-               n += get_entry(h, n)->next_offset;
-               assert(h->info.hook_entry[NF_IP6_LOCAL_OUT] == n);
-               user_offset = h->info.hook_entry[NF_IP6_LOCAL_OUT];
-
-               if (h->info.valid_hooks & (1 << NF_IP6_LOCAL_IN)) {
-                       n = get_chain_end(h, n);
-                       n += get_entry(h, n)->next_offset;
-                       assert(h->info.hook_entry[NF_IP6_LOCAL_IN] == n);
-                       user_offset = h->info.hook_entry[NF_IP6_LOCAL_IN];
-               }
-
-       } else if (strcmp(h->info.name, "mangle") == 0) {
-               /* This code is getting ugly because linux < 2.4.18-pre6 had
-                * two mangle hooks, linux >= 2.4.18-pre6 has five mangle hooks
-                * */
-               assert((h->info.valid_hooks
-                       == (1 << NF_IP6_PRE_ROUTING
-                           | 1 << NF_IP6_LOCAL_OUT)) ||
-                      (h->info.valid_hooks
-                       == (1 << NF_IP6_PRE_ROUTING
-                           | 1 << NF_IP6_LOCAL_IN
-                           | 1 << NF_IP6_FORWARD
-                           | 1 << NF_IP6_LOCAL_OUT
-                           | 1 << NF_IP6_POST_ROUTING)));
-
-               /* Hooks should be first five */
-               assert(h->info.hook_entry[NF_IP6_PRE_ROUTING] == 0);
-
-               n = get_chain_end(h, 0);
-
-               if (h->info.valid_hooks & (1 << NF_IP6_LOCAL_IN)) {
-                       n += get_entry(h, n)->next_offset;
-                       assert(h->info.hook_entry[NF_IP6_LOCAL_IN] == n);
-                       n = get_chain_end(h, n);
-               }
-
-               if (h->info.valid_hooks & (1 << NF_IP6_FORWARD)) {
-                       n += get_entry(h, n)->next_offset;
-                       assert(h->info.hook_entry[NF_IP6_FORWARD] == n);
-                       n = get_chain_end(h, n);
-               }
-
-               n += get_entry(h, n)->next_offset;
-               assert(h->info.hook_entry[NF_IP6_LOCAL_OUT] == n);
-               user_offset = h->info.hook_entry[NF_IP6_LOCAL_OUT];
-
-               if (h->info.valid_hooks & (1 << NF_IP6_POST_ROUTING)) {
-                       n = get_chain_end(h, n);
-                       n += get_entry(h, n)->next_offset;
-                       assert(h->info.hook_entry[NF_IP6_POST_ROUTING] == n);
-                       user_offset = h->info.hook_entry[NF_IP6_POST_ROUTING];
-               }
-       } else if (strcmp(h->info.name, "raw") == 0) {
-               assert(h->info.valid_hooks
-                      == (1 << NF_IP6_PRE_ROUTING
-                          | 1 << NF_IP6_LOCAL_OUT));
-
-               /* Hooks should be first three */
-               assert(h->info.hook_entry[NF_IP6_PRE_ROUTING] == 0);
-
-               n = get_chain_end(h, n);
-               n += get_entry(h, n)->next_offset;
-               assert(h->info.hook_entry[NF_IP6_LOCAL_OUT] == n);
-
-               user_offset = h->info.hook_entry[NF_IP6_LOCAL_OUT];
-       } else {
-                fprintf(stderr, "Unknown table `%s'\n", h->info.name);
-               abort();
-       }
-
-       /* User chain == end of last builtin + policy entry */
-       user_offset = get_chain_end(h, user_offset);
-       user_offset += get_entry(h, user_offset)->next_offset;
-
-       /* Overflows should be end of entry chains, and unconditional
-           policy nodes. */
-       for (i = 0; i < NUMHOOKS; i++) {
-               STRUCT_ENTRY *e;
-               STRUCT_STANDARD_TARGET *t;
-
-               if (!(h->info.valid_hooks & (1 << i)))
-                       continue;
-               assert(h->info.underflow[i]
-                      == get_chain_end(h, h->info.hook_entry[i]));
-
-               e = get_entry(h, get_chain_end(h, h->info.hook_entry[i]));
-               assert(unconditional(&e->ipv6));
-               assert(e->target_offset == sizeof(*e));
-               t = (STRUCT_STANDARD_TARGET *)GET_TARGET(e);
-               printf("target_size=%u, align=%u\n",
-                       t->target.u.target_size, ALIGN(sizeof(*t)));
-               assert(t->target.u.target_size == ALIGN(sizeof(*t)));
-               assert(e->next_offset == sizeof(*e) + ALIGN(sizeof(*t)));
-
-               assert(strcmp(t->target.u.user.name, STANDARD_TARGET)==0);
-               assert(t->verdict == -NF_DROP-1 || t->verdict == -NF_ACCEPT-1);
-
-               /* Hooks and underflows must be valid entries */
-               iptcb_entry2index(h, get_entry(h, h->info.hook_entry[i]));
-               iptcb_entry2index(h, get_entry(h, h->info.underflow[i]));
-       }
-
-       assert(h->info.size
-              >= h->info.num_entries * (sizeof(STRUCT_ENTRY)
-                                        +sizeof(STRUCT_STANDARD_TARGET)));
-
-       assert(h->entries.size
-              >= (h->new_number
-                  * (sizeof(STRUCT_ENTRY)
-                     + sizeof(STRUCT_STANDARD_TARGET))));
-       assert(strcmp(h->info.name, h->entries.name) == 0);
-
-       i = 0; n = 0;
-       was_return = 0;
-
-#if 0
-       /* Check all the entries. */
-       ENTRY_ITERATE(h->entries.entrytable, h->entries.size,
-                     check_entry, &i, &n, user_offset, &was_return, h);
-
-       assert(i == h->new_number);
-       assert(n == h->entries.size);
-
-       /* Final entry must be error node */
-       assert(strcmp(GET_TARGET(index2entry(h, h->new_number-1))
-                     ->u.user.name,
-                     ERROR_TARGET) == 0);
-#endif
-}
-#endif /*IPTC_DEBUG*/
diff --git a/libiptc/libiptc.c b/libiptc/libiptc.c
deleted file mode 100644 (file)
index d0f51b4..0000000
+++ /dev/null
@@ -1,2690 +0,0 @@
-/* Library which manipulates firewall rules.  Version $Revision$ */
-
-/* Architecture of firewall rules is as follows:
- *
- * Chains go INPUT, FORWARD, OUTPUT then user chains.
- * Each user chain starts with an ERROR node.
- * Every chain ends with an unconditional jump: a RETURN for user chains,
- * and a POLICY for built-ins.
- */
-
-/* (C) 1999 Paul ``Rusty'' Russell - Placed under the GNU GPL (See
- * COPYING for details). 
- * (C) 2000-2004 by the Netfilter Core Team <coreteam@netfilter.org>
- *
- * 2003-Jun-20: Harald Welte <laforge@netfilter.org>:
- *     - Reimplementation of chain cache to use offsets instead of entries
- * 2003-Jun-23: Harald Welte <laforge@netfilter.org>:
- *     - performance optimization, sponsored by Astaro AG (http://www.astaro.com/)
- *       don't rebuild the chain cache after every operation, instead fix it
- *       up after a ruleset change.  
- * 2004-Aug-18: Harald Welte <laforge@netfilter.org>:
- *     - futher performance work: total reimplementation of libiptc.
- *     - libiptc now has a real internal (linked-list) represntation of the
- *       ruleset and a parser/compiler from/to this internal representation
- *     - again sponsored by Astaro AG (http://www.astaro.com/)
- */
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <xtables.h>
-
-#include "linux_list.h"
-
-//#define IPTC_DEBUG2 1
-
-#ifdef IPTC_DEBUG2
-#include <fcntl.h>
-#define DEBUGP(x, args...)     fprintf(stderr, "%s: " x, __FUNCTION__, ## args)
-#define DEBUGP_C(x, args...)   fprintf(stderr, x, ## args)
-#else
-#define DEBUGP(x, args...)
-#define DEBUGP_C(x, args...)
-#endif
-
-#ifdef DEBUG
-#define debug(x, args...)      fprintf(stderr, x, ## args)
-#else
-#define debug(x, args...)
-#endif
-
-static int sockfd = -1;
-static int sockfd_use = 0;
-static void *iptc_fn = NULL;
-
-static const char *hooknames[] = {
-       [HOOK_PRE_ROUTING]      = "PREROUTING",
-       [HOOK_LOCAL_IN]         = "INPUT",
-       [HOOK_FORWARD]          = "FORWARD",
-       [HOOK_LOCAL_OUT]        = "OUTPUT",
-       [HOOK_POST_ROUTING]     = "POSTROUTING",
-#ifdef HOOK_DROPPING
-       [HOOK_DROPPING]         = "DROPPING"
-#endif
-};
-
-/* Convenience structures */
-struct ipt_error_target
-{
-       STRUCT_ENTRY_TARGET t;
-       char error[TABLE_MAXNAMELEN];
-};
-
-struct chain_head;
-struct rule_head;
-
-struct counter_map
-{
-       enum {
-               COUNTER_MAP_NOMAP,
-               COUNTER_MAP_NORMAL_MAP,
-               COUNTER_MAP_ZEROED,
-               COUNTER_MAP_SET
-       } maptype;
-       unsigned int mappos;
-};
-
-enum iptcc_rule_type {
-       IPTCC_R_STANDARD,               /* standard target (ACCEPT, ...) */
-       IPTCC_R_MODULE,                 /* extension module (SNAT, ...) */
-       IPTCC_R_FALLTHROUGH,            /* fallthrough rule */
-       IPTCC_R_JUMP,                   /* jump to other chain */
-};
-
-struct rule_head
-{
-       struct list_head list;
-       struct chain_head *chain;
-       struct counter_map counter_map;
-
-       unsigned int index;             /* index (needed for counter_map) */
-       unsigned int offset;            /* offset in rule blob */
-
-       enum iptcc_rule_type type;
-       struct chain_head *jump;        /* jump target, if IPTCC_R_JUMP */
-
-       unsigned int size;              /* size of entry data */
-       STRUCT_ENTRY entry[0];
-};
-
-struct chain_head
-{
-       struct list_head list;
-       char name[TABLE_MAXNAMELEN];
-       unsigned int hooknum;           /* hook number+1 if builtin */
-       unsigned int references;        /* how many jumps reference us */
-       int verdict;                    /* verdict if builtin */
-
-       STRUCT_COUNTERS counters;       /* per-chain counters */
-       struct counter_map counter_map;
-
-       unsigned int num_rules;         /* number of rules in list */
-       struct list_head rules;         /* list of rules */
-
-       unsigned int index;             /* index (needed for jump resolval) */
-       unsigned int head_offset;       /* offset in rule blob */
-       unsigned int foot_index;        /* index (needed for counter_map) */
-       unsigned int foot_offset;       /* offset in rule blob */
-};
-
-STRUCT_TC_HANDLE
-{
-       int changed;                     /* Have changes been made? */
-
-       struct list_head chains;
-       
-       struct chain_head *chain_iterator_cur;
-       struct rule_head *rule_iterator_cur;
-
-       unsigned int num_chains;         /* number of user defined chains */
-
-       struct chain_head **chain_index;   /* array for fast chain list access*/
-       unsigned int        chain_index_sz;/* size of chain index array */
-
-       STRUCT_GETINFO info;
-       STRUCT_GET_ENTRIES *entries;
-};
-
-/* allocate a new chain head for the cache */
-static struct chain_head *iptcc_alloc_chain_head(const char *name, int hooknum)
-{
-       struct chain_head *c = malloc(sizeof(*c));
-       if (!c)
-               return NULL;
-       memset(c, 0, sizeof(*c));
-
-       strncpy(c->name, name, TABLE_MAXNAMELEN);
-       c->hooknum = hooknum;
-       INIT_LIST_HEAD(&c->rules);
-
-       return c;
-}
-
-/* allocate and initialize a new rule for the cache */
-static struct rule_head *iptcc_alloc_rule(struct chain_head *c, unsigned int size)
-{
-       struct rule_head *r = malloc(sizeof(*r)+size);
-       if (!r)
-               return NULL;
-       memset(r, 0, sizeof(*r));
-
-       r->chain = c;
-       r->size = size;
-
-       return r;
-}
-
-/* notify us that the ruleset has been modified by the user */
-static inline void
-set_changed(TC_HANDLE_T h)
-{
-       h->changed = 1;
-}
-
-#ifdef IPTC_DEBUG
-static void do_check(TC_HANDLE_T h, unsigned int line);
-#define CHECK(h) do { if (!getenv("IPTC_NO_CHECK")) do_check((h), __LINE__); } while(0)
-#else
-#define CHECK(h)
-#endif
-
-
-/**********************************************************************
- * iptc blob utility functions (iptcb_*)
- **********************************************************************/
-
-static inline int
-iptcb_get_number(const STRUCT_ENTRY *i,
-          const STRUCT_ENTRY *seek,
-          unsigned int *pos)
-{
-       if (i == seek)
-               return 1;
-       (*pos)++;
-       return 0;
-}
-
-static inline int
-iptcb_get_entry_n(STRUCT_ENTRY *i,
-           unsigned int number,
-           unsigned int *pos,
-           STRUCT_ENTRY **pe)
-{
-       if (*pos == number) {
-               *pe = i;
-               return 1;
-       }
-       (*pos)++;
-       return 0;
-}
-
-static inline STRUCT_ENTRY *
-iptcb_get_entry(TC_HANDLE_T h, unsigned int offset)
-{
-       return (STRUCT_ENTRY *)((char *)h->entries->entrytable + offset);
-}
-
-static unsigned int
-iptcb_entry2index(const TC_HANDLE_T h, const STRUCT_ENTRY *seek)
-{
-       unsigned int pos = 0;
-
-       if (ENTRY_ITERATE(h->entries->entrytable, h->entries->size,
-                         iptcb_get_number, seek, &pos) == 0) {
-               fprintf(stderr, "ERROR: offset %u not an entry!\n",
-                       (unsigned int)((char *)seek - (char *)h->entries->entrytable));
-               abort();
-       }
-       return pos;
-}
-
-static inline STRUCT_ENTRY *
-iptcb_offset2entry(TC_HANDLE_T h, unsigned int offset)
-{
-       return (STRUCT_ENTRY *) ((void *)h->entries->entrytable+offset);
-}
-
-
-static inline unsigned long
-iptcb_entry2offset(const TC_HANDLE_T h, const STRUCT_ENTRY *e)
-{
-       return (void *)e - (void *)h->entries->entrytable;
-}
-
-static inline unsigned int
-iptcb_offset2index(const TC_HANDLE_T h, unsigned int offset)
-{
-       return iptcb_entry2index(h, iptcb_offset2entry(h, offset));
-}
-
-/* Returns 0 if not hook entry, else hooknumber + 1 */
-static inline unsigned int
-iptcb_ent_is_hook_entry(STRUCT_ENTRY *e, TC_HANDLE_T h)
-{
-       unsigned int i;
-
-       for (i = 0; i < NUMHOOKS; i++) {
-               if ((h->info.valid_hooks & (1 << i))
-                   && iptcb_get_entry(h, h->info.hook_entry[i]) == e)
-                       return i+1;
-       }
-       return 0;
-}
-
-
-/**********************************************************************
- * Chain index (cache utility) functions
- **********************************************************************
- * The chain index is an array with pointers into the chain list, with
- * CHAIN_INDEX_BUCKET_LEN spacing.  This facilitates the ability to
- * speedup chain list searching, by find a more optimal starting
- * points when searching the linked list.
- *
- * The starting point can be found fast by using a binary search of
- * the chain index. Thus, reducing the previous search complexity of
- * O(n) to O(log(n/k) + k) where k is CHAIN_INDEX_BUCKET_LEN.
- *
- * A nice property of the chain index, is that the "bucket" list
- * length is max CHAIN_INDEX_BUCKET_LEN (when just build, inserts will
- * change this). Oppose to hashing, where the "bucket" list length can
- * vary a lot.
- */
-#ifndef CHAIN_INDEX_BUCKET_LEN
-#define CHAIN_INDEX_BUCKET_LEN 40
-#endif
-
-/* Another nice property of the chain index is that inserting/creating
- * chains in chain list don't change the correctness of the chain
- * index, it only causes longer lists in the buckets.
- *
- * To mitigate the performance penalty of longer bucket lists and the
- * penalty of rebuilding, the chain index is rebuild only when
- * CHAIN_INDEX_INSERT_MAX chains has been added.
- */
-#ifndef CHAIN_INDEX_INSERT_MAX
-#define CHAIN_INDEX_INSERT_MAX 355
-#endif
-
-static inline unsigned int iptcc_is_builtin(struct chain_head *c);
-
-
-/* Use binary search in the chain index array, to find a chain_head
- * pointer closest to the place of the searched name element.
- *
- * Notes that, binary search (obviously) requires that the chain list
- * is sorted by name.
- */
-static struct list_head *
-iptcc_bsearch_chain_index(const char *name, unsigned int *idx, TC_HANDLE_T handle)
-{
-       unsigned int pos, end;
-       int res;
-
-       struct list_head *list_pos;
-       list_pos=&handle->chains;
-
-       /* Check for empty array, e.g. no user defined chains */
-       if (handle->chain_index_sz == 0) {
-               debug("WARNING: handle->chain_index_sz == 0\n");
-               return list_pos;
-       }
-
-       /* Init */
-       end = handle->chain_index_sz;
-       pos = end / 2;
-
-       debug("bsearch Find chain:%s (pos:%d end:%d)\n", name, pos, end);
-
-       /* Loop */
- loop:
-       if (!handle->chain_index[pos]) {
-               fprintf(stderr, "ERROR: NULL pointer chain_index[%d]\n", pos);
-               return &handle->chains; /* Be safe, return orig start pos */
-       }
-
-       res = strcmp(name, handle->chain_index[pos]->name);
-       list_pos = &handle->chain_index[pos]->list;
-       *idx = pos;
-
-       debug("bsearch Index[%d] name:%s res:%d ",
-             pos, handle->chain_index[pos]->name, res);
-
-       if (res == 0) { /* Found element, by direct hit */
-               debug("[found] Direct hit pos:%d end:%d\n", pos, end);
-               return list_pos;
-       } else if (res < 0) { /* Too far, jump back */
-               end = pos;
-               pos = pos / 2;
-
-               /* Exit case: First element of array */
-               if (end == 0) {
-                       debug("[found] Reached first array elem (end%d)\n",end);
-                       return list_pos;
-               }
-               debug("jump back to pos:%d (end:%d)\n", pos, end);
-               goto loop;
-       } else if (res > 0 ){ /* Not far enough, jump forward */
-
-               /* Exit case: Last element of array */
-               if (pos == handle->chain_index_sz-1) {
-                       debug("[found] Last array elem (end:%d)\n", end);
-                       return list_pos;
-               }
-
-               /* Exit case: Next index less, thus elem in this list section */
-               res = strcmp(name, handle->chain_index[pos+1]->name);
-               if (res < 0) {
-                       debug("[found] closest list (end:%d)\n", end);
-                       return list_pos;
-               }
-
-               pos = (pos+end)/2;
-               debug("jump forward to pos:%d (end:%d)\n", pos, end);
-               goto loop;
-       }
-
-       return list_pos;
-}
-
-#ifdef DEBUG
-/* Trivial linear search of chain index. Function used for verifying
-   the output of bsearch function */
-static struct list_head *
-iptcc_linearly_search_chain_index(const char *name, TC_HANDLE_T handle)
-{
-       unsigned int i=0;
-       int res=0;
-
-       struct list_head *list_pos;
-       list_pos = &handle->chains;
-
-       if (handle->chain_index_sz)
-               list_pos = &handle->chain_index[0]->list;
-
-       /* Linearly walk of chain index array */
-
-       for (i=0; i < handle->chain_index_sz; i++) {
-               if (handle->chain_index[i]) {
-                       res = strcmp(handle->chain_index[i]->name, name);
-                       if (res > 0)
-                               break; // One step too far
-                       list_pos = &handle->chain_index[i]->list;
-                       if (res == 0)
-                               break; // Direct hit
-               }
-       }
-
-       return list_pos;
-}
-#endif
-
-static int iptcc_chain_index_alloc(TC_HANDLE_T h)
-{
-       unsigned int list_length = CHAIN_INDEX_BUCKET_LEN;
-       unsigned int array_elems;
-       unsigned int array_mem;
-
-       /* Allocate memory for the chain index array */
-       array_elems = (h->num_chains / list_length) +
-                      (h->num_chains % list_length ? 1 : 0);
-       array_mem   = sizeof(h->chain_index) * array_elems;
-
-       debug("Alloc Chain index, elems:%d mem:%d bytes\n",
-             array_elems, array_mem);
-
-       h->chain_index = malloc(array_mem);
-       if (!h->chain_index) {
-               h->chain_index_sz = 0;
-               return -ENOMEM;
-       }
-       memset(h->chain_index, 0, array_mem);
-       h->chain_index_sz = array_elems;
-
-       return 1;
-}
-
-static void iptcc_chain_index_free(TC_HANDLE_T h)
-{
-       h->chain_index_sz = 0;
-       free(h->chain_index);
-}
-
-
-#ifdef DEBUG
-static void iptcc_chain_index_dump(TC_HANDLE_T h)
-{
-       unsigned int i = 0;
-
-       /* Dump: contents of chain index array */
-       for (i=0; i < h->chain_index_sz; i++) {
-               if (h->chain_index[i]) {
-                       fprintf(stderr, "Chain index[%d].name: %s\n",
-                               i, h->chain_index[i]->name);
-               }
-       }
-}
-#endif
-
-/* Build the chain index */
-static int iptcc_chain_index_build(TC_HANDLE_T h)
-{
-       unsigned int list_length = CHAIN_INDEX_BUCKET_LEN;
-       unsigned int chains = 0;
-       unsigned int cindex = 0;
-       struct chain_head *c;
-
-       /* Build up the chain index array here */
-       debug("Building chain index\n");
-
-       debug("Number of user defined chains:%d bucket_sz:%d array_sz:%d\n",
-               h->num_chains, list_length, h->chain_index_sz);
-
-       if (h->chain_index_sz == 0)
-               return 0;
-
-       list_for_each_entry(c, &h->chains, list) {
-
-               /* Issue: The index array needs to start after the
-                * builtin chains, as they are not sorted */
-               if (!iptcc_is_builtin(c)) {
-                       cindex=chains / list_length;
-
-                       /* Safe guard, break out on array limit, this
-                        * is useful if chains are added and array is
-                        * rebuild, without realloc of memory. */
-                       if (cindex >= h->chain_index_sz)
-                               break;
-
-                       if ((chains % list_length)== 0) {
-                               debug("\nIndex[%d] Chains:", cindex);
-                               h->chain_index[cindex] = c;
-                       }
-                       chains++;
-               }
-               debug("%s, ", c->name);
-       }
-       debug("\n");
-
-       return 1;
-}
-
-static int iptcc_chain_index_rebuild(TC_HANDLE_T h)
-{
-       debug("REBUILD chain index array\n");
-       iptcc_chain_index_free(h);
-       if ((iptcc_chain_index_alloc(h)) < 0)
-               return -ENOMEM;
-       iptcc_chain_index_build(h);
-       return 1;
-}
-
-/* Delete chain (pointer) from index array.  Removing an element from
- * the chain list only affects the chain index array, if the chain
- * index points-to/uses that list pointer.
- *
- * There are different strategies, the simple and safe is to rebuild
- * the chain index every time.  The more advanced is to update the
- * array index to point to the next element, but that requires some
- * house keeping and boundry checks.  The advanced is implemented, as
- * the simple approach behaves badly when all chains are deleted
- * because list_for_each processing will always hit the first chain
- * index, thus causing a rebuild for every chain.
- */
-static int iptcc_chain_index_delete_chain(struct chain_head *c, TC_HANDLE_T h)
-{
-       struct list_head *index_ptr, *index_ptr2, *next;
-       struct chain_head *c2;
-       unsigned int idx, idx2;
-
-       index_ptr = iptcc_bsearch_chain_index(c->name, &idx, h);
-
-       debug("Del chain[%s] c->list:%p index_ptr:%p\n",
-             c->name, &c->list, index_ptr);
-
-       /* Save the next pointer */
-       next = c->list.next;
-       list_del(&c->list);
-
-       if (index_ptr == &c->list) { /* Chain used as index ptr */
-
-               /* See if its possible to avoid a rebuild, by shifting
-                * to next pointer.  Its possible if the next pointer
-                * is located in the same index bucket.
-                */
-               c2         = list_entry(next, struct chain_head, list);
-               index_ptr2 = iptcc_bsearch_chain_index(c2->name, &idx2, h);
-               if (idx != idx2) {
-                       /* Rebuild needed */
-                       return iptcc_chain_index_rebuild(h);
-               } else {
-                       /* Avoiding rebuild */
-                       debug("Update cindex[%d] with next ptr name:[%s]\n",
-                             idx, c2->name);
-                       h->chain_index[idx]=c2;
-                       return 0;
-               }
-       }
-       return 0;
-}
-
-
-/**********************************************************************
- * iptc cache utility functions (iptcc_*)
- **********************************************************************/
-
-/* Is the given chain builtin (1) or user-defined (0) */
-static inline unsigned int iptcc_is_builtin(struct chain_head *c)
-{
-       return (c->hooknum ? 1 : 0);
-}
-
-/* Get a specific rule within a chain */
-static struct rule_head *iptcc_get_rule_num(struct chain_head *c,
-                                           unsigned int rulenum)
-{
-       struct rule_head *r;
-       unsigned int num = 0;
-
-       list_for_each_entry(r, &c->rules, list) {
-               num++;
-               if (num == rulenum)
-                       return r;
-       }
-       return NULL;
-}
-
-/* Get a specific rule within a chain backwards */
-static struct rule_head *iptcc_get_rule_num_reverse(struct chain_head *c,
-                                           unsigned int rulenum)
-{
-       struct rule_head *r;
-       unsigned int num = 0;
-
-       list_for_each_entry_reverse(r, &c->rules, list) {
-               num++;
-               if (num == rulenum)
-                       return r;
-       }
-       return NULL;
-}
-
-/* Returns chain head if found, otherwise NULL. */
-static struct chain_head *
-iptcc_find_chain_by_offset(TC_HANDLE_T handle, unsigned int offset)
-{
-       struct list_head *pos;
-
-       if (list_empty(&handle->chains))
-               return NULL;
-
-       list_for_each(pos, &handle->chains) {
-               struct chain_head *c = list_entry(pos, struct chain_head, list);
-               if (offset >= c->head_offset && offset <= c->foot_offset)
-                       return c;
-       }
-
-       return NULL;
-}
-
-/* Returns chain head if found, otherwise NULL. */
-static struct chain_head *
-iptcc_find_label(const char *name, TC_HANDLE_T handle)
-{
-       struct list_head *pos;
-       struct list_head *list_start_pos;
-       unsigned int i=0;
-       int res;
-
-       if (list_empty(&handle->chains))
-               return NULL;
-
-       /* First look at builtin chains */
-       list_for_each(pos, &handle->chains) {
-               struct chain_head *c = list_entry(pos, struct chain_head, list);
-               if (!iptcc_is_builtin(c))
-                       break;
-               if (!strcmp(c->name, name))
-                       return c;
-       }
-
-       /* Find a smart place to start the search via chain index */
-       //list_start_pos = iptcc_linearly_search_chain_index(name, handle);
-       list_start_pos = iptcc_bsearch_chain_index(name, &i, handle);
-
-       /* Handel if bsearch bails out early */
-       if (list_start_pos == &handle->chains) {
-               list_start_pos = pos;
-       }
-#ifdef DEBUG
-       else {
-               /* Verify result of bsearch against linearly index search */
-               struct list_head *test_pos;
-               struct chain_head *test_c, *tmp_c;
-               test_pos = iptcc_linearly_search_chain_index(name, handle);
-               if (list_start_pos != test_pos) {
-                       debug("BUG in chain_index search\n");
-                       test_c=list_entry(test_pos,      struct chain_head,list);
-                       tmp_c =list_entry(list_start_pos,struct chain_head,list);
-                       debug("Verify search found:\n");
-                       debug(" Chain:%s\n", test_c->name);
-                       debug("BSearch found:\n");
-                       debug(" Chain:%s\n", tmp_c->name);
-                       exit(42);
-               }
-       }
-#endif
-
-       /* Initial/special case, no user defined chains */
-       if (handle->num_chains == 0)
-               return NULL;
-
-       /* Start searching through the chain list */
-       list_for_each(pos, list_start_pos->prev) {
-               struct chain_head *c = list_entry(pos, struct chain_head, list);
-               res = strcmp(c->name, name);
-               debug("List search name:%s == %s res:%d\n", name, c->name, res);
-               if (res==0)
-                       return c;
-
-               /* We can stop earlier as we know list is sorted */
-               if (res>0 && !iptcc_is_builtin(c)) { /* Walked too far*/
-                       debug(" Not in list, walked too far, sorted list\n");
-                       return NULL;
-               }
-
-               /* Stop on wrap around, if list head is reached */
-               if (pos == &handle->chains) {
-                       debug("Stop, list head reached\n");
-                       return NULL;
-               }
-       }
-
-       debug("List search NOT found name:%s\n", name);
-       return NULL;
-}
-
-/* called when rule is to be removed from cache */
-static void iptcc_delete_rule(struct rule_head *r)
-{
-       DEBUGP("deleting rule %p (offset %u)\n", r, r->offset);
-       /* clean up reference count of called chain */
-       if (r->type == IPTCC_R_JUMP
-           && r->jump)
-               r->jump->references--;
-
-       list_del(&r->list);
-       free(r);
-}
-
-
-/**********************************************************************
- * RULESET PARSER (blob -> cache)
- **********************************************************************/
-
-/* Delete policy rule of previous chain, since cache doesn't contain
- * chain policy rules.
- * WARNING: This function has ugly design and relies on a lot of context, only
- * to be called from specific places within the parser */
-static int __iptcc_p_del_policy(TC_HANDLE_T h, unsigned int num)
-{
-       if (h->chain_iterator_cur) {
-               /* policy rule is last rule */
-               struct rule_head *pr = (struct rule_head *)
-                       h->chain_iterator_cur->rules.prev;
-
-               /* save verdict */
-               h->chain_iterator_cur->verdict = 
-                       *(int *)GET_TARGET(pr->entry)->data;
-
-               /* save counter and counter_map information */
-               h->chain_iterator_cur->counter_map.maptype = 
-                                               COUNTER_MAP_NORMAL_MAP;
-               h->chain_iterator_cur->counter_map.mappos = num-1;
-               memcpy(&h->chain_iterator_cur->counters, &pr->entry->counters, 
-                       sizeof(h->chain_iterator_cur->counters));
-
-               /* foot_offset points to verdict rule */
-               h->chain_iterator_cur->foot_index = num;
-               h->chain_iterator_cur->foot_offset = pr->offset;
-
-               /* delete rule from cache */
-               iptcc_delete_rule(pr);
-               h->chain_iterator_cur->num_rules--;
-
-               return 1;
-       }
-       return 0;
-}
-
-/* alphabetically insert a chain into the list */
-static inline void iptc_insert_chain(TC_HANDLE_T h, struct chain_head *c)
-{
-       struct chain_head *tmp;
-       struct list_head  *list_start_pos;
-       unsigned int i=1;
-
-       /* Find a smart place to start the insert search */
-       list_start_pos = iptcc_bsearch_chain_index(c->name, &i, h);
-
-       /* Handle the case, where chain.name is smaller than index[0] */
-       if (i==0 && strcmp(c->name, h->chain_index[0]->name) <= 0) {
-               h->chain_index[0] = c; /* Update chain index head */
-               list_start_pos = h->chains.next;
-               debug("Update chain_index[0] with %s\n", c->name);
-       }
-
-       /* Handel if bsearch bails out early */
-       if (list_start_pos == &h->chains) {
-               list_start_pos = h->chains.next;
-       }
-
-       /* sort only user defined chains */
-       if (!c->hooknum) {
-               list_for_each_entry(tmp, list_start_pos->prev, list) {
-                       if (!tmp->hooknum && strcmp(c->name, tmp->name) <= 0) {
-                               list_add(&c->list, tmp->list.prev);
-                               return;
-                       }
-
-                       /* Stop if list head is reached */
-                       if (&tmp->list == &h->chains) {
-                               debug("Insert, list head reached add to tail\n");
-                               break;
-                       }
-               }
-       }
-
-       /* survived till end of list: add at tail */
-       list_add_tail(&c->list, &h->chains);
-}
-
-/* Another ugly helper function split out of cache_add_entry to make it less
- * spaghetti code */
-static void __iptcc_p_add_chain(TC_HANDLE_T h, struct chain_head *c,
-                               unsigned int offset, unsigned int *num)
-{
-       struct list_head  *tail = h->chains.prev;
-       struct chain_head *ctail;
-
-       __iptcc_p_del_policy(h, *num);
-
-       c->head_offset = offset;
-       c->index = *num;
-
-       /* Chains from kernel are already sorted, as they are inserted
-        * sorted. But there exists an issue when shifting to 1.4.0
-        * from an older version, as old versions allow last created
-        * chain to be unsorted.
-        */
-       if (iptcc_is_builtin(c)) /* Only user defined chains are sorted*/
-               list_add_tail(&c->list, &h->chains);
-       else {
-               ctail = list_entry(tail, struct chain_head, list);
-               if (strcmp(c->name, ctail->name) > 0)
-                       list_add_tail(&c->list, &h->chains);/* Already sorted*/
-               else
-                       iptc_insert_chain(h, c);/* Was not sorted */
-       }
-
-       h->chain_iterator_cur = c;
-}
-
-/* main parser function: add an entry from the blob to the cache */
-static int cache_add_entry(STRUCT_ENTRY *e, 
-                          TC_HANDLE_T h, 
-                          STRUCT_ENTRY **prev,
-                          unsigned int *num)
-{
-       unsigned int builtin;
-       unsigned int offset = (char *)e - (char *)h->entries->entrytable;
-
-       DEBUGP("entering...");
-
-       /* Last entry ("policy rule"). End it.*/
-       if (iptcb_entry2offset(h,e) + e->next_offset == h->entries->size) {
-               /* This is the ERROR node at the end of the chain */
-               DEBUGP_C("%u:%u: end of table:\n", *num, offset);
-
-               __iptcc_p_del_policy(h, *num);
-
-               h->chain_iterator_cur = NULL;
-               goto out_inc;
-       }
-
-       /* We know this is the start of a new chain if it's an ERROR
-        * target, or a hook entry point */
-
-       if (strcmp(GET_TARGET(e)->u.user.name, ERROR_TARGET) == 0) {
-               struct chain_head *c = 
-                       iptcc_alloc_chain_head((const char *)GET_TARGET(e)->data, 0);
-               DEBUGP_C("%u:%u:new userdefined chain %s: %p\n", *num, offset, 
-                       (char *)c->name, c);
-               if (!c) {
-                       errno = -ENOMEM;
-                       return -1;
-               }
-               h->num_chains++; /* New user defined chain */
-
-               __iptcc_p_add_chain(h, c, offset, num);
-
-       } else if ((builtin = iptcb_ent_is_hook_entry(e, h)) != 0) {
-               struct chain_head *c =
-                       iptcc_alloc_chain_head((char *)hooknames[builtin-1], 
-                                               builtin);
-               DEBUGP_C("%u:%u new builtin chain: %p (rules=%p)\n", 
-                       *num, offset, c, &c->rules);
-               if (!c) {
-                       errno = -ENOMEM;
-                       return -1;
-               }
-
-               c->hooknum = builtin;
-
-               __iptcc_p_add_chain(h, c, offset, num);
-
-               /* FIXME: this is ugly. */
-               goto new_rule;
-       } else {
-               /* has to be normal rule */
-               struct rule_head *r;
-new_rule:
-
-               if (!(r = iptcc_alloc_rule(h->chain_iterator_cur, 
-                                          e->next_offset))) {
-                       errno = ENOMEM;
-                       return -1;
-               }
-               DEBUGP_C("%u:%u normal rule: %p: ", *num, offset, r);
-
-               r->index = *num;
-               r->offset = offset;
-               memcpy(r->entry, e, e->next_offset);
-               r->counter_map.maptype = COUNTER_MAP_NORMAL_MAP;
-               r->counter_map.mappos = r->index;
-
-               /* handling of jumps, etc. */
-               if (!strcmp(GET_TARGET(e)->u.user.name, STANDARD_TARGET)) {
-                       STRUCT_STANDARD_TARGET *t;
-
-                       t = (STRUCT_STANDARD_TARGET *)GET_TARGET(e);
-                       if (t->target.u.target_size
-                           != ALIGN(sizeof(STRUCT_STANDARD_TARGET))) {
-                               errno = EINVAL;
-                               return -1;
-                       }
-
-                       if (t->verdict < 0) {
-                               DEBUGP_C("standard, verdict=%d\n", t->verdict);
-                               r->type = IPTCC_R_STANDARD;
-                       } else if (t->verdict == r->offset+e->next_offset) {
-                               DEBUGP_C("fallthrough\n");
-                               r->type = IPTCC_R_FALLTHROUGH;
-                       } else {
-                               DEBUGP_C("jump, target=%u\n", t->verdict);
-                               r->type = IPTCC_R_JUMP;
-                               /* Jump target fixup has to be deferred
-                                * until second pass, since we migh not
-                                * yet have parsed the target */
-                       }
-               } else {
-                       DEBUGP_C("module, target=%s\n", GET_TARGET(e)->u.user.name);
-                       r->type = IPTCC_R_MODULE;
-               }
-
-               list_add_tail(&r->list, &h->chain_iterator_cur->rules);
-               h->chain_iterator_cur->num_rules++;
-       }
-out_inc:
-       (*num)++;
-       return 0;
-}
-
-
-/* parse an iptables blob into it's pieces */
-static int parse_table(TC_HANDLE_T h)
-{
-       STRUCT_ENTRY *prev;
-       unsigned int num = 0;
-       struct chain_head *c;
-
-       /* First pass: over ruleset blob */
-       ENTRY_ITERATE(h->entries->entrytable, h->entries->size,
-                       cache_add_entry, h, &prev, &num);
-
-       /* Build the chain index, used for chain list search speedup */
-       if ((iptcc_chain_index_alloc(h)) < 0)
-               return -ENOMEM;
-       iptcc_chain_index_build(h);
-
-       /* Second pass: fixup parsed data from first pass */
-       list_for_each_entry(c, &h->chains, list) {
-               struct rule_head *r;
-               list_for_each_entry(r, &c->rules, list) {
-                       struct chain_head *lc;
-                       STRUCT_STANDARD_TARGET *t;
-
-                       if (r->type != IPTCC_R_JUMP)
-                               continue;
-
-                       t = (STRUCT_STANDARD_TARGET *)GET_TARGET(r->entry);
-                       lc = iptcc_find_chain_by_offset(h, t->verdict);
-                       if (!lc)
-                               return -1;
-                       r->jump = lc;
-                       lc->references++;
-               }
-       }
-
-       /* FIXME: sort chains */
-
-       return 1;
-}
-
-
-/**********************************************************************
- * RULESET COMPILATION (cache -> blob)
- **********************************************************************/
-
-/* Convenience structures */
-struct iptcb_chain_start{
-       STRUCT_ENTRY e;
-       struct ipt_error_target name;
-};
-#define IPTCB_CHAIN_START_SIZE (sizeof(STRUCT_ENTRY) +                 \
-                                ALIGN(sizeof(struct ipt_error_target)))
-
-struct iptcb_chain_foot {
-       STRUCT_ENTRY e;
-       STRUCT_STANDARD_TARGET target;
-};
-#define IPTCB_CHAIN_FOOT_SIZE  (sizeof(STRUCT_ENTRY) +                 \
-                                ALIGN(sizeof(STRUCT_STANDARD_TARGET)))
-
-struct iptcb_chain_error {
-       STRUCT_ENTRY entry;
-       struct ipt_error_target target;
-};
-#define IPTCB_CHAIN_ERROR_SIZE (sizeof(STRUCT_ENTRY) +                 \
-                                ALIGN(sizeof(struct ipt_error_target)))
-
-
-
-/* compile rule from cache into blob */
-static inline int iptcc_compile_rule (TC_HANDLE_T h, STRUCT_REPLACE *repl, struct rule_head *r)
-{
-       /* handle jumps */
-       if (r->type == IPTCC_R_JUMP) {
-               STRUCT_STANDARD_TARGET *t;
-               t = (STRUCT_STANDARD_TARGET *)GET_TARGET(r->entry);
-               /* memset for memcmp convenience on delete/replace */
-               memset(t->target.u.user.name, 0, FUNCTION_MAXNAMELEN);
-               strcpy(t->target.u.user.name, STANDARD_TARGET);
-               /* Jumps can only happen to builtin chains, so we
-                * can safely assume that they always have a header */
-               t->verdict = r->jump->head_offset + IPTCB_CHAIN_START_SIZE;
-       } else if (r->type == IPTCC_R_FALLTHROUGH) {
-               STRUCT_STANDARD_TARGET *t;
-               t = (STRUCT_STANDARD_TARGET *)GET_TARGET(r->entry);
-               t->verdict = r->offset + r->size;
-       }
-       
-       /* copy entry from cache to blob */
-       memcpy((char *)repl->entries+r->offset, r->entry, r->size);
-
-       return 1;
-}
-
-/* compile chain from cache into blob */
-static int iptcc_compile_chain(TC_HANDLE_T h, STRUCT_REPLACE *repl, struct chain_head *c)
-{
-       int ret;
-       struct rule_head *r;
-       struct iptcb_chain_start *head;
-       struct iptcb_chain_foot *foot;
-
-       /* only user-defined chains have heaer */
-       if (!iptcc_is_builtin(c)) {
-               /* put chain header in place */
-               head = (void *)repl->entries + c->head_offset;
-               head->e.target_offset = sizeof(STRUCT_ENTRY);
-               head->e.next_offset = IPTCB_CHAIN_START_SIZE;
-               strcpy(head->name.t.u.user.name, ERROR_TARGET);
-               head->name.t.u.target_size = 
-                               ALIGN(sizeof(struct ipt_error_target));
-               strcpy(head->name.error, c->name);
-       } else {
-               repl->hook_entry[c->hooknum-1] = c->head_offset;        
-               repl->underflow[c->hooknum-1] = c->foot_offset;
-       }
-
-       /* iterate over rules */
-       list_for_each_entry(r, &c->rules, list) {
-               ret = iptcc_compile_rule(h, repl, r);
-               if (ret < 0)
-                       return ret;
-       }
-
-       /* put chain footer in place */
-       foot = (void *)repl->entries + c->foot_offset;
-       foot->e.target_offset = sizeof(STRUCT_ENTRY);
-       foot->e.next_offset = IPTCB_CHAIN_FOOT_SIZE;
-       strcpy(foot->target.target.u.user.name, STANDARD_TARGET);
-       foot->target.target.u.target_size =
-                               ALIGN(sizeof(STRUCT_STANDARD_TARGET));
-       /* builtin targets have verdict, others return */
-       if (iptcc_is_builtin(c))
-               foot->target.verdict = c->verdict;
-       else
-               foot->target.verdict = RETURN;
-       /* set policy-counters */
-       memcpy(&foot->e.counters, &c->counters, sizeof(STRUCT_COUNTERS));
-
-       return 0;
-}
-
-/* calculate offset and number for every rule in the cache */
-static int iptcc_compile_chain_offsets(TC_HANDLE_T h, struct chain_head *c,
-                                      unsigned int *offset, unsigned int *num)
-{
-       struct rule_head *r;
-
-       c->head_offset = *offset;
-       DEBUGP("%s: chain_head %u, offset=%u\n", c->name, *num, *offset);
-
-       if (!iptcc_is_builtin(c))  {
-               /* Chain has header */
-               *offset += sizeof(STRUCT_ENTRY) 
-                            + ALIGN(sizeof(struct ipt_error_target));
-               (*num)++;
-       }
-
-       list_for_each_entry(r, &c->rules, list) {
-               DEBUGP("rule %u, offset=%u, index=%u\n", *num, *offset, *num);
-               r->offset = *offset;
-               r->index = *num;
-               *offset += r->size;
-               (*num)++;
-       }
-
-       DEBUGP("%s; chain_foot %u, offset=%u, index=%u\n", c->name, *num, 
-               *offset, *num);
-       c->foot_offset = *offset;
-       c->foot_index = *num;
-       *offset += sizeof(STRUCT_ENTRY)
-                  + ALIGN(sizeof(STRUCT_STANDARD_TARGET));
-       (*num)++;
-
-       return 1;
-}
-
-/* put the pieces back together again */
-static int iptcc_compile_table_prep(TC_HANDLE_T h, unsigned int *size)
-{
-       struct chain_head *c;
-       unsigned int offset = 0, num = 0;
-       int ret = 0;
-
-       /* First pass: calculate offset for every rule */
-       list_for_each_entry(c, &h->chains, list) {
-               ret = iptcc_compile_chain_offsets(h, c, &offset, &num);
-               if (ret < 0)
-                       return ret;
-       }
-
-       /* Append one error rule at end of chain */
-       num++;
-       offset += sizeof(STRUCT_ENTRY)
-                 + ALIGN(sizeof(struct ipt_error_target));
-
-       /* ruleset size is now in offset */
-       *size = offset;
-       return num;
-}
-
-static int iptcc_compile_table(TC_HANDLE_T h, STRUCT_REPLACE *repl)
-{
-       struct chain_head *c;
-       struct iptcb_chain_error *error;
-
-       /* Second pass: copy from cache to offsets, fill in jumps */
-       list_for_each_entry(c, &h->chains, list) {
-               int ret = iptcc_compile_chain(h, repl, c);
-               if (ret < 0)
-                       return ret;
-       }
-
-       /* Append error rule at end of chain */
-       error = (void *)repl->entries + repl->size - IPTCB_CHAIN_ERROR_SIZE;
-       error->entry.target_offset = sizeof(STRUCT_ENTRY);
-       error->entry.next_offset = IPTCB_CHAIN_ERROR_SIZE;
-       error->target.t.u.user.target_size = 
-               ALIGN(sizeof(struct ipt_error_target));
-       strcpy((char *)&error->target.t.u.user.name, ERROR_TARGET);
-       strcpy((char *)&error->target.error, "ERROR");
-
-       return 1;
-}
-
-/**********************************************************************
- * EXTERNAL API (operates on cache only)
- **********************************************************************/
-
-/* Allocate handle of given size */
-static TC_HANDLE_T
-alloc_handle(const char *tablename, unsigned int size, unsigned int num_rules)
-{
-       size_t len;
-       TC_HANDLE_T h;
-
-       len = sizeof(STRUCT_TC_HANDLE) + size;
-
-       h = malloc(sizeof(STRUCT_TC_HANDLE));
-       if (!h) {
-               errno = ENOMEM;
-               return NULL;
-       }
-       memset(h, 0, sizeof(*h));
-       INIT_LIST_HEAD(&h->chains);
-       strcpy(h->info.name, tablename);
-
-       h->entries = malloc(sizeof(STRUCT_GET_ENTRIES) + size);
-       if (!h->entries)
-               goto out_free_handle;
-
-       strcpy(h->entries->name, tablename);
-       h->entries->size = size;
-
-       return h;
-
-out_free_handle:
-       free(h);
-
-       return NULL;
-}
-
-
-TC_HANDLE_T
-TC_INIT(const char *tablename)
-{
-       TC_HANDLE_T h;
-       STRUCT_GETINFO info;
-       unsigned int tmp;
-       socklen_t s;
-
-       iptc_fn = TC_INIT;
-
-       if (strlen(tablename) >= TABLE_MAXNAMELEN) {
-               errno = EINVAL;
-               return NULL;
-       }
-       
-       if (sockfd_use == 0) {
-               sockfd = socket(TC_AF, SOCK_RAW, IPPROTO_RAW);
-               if (sockfd < 0)
-                       return NULL;
-       }
-       sockfd_use++;
-retry:
-       s = sizeof(info);
-
-       strcpy(info.name, tablename);
-       if (getsockopt(sockfd, TC_IPPROTO, SO_GET_INFO, &info, &s) < 0) {
-               if (--sockfd_use == 0) {
-                       close(sockfd);
-                       sockfd = -1;
-               }
-               return NULL;
-       }
-
-       DEBUGP("valid_hooks=0x%08x, num_entries=%u, size=%u\n",
-               info.valid_hooks, info.num_entries, info.size);
-
-       if ((h = alloc_handle(info.name, info.size, info.num_entries))
-           == NULL) {
-               if (--sockfd_use == 0) {
-                       close(sockfd);
-                       sockfd = -1;
-               }
-               return NULL;
-       }
-
-       /* Initialize current state */
-       h->info = info;
-
-       h->entries->size = h->info.size;
-
-       tmp = sizeof(STRUCT_GET_ENTRIES) + h->info.size;
-
-       if (getsockopt(sockfd, TC_IPPROTO, SO_GET_ENTRIES, h->entries,
-                      &tmp) < 0)
-               goto error;
-
-#ifdef IPTC_DEBUG2
-       {
-               int fd = open("/tmp/libiptc-so_get_entries.blob", 
-                               O_CREAT|O_WRONLY);
-               if (fd >= 0) {
-                       write(fd, h->entries, tmp);
-                       close(fd);
-               }
-       }
-#endif
-
-       if (parse_table(h) < 0)
-               goto error;
-
-       CHECK(h);
-       return h;
-error:
-       TC_FREE(&h);
-       /* A different process changed the ruleset size, retry */
-       if (errno == EAGAIN)
-               goto retry;
-       return NULL;
-}
-
-void
-TC_FREE(TC_HANDLE_T *h)
-{
-       struct chain_head *c, *tmp;
-
-       iptc_fn = TC_FREE;
-       if (--sockfd_use == 0) {
-               close(sockfd);
-               sockfd = -1;
-       }
-
-       list_for_each_entry_safe(c, tmp, &(*h)->chains, list) {
-               struct rule_head *r, *rtmp;
-
-               list_for_each_entry_safe(r, rtmp, &c->rules, list) {
-                       free(r);
-               }
-
-               free(c);
-       }
-
-       iptcc_chain_index_free(*h);
-
-       free((*h)->entries);
-       free(*h);
-
-       *h = NULL;
-}
-
-static inline int
-print_match(const STRUCT_ENTRY_MATCH *m)
-{
-       printf("Match name: `%s'\n", m->u.user.name);
-       return 0;
-}
-
-static int dump_entry(STRUCT_ENTRY *e, const TC_HANDLE_T handle);
-void
-TC_DUMP_ENTRIES(const TC_HANDLE_T handle)
-{
-       iptc_fn = TC_DUMP_ENTRIES;
-       CHECK(handle);
-
-       printf("libiptc v%s. %u bytes.\n",
-              XTABLES_VERSION, handle->entries->size);
-       printf("Table `%s'\n", handle->info.name);
-       printf("Hooks: pre/in/fwd/out/post = %u/%u/%u/%u/%u\n",
-              handle->info.hook_entry[HOOK_PRE_ROUTING],
-              handle->info.hook_entry[HOOK_LOCAL_IN],
-              handle->info.hook_entry[HOOK_FORWARD],
-              handle->info.hook_entry[HOOK_LOCAL_OUT],
-              handle->info.hook_entry[HOOK_POST_ROUTING]);
-       printf("Underflows: pre/in/fwd/out/post = %u/%u/%u/%u/%u\n",
-              handle->info.underflow[HOOK_PRE_ROUTING],
-              handle->info.underflow[HOOK_LOCAL_IN],
-              handle->info.underflow[HOOK_FORWARD],
-              handle->info.underflow[HOOK_LOCAL_OUT],
-              handle->info.underflow[HOOK_POST_ROUTING]);
-
-       ENTRY_ITERATE(handle->entries->entrytable, handle->entries->size,
-                     dump_entry, handle);
-}
-
-/* Does this chain exist? */
-int TC_IS_CHAIN(const char *chain, const TC_HANDLE_T handle)
-{
-       iptc_fn = TC_IS_CHAIN;
-       return iptcc_find_label(chain, handle) != NULL;
-}
-
-static void iptcc_chain_iterator_advance(TC_HANDLE_T handle)
-{
-       struct chain_head *c = handle->chain_iterator_cur;
-
-       if (c->list.next == &handle->chains)
-               handle->chain_iterator_cur = NULL;
-       else
-               handle->chain_iterator_cur = 
-                       list_entry(c->list.next, struct chain_head, list);
-}
-
-/* Iterator functions to run through the chains. */
-const char *
-TC_FIRST_CHAIN(TC_HANDLE_T *handle)
-{
-       struct chain_head *c = list_entry((*handle)->chains.next,
-                                         struct chain_head, list);
-
-       iptc_fn = TC_FIRST_CHAIN;
-
-
-       if (list_empty(&(*handle)->chains)) {
-               DEBUGP(": no chains\n");
-               return NULL;
-       }
-
-       (*handle)->chain_iterator_cur = c;
-       iptcc_chain_iterator_advance(*handle);
-
-       DEBUGP(": returning `%s'\n", c->name);
-       return c->name;
-}
-
-/* Iterator functions to run through the chains.  Returns NULL at end. */
-const char *
-TC_NEXT_CHAIN(TC_HANDLE_T *handle)
-{
-       struct chain_head *c = (*handle)->chain_iterator_cur;
-
-       iptc_fn = TC_NEXT_CHAIN;
-
-       if (!c) {
-               DEBUGP(": no more chains\n");
-               return NULL;
-       }
-
-       iptcc_chain_iterator_advance(*handle);
-       
-       DEBUGP(": returning `%s'\n", c->name);
-       return c->name;
-}
-
-/* Get first rule in the given chain: NULL for empty chain. */
-const STRUCT_ENTRY *
-TC_FIRST_RULE(const char *chain, TC_HANDLE_T *handle)
-{
-       struct chain_head *c;
-       struct rule_head *r;
-
-       iptc_fn = TC_FIRST_RULE;
-
-       DEBUGP("first rule(%s): ", chain);
-
-       c = iptcc_find_label(chain, *handle);
-       if (!c) {
-               errno = ENOENT;
-               return NULL;
-       }
-
-       /* Empty chain: single return/policy rule */
-       if (list_empty(&c->rules)) {
-               DEBUGP_C("no rules, returning NULL\n");
-               return NULL;
-       }
-
-       r = list_entry(c->rules.next, struct rule_head, list);
-       (*handle)->rule_iterator_cur = r;
-       DEBUGP_C("%p\n", r);
-
-       return r->entry;
-}
-
-/* Returns NULL when rules run out. */
-const STRUCT_ENTRY *
-TC_NEXT_RULE(const STRUCT_ENTRY *prev, TC_HANDLE_T *handle)
-{
-       struct rule_head *r;
-
-       iptc_fn = TC_NEXT_RULE;
-       DEBUGP("rule_iterator_cur=%p...", (*handle)->rule_iterator_cur);
-
-       if (!(*handle)->rule_iterator_cur) {
-               DEBUGP_C("returning NULL\n");
-               return NULL;
-       }
-       
-       r = list_entry((*handle)->rule_iterator_cur->list.next, 
-                       struct rule_head, list);
-
-       iptc_fn = TC_NEXT_RULE;
-
-       DEBUGP_C("next=%p, head=%p...", &r->list, 
-               &(*handle)->rule_iterator_cur->chain->rules);
-
-       if (&r->list == &(*handle)->rule_iterator_cur->chain->rules) {
-               (*handle)->rule_iterator_cur = NULL;
-               DEBUGP_C("finished, returning NULL\n");
-               return NULL;
-       }
-
-       (*handle)->rule_iterator_cur = r;
-
-       /* NOTE: prev is without any influence ! */
-       DEBUGP_C("returning rule %p\n", r);
-       return r->entry;
-}
-
-/* How many rules in this chain? */
-static unsigned int
-TC_NUM_RULES(const char *chain, TC_HANDLE_T *handle)
-{
-       struct chain_head *c;
-       iptc_fn = TC_NUM_RULES;
-       CHECK(*handle);
-
-       c = iptcc_find_label(chain, *handle);
-       if (!c) {
-               errno = ENOENT;
-               return (unsigned int)-1;
-       }
-       
-       return c->num_rules;
-}
-
-static const STRUCT_ENTRY *
-TC_GET_RULE(const char *chain, unsigned int n, TC_HANDLE_T *handle)
-{
-       struct chain_head *c;
-       struct rule_head *r;
-       
-       iptc_fn = TC_GET_RULE;
-
-       CHECK(*handle);
-
-       c = iptcc_find_label(chain, *handle);
-       if (!c) {
-               errno = ENOENT;
-               return NULL;
-       }
-
-       r = iptcc_get_rule_num(c, n);
-       if (!r)
-               return NULL;
-       return r->entry;
-}
-
-/* Returns a pointer to the target name of this position. */
-static const char *standard_target_map(int verdict)
-{
-       switch (verdict) {
-               case RETURN:
-                       return LABEL_RETURN;
-                       break;
-               case -NF_ACCEPT-1:
-                       return LABEL_ACCEPT;
-                       break;
-               case -NF_DROP-1:
-                       return LABEL_DROP;
-                       break;
-               case -NF_QUEUE-1:
-                       return LABEL_QUEUE;
-                       break;
-               default:
-                       fprintf(stderr, "ERROR: %d not a valid target)\n",
-                               verdict);
-                       abort();
-                       break;
-       }
-       /* not reached */
-       return NULL;
-}
-
-/* Returns a pointer to the target name of this position. */
-const char *TC_GET_TARGET(const STRUCT_ENTRY *ce,
-                         TC_HANDLE_T *handle)
-{
-       STRUCT_ENTRY *e = (STRUCT_ENTRY *)ce;
-       struct rule_head *r = container_of(e, struct rule_head, entry[0]);
-
-       iptc_fn = TC_GET_TARGET;
-
-       switch(r->type) {
-               int spos;
-               case IPTCC_R_FALLTHROUGH:
-                       return "";
-                       break;
-               case IPTCC_R_JUMP:
-                       DEBUGP("r=%p, jump=%p, name=`%s'\n", r, r->jump, r->jump->name);
-                       return r->jump->name;
-                       break;
-               case IPTCC_R_STANDARD:
-                       spos = *(int *)GET_TARGET(e)->data;
-                       DEBUGP("r=%p, spos=%d'\n", r, spos);
-                       return standard_target_map(spos);
-                       break;
-               case IPTCC_R_MODULE:
-                       return GET_TARGET(e)->u.user.name;
-                       break;
-       }
-       return NULL;
-}
-/* Is this a built-in chain?  Actually returns hook + 1. */
-int
-TC_BUILTIN(const char *chain, const TC_HANDLE_T handle)
-{
-       struct chain_head *c;
-       
-       iptc_fn = TC_BUILTIN;
-
-       c = iptcc_find_label(chain, handle);
-       if (!c) {
-               errno = ENOENT;
-               return 0;
-       }
-
-       return iptcc_is_builtin(c);
-}
-
-/* Get the policy of a given built-in chain */
-const char *
-TC_GET_POLICY(const char *chain,
-             STRUCT_COUNTERS *counters,
-             TC_HANDLE_T *handle)
-{
-       struct chain_head *c;
-
-       iptc_fn = TC_GET_POLICY;
-
-       DEBUGP("called for chain %s\n", chain);
-
-       c = iptcc_find_label(chain, *handle);
-       if (!c) {
-               errno = ENOENT;
-               return NULL;
-       }
-
-       if (!iptcc_is_builtin(c))
-               return NULL;
-
-       *counters = c->counters;
-
-       return standard_target_map(c->verdict);
-}
-
-static int
-iptcc_standard_map(struct rule_head *r, int verdict)
-{
-       STRUCT_ENTRY *e = r->entry;
-       STRUCT_STANDARD_TARGET *t;
-
-       t = (STRUCT_STANDARD_TARGET *)GET_TARGET(e);
-
-       if (t->target.u.target_size
-           != ALIGN(sizeof(STRUCT_STANDARD_TARGET))) {
-               errno = EINVAL;
-               return 0;
-       }
-       /* memset for memcmp convenience on delete/replace */
-       memset(t->target.u.user.name, 0, FUNCTION_MAXNAMELEN);
-       strcpy(t->target.u.user.name, STANDARD_TARGET);
-       t->verdict = verdict;
-
-       r->type = IPTCC_R_STANDARD;
-
-       return 1;
-}
-
-static int
-iptcc_map_target(const TC_HANDLE_T handle,
-          struct rule_head *r)
-{
-       STRUCT_ENTRY *e = r->entry;
-       STRUCT_ENTRY_TARGET *t = GET_TARGET(e);
-
-       /* Maybe it's empty (=> fall through) */
-       if (strcmp(t->u.user.name, "") == 0) {
-               r->type = IPTCC_R_FALLTHROUGH;
-               return 1;
-       }
-       /* Maybe it's a standard target name... */
-       else if (strcmp(t->u.user.name, LABEL_ACCEPT) == 0)
-               return iptcc_standard_map(r, -NF_ACCEPT - 1);
-       else if (strcmp(t->u.user.name, LABEL_DROP) == 0)
-               return iptcc_standard_map(r, -NF_DROP - 1);
-       else if (strcmp(t->u.user.name, LABEL_QUEUE) == 0)
-               return iptcc_standard_map(r, -NF_QUEUE - 1);
-       else if (strcmp(t->u.user.name, LABEL_RETURN) == 0)
-               return iptcc_standard_map(r, RETURN);
-       else if (TC_BUILTIN(t->u.user.name, handle)) {
-               /* Can't jump to builtins. */
-               errno = EINVAL;
-               return 0;
-       } else {
-               /* Maybe it's an existing chain name. */
-               struct chain_head *c;
-               DEBUGP("trying to find chain `%s': ", t->u.user.name);
-
-               c = iptcc_find_label(t->u.user.name, handle);
-               if (c) {
-                       DEBUGP_C("found!\n");
-                       r->type = IPTCC_R_JUMP;
-                       r->jump = c;
-                       c->references++;
-                       return 1;
-               }
-               DEBUGP_C("not found :(\n");
-       }
-
-       /* Must be a module?  If not, kernel will reject... */
-       /* memset to all 0 for your memcmp convenience: don't clear version */
-       memset(t->u.user.name + strlen(t->u.user.name),
-              0,
-              FUNCTION_MAXNAMELEN - 1 - strlen(t->u.user.name));
-       r->type = IPTCC_R_MODULE;
-       set_changed(handle);
-       return 1;
-}
-
-/* Insert the entry `fw' in chain `chain' into position `rulenum'. */
-int
-TC_INSERT_ENTRY(const IPT_CHAINLABEL chain,
-               const STRUCT_ENTRY *e,
-               unsigned int rulenum,
-               TC_HANDLE_T *handle)
-{
-       struct chain_head *c;
-       struct rule_head *r;
-       struct list_head *prev;
-
-       iptc_fn = TC_INSERT_ENTRY;
-
-       if (!(c = iptcc_find_label(chain, *handle))) {
-               errno = ENOENT;
-               return 0;
-       }
-
-       /* first rulenum index = 0
-          first c->num_rules index = 1 */
-       if (rulenum > c->num_rules) {
-               errno = E2BIG;
-               return 0;
-       }
-
-       /* If we are inserting at the end just take advantage of the
-          double linked list, insert will happen before the entry
-          prev points to. */
-       if (rulenum == c->num_rules) {
-               prev = &c->rules;
-       } else if (rulenum + 1 <= c->num_rules/2) {
-               r = iptcc_get_rule_num(c, rulenum + 1);
-               prev = &r->list;
-       } else {
-               r = iptcc_get_rule_num_reverse(c, c->num_rules - rulenum);
-               prev = &r->list;
-       }
-
-       if (!(r = iptcc_alloc_rule(c, e->next_offset))) {
-               errno = ENOMEM;
-               return 0;
-       }
-
-       memcpy(r->entry, e, e->next_offset);
-       r->counter_map.maptype = COUNTER_MAP_SET;
-
-       if (!iptcc_map_target(*handle, r)) {
-               free(r);
-               return 0;
-       }
-
-       list_add_tail(&r->list, prev);
-       c->num_rules++;
-
-       set_changed(*handle);
-
-       return 1;
-}
-
-/* Atomically replace rule `rulenum' in `chain' with `fw'. */
-int
-TC_REPLACE_ENTRY(const IPT_CHAINLABEL chain,
-                const STRUCT_ENTRY *e,
-                unsigned int rulenum,
-                TC_HANDLE_T *handle)
-{
-       struct chain_head *c;
-       struct rule_head *r, *old;
-
-       iptc_fn = TC_REPLACE_ENTRY;
-
-       if (!(c = iptcc_find_label(chain, *handle))) {
-               errno = ENOENT;
-               return 0;
-       }
-
-       if (rulenum >= c->num_rules) {
-               errno = E2BIG;
-               return 0;
-       }
-
-       /* Take advantage of the double linked list if possible. */
-       if (rulenum + 1 <= c->num_rules/2) {
-               old = iptcc_get_rule_num(c, rulenum + 1);
-       } else {
-               old = iptcc_get_rule_num_reverse(c, c->num_rules - rulenum);
-       }
-
-       if (!(r = iptcc_alloc_rule(c, e->next_offset))) {
-               errno = ENOMEM;
-               return 0;
-       }
-
-       memcpy(r->entry, e, e->next_offset);
-       r->counter_map.maptype = COUNTER_MAP_SET;
-
-       if (!iptcc_map_target(*handle, r)) {
-               free(r);
-               return 0;
-       }
-
-       list_add(&r->list, &old->list);
-       iptcc_delete_rule(old);
-
-       set_changed(*handle);
-
-       return 1;
-}
-
-/* Append entry `fw' to chain `chain'.  Equivalent to insert with
-   rulenum = length of chain. */
-int
-TC_APPEND_ENTRY(const IPT_CHAINLABEL chain,
-               const STRUCT_ENTRY *e,
-               TC_HANDLE_T *handle)
-{
-       struct chain_head *c;
-       struct rule_head *r;
-
-       iptc_fn = TC_APPEND_ENTRY;
-       if (!(c = iptcc_find_label(chain, *handle))) {
-               DEBUGP("unable to find chain `%s'\n", chain);
-               errno = ENOENT;
-               return 0;
-       }
-
-       if (!(r = iptcc_alloc_rule(c, e->next_offset))) {
-               DEBUGP("unable to allocate rule for chain `%s'\n", chain);
-               errno = ENOMEM;
-               return 0;
-       }
-
-       memcpy(r->entry, e, e->next_offset);
-       r->counter_map.maptype = COUNTER_MAP_SET;
-
-       if (!iptcc_map_target(*handle, r)) {
-               DEBUGP("unable to map target of rule for chain `%s'\n", chain);
-               free(r);
-               return 0;
-       }
-
-       list_add_tail(&r->list, &c->rules);
-       c->num_rules++;
-
-       set_changed(*handle);
-
-       return 1;
-}
-
-static inline int
-match_different(const STRUCT_ENTRY_MATCH *a,
-               const unsigned char *a_elems,
-               const unsigned char *b_elems,
-               unsigned char **maskptr)
-{
-       const STRUCT_ENTRY_MATCH *b;
-       unsigned int i;
-
-       /* Offset of b is the same as a. */
-       b = (void *)b_elems + ((unsigned char *)a - a_elems);
-
-       if (a->u.match_size != b->u.match_size)
-               return 1;
-
-       if (strcmp(a->u.user.name, b->u.user.name) != 0)
-               return 1;
-
-       *maskptr += ALIGN(sizeof(*a));
-
-       for (i = 0; i < a->u.match_size - ALIGN(sizeof(*a)); i++)
-               if (((a->data[i] ^ b->data[i]) & (*maskptr)[i]) != 0)
-                       return 1;
-       *maskptr += i;
-       return 0;
-}
-
-static inline int
-target_same(struct rule_head *a, struct rule_head *b,const unsigned char *mask)
-{
-       unsigned int i;
-       STRUCT_ENTRY_TARGET *ta, *tb;
-
-       if (a->type != b->type)
-               return 0;
-
-       ta = GET_TARGET(a->entry);
-       tb = GET_TARGET(b->entry);
-
-       switch (a->type) {
-       case IPTCC_R_FALLTHROUGH:
-               return 1;
-       case IPTCC_R_JUMP:
-               return a->jump == b->jump;
-       case IPTCC_R_STANDARD:
-               return ((STRUCT_STANDARD_TARGET *)ta)->verdict
-                       == ((STRUCT_STANDARD_TARGET *)tb)->verdict;
-       case IPTCC_R_MODULE:
-               if (ta->u.target_size != tb->u.target_size)
-                       return 0;
-               if (strcmp(ta->u.user.name, tb->u.user.name) != 0)
-                       return 0;
-
-               for (i = 0; i < ta->u.target_size - sizeof(*ta); i++)
-                       if (((ta->data[i] ^ tb->data[i]) & mask[i]) != 0)
-                               return 0;
-               return 1;
-       default:
-               fprintf(stderr, "ERROR: bad type %i\n", a->type);
-               abort();
-       }
-}
-
-static unsigned char *
-is_same(const STRUCT_ENTRY *a,
-       const STRUCT_ENTRY *b,
-       unsigned char *matchmask);
-
-/* Delete the first rule in `chain' which matches `fw'. */
-int
-TC_DELETE_ENTRY(const IPT_CHAINLABEL chain,
-               const STRUCT_ENTRY *origfw,
-               unsigned char *matchmask,
-               TC_HANDLE_T *handle)
-{
-       struct chain_head *c;
-       struct rule_head *r, *i;
-
-       iptc_fn = TC_DELETE_ENTRY;
-       if (!(c = iptcc_find_label(chain, *handle))) {
-               errno = ENOENT;
-               return 0;
-       }
-
-       /* Create a rule_head from origfw. */
-       r = iptcc_alloc_rule(c, origfw->next_offset);
-       if (!r) {
-               errno = ENOMEM;
-               return 0;
-       }
-
-       memcpy(r->entry, origfw, origfw->next_offset);
-       r->counter_map.maptype = COUNTER_MAP_NOMAP;
-       if (!iptcc_map_target(*handle, r)) {
-               DEBUGP("unable to map target of rule for chain `%s'\n", chain);
-               free(r);
-               return 0;
-       } else {
-               /* iptcc_map_target increment target chain references
-                * since this is a fake rule only used for matching
-                * the chain references count is decremented again. 
-                */
-               if (r->type == IPTCC_R_JUMP
-                   && r->jump)
-                       r->jump->references--;
-       }
-
-       list_for_each_entry(i, &c->rules, list) {
-               unsigned char *mask;
-
-               mask = is_same(r->entry, i->entry, matchmask);
-               if (!mask)
-                       continue;
-
-               if (!target_same(r, i, mask))
-                       continue;
-
-               /* If we are about to delete the rule that is the
-                * current iterator, move rule iterator back.  next
-                * pointer will then point to real next node */
-               if (i == (*handle)->rule_iterator_cur) {
-                       (*handle)->rule_iterator_cur = 
-                               list_entry((*handle)->rule_iterator_cur->list.prev,
-                                          struct rule_head, list);
-               }
-
-               c->num_rules--;
-               iptcc_delete_rule(i);
-
-               set_changed(*handle);
-               free(r);
-               return 1;
-       }
-
-       free(r);
-       errno = ENOENT;
-       return 0;
-}
-
-
-/* Delete the rule in position `rulenum' in `chain'. */
-int
-TC_DELETE_NUM_ENTRY(const IPT_CHAINLABEL chain,
-                   unsigned int rulenum,
-                   TC_HANDLE_T *handle)
-{
-       struct chain_head *c;
-       struct rule_head *r;
-
-       iptc_fn = TC_DELETE_NUM_ENTRY;
-
-       if (!(c = iptcc_find_label(chain, *handle))) {
-               errno = ENOENT;
-               return 0;
-       }
-
-       if (rulenum >= c->num_rules) {
-               errno = E2BIG;
-               return 0;
-       }
-
-       /* Take advantage of the double linked list if possible. */
-       if (rulenum + 1 <= c->num_rules/2) {
-               r = iptcc_get_rule_num(c, rulenum + 1);
-       } else {
-               r = iptcc_get_rule_num_reverse(c, c->num_rules - rulenum);
-       }
-
-       /* If we are about to delete the rule that is the current
-        * iterator, move rule iterator back.  next pointer will then
-        * point to real next node */
-       if (r == (*handle)->rule_iterator_cur) {
-               (*handle)->rule_iterator_cur = 
-                       list_entry((*handle)->rule_iterator_cur->list.prev,
-                                  struct rule_head, list);
-       }
-
-       c->num_rules--;
-       iptcc_delete_rule(r);
-
-       set_changed(*handle);
-
-       return 1;
-}
-
-/* Check the packet `fw' on chain `chain'.  Returns the verdict, or
-   NULL and sets errno. */
-const char *
-TC_CHECK_PACKET(const IPT_CHAINLABEL chain,
-               STRUCT_ENTRY *entry,
-               TC_HANDLE_T *handle)
-{
-       iptc_fn = TC_CHECK_PACKET;
-       errno = ENOSYS;
-       return NULL;
-}
-
-/* Flushes the entries in the given chain (ie. empties chain). */
-int
-TC_FLUSH_ENTRIES(const IPT_CHAINLABEL chain, TC_HANDLE_T *handle)
-{
-       struct chain_head *c;
-       struct rule_head *r, *tmp;
-
-       iptc_fn = TC_FLUSH_ENTRIES;
-       if (!(c = iptcc_find_label(chain, *handle))) {
-               errno = ENOENT;
-               return 0;
-       }
-
-       list_for_each_entry_safe(r, tmp, &c->rules, list) {
-               iptcc_delete_rule(r);
-       }
-
-       c->num_rules = 0;
-
-       set_changed(*handle);
-
-       return 1;
-}
-
-/* Zeroes the counters in a chain. */
-int
-TC_ZERO_ENTRIES(const IPT_CHAINLABEL chain, TC_HANDLE_T *handle)
-{
-       struct chain_head *c;
-       struct rule_head *r;
-
-       iptc_fn = TC_ZERO_ENTRIES;
-       if (!(c = iptcc_find_label(chain, *handle))) {
-               errno = ENOENT;
-               return 0;
-       }
-
-       if (c->counter_map.maptype == COUNTER_MAP_NORMAL_MAP)
-               c->counter_map.maptype = COUNTER_MAP_ZEROED;
-
-       list_for_each_entry(r, &c->rules, list) {
-               if (r->counter_map.maptype == COUNTER_MAP_NORMAL_MAP)
-                       r->counter_map.maptype = COUNTER_MAP_ZEROED;
-       }
-
-       set_changed(*handle);
-
-       return 1;
-}
-
-STRUCT_COUNTERS *
-TC_READ_COUNTER(const IPT_CHAINLABEL chain,
-               unsigned int rulenum,
-               TC_HANDLE_T *handle)
-{
-       struct chain_head *c;
-       struct rule_head *r;
-
-       iptc_fn = TC_READ_COUNTER;
-       CHECK(*handle);
-
-       if (!(c = iptcc_find_label(chain, *handle))) {
-               errno = ENOENT;
-               return NULL;
-       }
-
-       if (!(r = iptcc_get_rule_num(c, rulenum))) {
-               errno = E2BIG;
-               return NULL;
-       }
-
-       return &r->entry[0].counters;
-}
-
-int
-TC_ZERO_COUNTER(const IPT_CHAINLABEL chain,
-               unsigned int rulenum,
-               TC_HANDLE_T *handle)
-{
-       struct chain_head *c;
-       struct rule_head *r;
-       
-       iptc_fn = TC_ZERO_COUNTER;
-       CHECK(*handle);
-
-       if (!(c = iptcc_find_label(chain, *handle))) {
-               errno = ENOENT;
-               return 0;
-       }
-
-       if (!(r = iptcc_get_rule_num(c, rulenum))) {
-               errno = E2BIG;
-               return 0;
-       }
-
-       if (r->counter_map.maptype == COUNTER_MAP_NORMAL_MAP)
-               r->counter_map.maptype = COUNTER_MAP_ZEROED;
-
-       set_changed(*handle);
-
-       return 1;
-}
-
-int 
-TC_SET_COUNTER(const IPT_CHAINLABEL chain,
-              unsigned int rulenum,
-              STRUCT_COUNTERS *counters,
-              TC_HANDLE_T *handle)
-{
-       struct chain_head *c;
-       struct rule_head *r;
-       STRUCT_ENTRY *e;
-
-       iptc_fn = TC_SET_COUNTER;
-       CHECK(*handle);
-
-       if (!(c = iptcc_find_label(chain, *handle))) {
-               errno = ENOENT;
-               return 0;
-       }
-
-       if (!(r = iptcc_get_rule_num(c, rulenum))) {
-               errno = E2BIG;
-               return 0;
-       }
-
-       e = r->entry;
-       r->counter_map.maptype = COUNTER_MAP_SET;
-
-       memcpy(&e->counters, counters, sizeof(STRUCT_COUNTERS));
-
-       set_changed(*handle);
-
-       return 1;
-}
-
-/* Creates a new chain. */
-/* To create a chain, create two rules: error node and unconditional
- * return. */
-int
-TC_CREATE_CHAIN(const IPT_CHAINLABEL chain, TC_HANDLE_T *handle)
-{
-       static struct chain_head *c;
-       int capacity;
-       int exceeded;
-
-       iptc_fn = TC_CREATE_CHAIN;
-
-       /* find_label doesn't cover built-in targets: DROP, ACCEPT,
-           QUEUE, RETURN. */
-       if (iptcc_find_label(chain, *handle)
-           || strcmp(chain, LABEL_DROP) == 0
-           || strcmp(chain, LABEL_ACCEPT) == 0
-           || strcmp(chain, LABEL_QUEUE) == 0
-           || strcmp(chain, LABEL_RETURN) == 0) {
-               DEBUGP("Chain `%s' already exists\n", chain);
-               errno = EEXIST;
-               return 0;
-       }
-
-       if (strlen(chain)+1 > sizeof(IPT_CHAINLABEL)) {
-               DEBUGP("Chain name `%s' too long\n", chain);
-               errno = EINVAL;
-               return 0;
-       }
-
-       c = iptcc_alloc_chain_head(chain, 0);
-       if (!c) {
-               DEBUGP("Cannot allocate memory for chain `%s'\n", chain);
-               errno = ENOMEM;
-               return 0;
-
-       }
-       (*handle)->num_chains++; /* New user defined chain */
-
-       DEBUGP("Creating chain `%s'\n", chain);
-       iptc_insert_chain(*handle, c); /* Insert sorted */
-
-       /* Inserting chains don't change the correctness of the chain
-        * index (except if its smaller than index[0], but that
-        * handled by iptc_insert_chain).  It only causes longer lists
-        * in the buckets. Thus, only rebuild chain index when the
-        * capacity is exceed with CHAIN_INDEX_INSERT_MAX chains.
-        */
-       capacity = (*handle)->chain_index_sz * CHAIN_INDEX_BUCKET_LEN;
-       exceeded = ((((*handle)->num_chains)-capacity));
-       if (exceeded > CHAIN_INDEX_INSERT_MAX) {
-               debug("Capacity(%d) exceeded(%d) rebuild (chains:%d)\n",
-                     capacity, exceeded, (*handle)->num_chains);
-               iptcc_chain_index_rebuild(*handle);
-       }
-
-       set_changed(*handle);
-
-       return 1;
-}
-
-/* Get the number of references to this chain. */
-int
-TC_GET_REFERENCES(unsigned int *ref, const IPT_CHAINLABEL chain,
-                 TC_HANDLE_T *handle)
-{
-       struct chain_head *c;
-
-       iptc_fn = TC_GET_REFERENCES;
-       if (!(c = iptcc_find_label(chain, *handle))) {
-               errno = ENOENT;
-               return 0;
-       }
-
-       *ref = c->references;
-
-       return 1;
-}
-
-/* Deletes a chain. */
-int
-TC_DELETE_CHAIN(const IPT_CHAINLABEL chain, TC_HANDLE_T *handle)
-{
-       unsigned int references;
-       struct chain_head *c;
-
-       iptc_fn = TC_DELETE_CHAIN;
-
-       if (!(c = iptcc_find_label(chain, *handle))) {
-               DEBUGP("cannot find chain `%s'\n", chain);
-               errno = ENOENT;
-               return 0;
-       }
-
-       if (TC_BUILTIN(chain, *handle)) {
-               DEBUGP("cannot remove builtin chain `%s'\n", chain);
-               errno = EINVAL;
-               return 0;
-       }
-
-       if (!TC_GET_REFERENCES(&references, chain, handle)) {
-               DEBUGP("cannot get references on chain `%s'\n", chain);
-               return 0;
-       }
-
-       if (references > 0) {
-               DEBUGP("chain `%s' still has references\n", chain);
-               errno = EMLINK;
-               return 0;
-       }
-
-       if (c->num_rules) {
-               DEBUGP("chain `%s' is not empty\n", chain);
-               errno = ENOTEMPTY;
-               return 0;
-       }
-
-       /* If we are about to delete the chain that is the current
-        * iterator, move chain iterator forward. */
-       if (c == (*handle)->chain_iterator_cur)
-               iptcc_chain_iterator_advance(*handle);
-
-       (*handle)->num_chains--; /* One user defined chain deleted */
-
-       //list_del(&c->list); /* Done in iptcc_chain_index_delete_chain() */
-       iptcc_chain_index_delete_chain(c, *handle);
-       free(c);
-
-       DEBUGP("chain `%s' deleted\n", chain);
-
-       set_changed(*handle);
-
-       return 1;
-}
-
-/* Renames a chain. */
-int TC_RENAME_CHAIN(const IPT_CHAINLABEL oldname,
-                   const IPT_CHAINLABEL newname,
-                   TC_HANDLE_T *handle)
-{
-       struct chain_head *c;
-       iptc_fn = TC_RENAME_CHAIN;
-
-       /* find_label doesn't cover built-in targets: DROP, ACCEPT,
-           QUEUE, RETURN. */
-       if (iptcc_find_label(newname, *handle)
-           || strcmp(newname, LABEL_DROP) == 0
-           || strcmp(newname, LABEL_ACCEPT) == 0
-           || strcmp(newname, LABEL_QUEUE) == 0
-           || strcmp(newname, LABEL_RETURN) == 0) {
-               errno = EEXIST;
-               return 0;
-       }
-
-       if (!(c = iptcc_find_label(oldname, *handle))
-           || TC_BUILTIN(oldname, *handle)) {
-               errno = ENOENT;
-               return 0;
-       }
-
-       if (strlen(newname)+1 > sizeof(IPT_CHAINLABEL)) {
-               errno = EINVAL;
-               return 0;
-       }
-
-       strncpy(c->name, newname, sizeof(IPT_CHAINLABEL));
-       
-       set_changed(*handle);
-
-       return 1;
-}
-
-/* Sets the policy on a built-in chain. */
-int
-TC_SET_POLICY(const IPT_CHAINLABEL chain,
-             const IPT_CHAINLABEL policy,
-             STRUCT_COUNTERS *counters,
-             TC_HANDLE_T *handle)
-{
-       struct chain_head *c;
-
-       iptc_fn = TC_SET_POLICY;
-
-       if (!(c = iptcc_find_label(chain, *handle))) {
-               DEBUGP("cannot find chain `%s'\n", chain);
-               errno = ENOENT;
-               return 0;
-       }
-
-       if (!iptcc_is_builtin(c)) {
-               DEBUGP("cannot set policy of userdefinedchain `%s'\n", chain);
-               errno = ENOENT;
-               return 0;
-       }
-
-       if (strcmp(policy, LABEL_ACCEPT) == 0)
-               c->verdict = -NF_ACCEPT - 1;
-       else if (strcmp(policy, LABEL_DROP) == 0)
-               c->verdict = -NF_DROP - 1;
-       else {
-               errno = EINVAL;
-               return 0;
-       }
-
-       if (counters) {
-               /* set byte and packet counters */
-               memcpy(&c->counters, counters, sizeof(STRUCT_COUNTERS));
-               c->counter_map.maptype = COUNTER_MAP_SET;
-       } else {
-               c->counter_map.maptype = COUNTER_MAP_NOMAP;
-       }
-
-       set_changed(*handle);
-
-       return 1;
-}
-
-/* Without this, on gcc 2.7.2.3, we get:
-   libiptc.c: In function `TC_COMMIT':
-   libiptc.c:833: fixed or forbidden register was spilled.
-   This may be due to a compiler bug or to impossible asm
-   statements or clauses.
-*/
-static void
-subtract_counters(STRUCT_COUNTERS *answer,
-                 const STRUCT_COUNTERS *a,
-                 const STRUCT_COUNTERS *b)
-{
-       answer->pcnt = a->pcnt - b->pcnt;
-       answer->bcnt = a->bcnt - b->bcnt;
-}
-
-
-static void counters_nomap(STRUCT_COUNTERS_INFO *newcounters, unsigned int idx)
-{
-       newcounters->counters[idx] = ((STRUCT_COUNTERS) { 0, 0});
-       DEBUGP_C("NOMAP => zero\n");
-}
-
-static void counters_normal_map(STRUCT_COUNTERS_INFO *newcounters,
-                               STRUCT_REPLACE *repl, unsigned int idx,
-                               unsigned int mappos)
-{
-       /* Original read: X.
-        * Atomic read on replacement: X + Y.
-        * Currently in kernel: Z.
-        * Want in kernel: X + Y + Z.
-        * => Add in X + Y
-        * => Add in replacement read.
-        */
-       newcounters->counters[idx] = repl->counters[mappos];
-       DEBUGP_C("NORMAL_MAP => mappos %u \n", mappos);
-}
-
-static void counters_map_zeroed(STRUCT_COUNTERS_INFO *newcounters,
-                               STRUCT_REPLACE *repl, unsigned int idx,
-                               unsigned int mappos, STRUCT_COUNTERS *counters)
-{
-       /* Original read: X.
-        * Atomic read on replacement: X + Y.
-        * Currently in kernel: Z.
-        * Want in kernel: Y + Z.
-        * => Add in Y.
-        * => Add in (replacement read - original read).
-        */
-       subtract_counters(&newcounters->counters[idx],
-                         &repl->counters[mappos],
-                         counters);
-       DEBUGP_C("ZEROED => mappos %u\n", mappos);
-}
-
-static void counters_map_set(STRUCT_COUNTERS_INFO *newcounters,
-                             unsigned int idx, STRUCT_COUNTERS *counters)
-{
-       /* Want to set counter (iptables-restore) */
-
-       memcpy(&newcounters->counters[idx], counters,
-               sizeof(STRUCT_COUNTERS));
-
-       DEBUGP_C("SET\n");
-}
-
-
-int
-TC_COMMIT(TC_HANDLE_T *handle)
-{
-       /* Replace, then map back the counters. */
-       STRUCT_REPLACE *repl;
-       STRUCT_COUNTERS_INFO *newcounters;
-       struct chain_head *c;
-       int ret;
-       size_t counterlen;
-       int new_number;
-       unsigned int new_size;
-
-       iptc_fn = TC_COMMIT;
-       CHECK(*handle);
-
-       /* Don't commit if nothing changed. */
-       if (!(*handle)->changed)
-               goto finished;
-
-       new_number = iptcc_compile_table_prep(*handle, &new_size);
-       if (new_number < 0) {
-               errno = ENOMEM;
-               goto out_zero;
-       }
-
-       repl = malloc(sizeof(*repl) + new_size);
-       if (!repl) {
-               errno = ENOMEM;
-               goto out_zero;
-       }
-       memset(repl, 0, sizeof(*repl) + new_size);
-
-#if 0
-       TC_DUMP_ENTRIES(*handle);
-#endif
-
-       counterlen = sizeof(STRUCT_COUNTERS_INFO)
-                       + sizeof(STRUCT_COUNTERS) * new_number;
-
-       /* These are the old counters we will get from kernel */
-       repl->counters = malloc(sizeof(STRUCT_COUNTERS)
-                               * (*handle)->info.num_entries);
-       if (!repl->counters) {
-               errno = ENOMEM;
-               goto out_free_repl;
-       }
-       /* These are the counters we're going to put back, later. */
-       newcounters = malloc(counterlen);
-       if (!newcounters) {
-               errno = ENOMEM;
-               goto out_free_repl_counters;
-       }
-       memset(newcounters, 0, counterlen);
-
-       strcpy(repl->name, (*handle)->info.name);
-       repl->num_entries = new_number;
-       repl->size = new_size;
-
-       repl->num_counters = (*handle)->info.num_entries;
-       repl->valid_hooks = (*handle)->info.valid_hooks;
-
-       DEBUGP("num_entries=%u, size=%u, num_counters=%u\n",
-               repl->num_entries, repl->size, repl->num_counters);
-
-       ret = iptcc_compile_table(*handle, repl);
-       if (ret < 0) {
-               errno = ret;
-               goto out_free_newcounters;
-       }
-
-
-#ifdef IPTC_DEBUG2
-       {
-               int fd = open("/tmp/libiptc-so_set_replace.blob", 
-                               O_CREAT|O_WRONLY);
-               if (fd >= 0) {
-                       write(fd, repl, sizeof(*repl) + repl->size);
-                       close(fd);
-               }
-       }
-#endif
-
-       ret = setsockopt(sockfd, TC_IPPROTO, SO_SET_REPLACE, repl,
-                        sizeof(*repl) + repl->size);
-       if (ret < 0)
-               goto out_free_newcounters;
-
-       /* Put counters back. */
-       strcpy(newcounters->name, (*handle)->info.name);
-       newcounters->num_counters = new_number;
-
-       list_for_each_entry(c, &(*handle)->chains, list) {
-               struct rule_head *r;
-
-               /* Builtin chains have their own counters */
-               if (iptcc_is_builtin(c)) {
-                       DEBUGP("counter for chain-index %u: ", c->foot_index);
-                       switch(c->counter_map.maptype) {
-                       case COUNTER_MAP_NOMAP:
-                               counters_nomap(newcounters, c->foot_index);
-                               break;
-                       case COUNTER_MAP_NORMAL_MAP:
-                               counters_normal_map(newcounters, repl,
-                                                   c->foot_index, 
-                                                   c->counter_map.mappos);
-                               break;
-                       case COUNTER_MAP_ZEROED:
-                               counters_map_zeroed(newcounters, repl,
-                                                   c->foot_index, 
-                                                   c->counter_map.mappos,
-                                                   &c->counters);
-                               break;
-                       case COUNTER_MAP_SET:
-                               counters_map_set(newcounters, c->foot_index,
-                                                &c->counters);
-                               break;
-                       }
-               }
-
-               list_for_each_entry(r, &c->rules, list) {
-                       DEBUGP("counter for index %u: ", r->index);
-                       switch (r->counter_map.maptype) {
-                       case COUNTER_MAP_NOMAP:
-                               counters_nomap(newcounters, r->index);
-                               break;
-
-                       case COUNTER_MAP_NORMAL_MAP:
-                               counters_normal_map(newcounters, repl,
-                                                   r->index, 
-                                                   r->counter_map.mappos);
-                               break;
-
-                       case COUNTER_MAP_ZEROED:
-                               counters_map_zeroed(newcounters, repl,
-                                                   r->index,
-                                                   r->counter_map.mappos,
-                                                   &r->entry->counters);
-                               break;
-
-                       case COUNTER_MAP_SET:
-                               counters_map_set(newcounters, r->index,
-                                                &r->entry->counters);
-                               break;
-                       }
-               }
-       }
-
-#ifdef IPTC_DEBUG2
-       {
-               int fd = open("/tmp/libiptc-so_set_add_counters.blob", 
-                               O_CREAT|O_WRONLY);
-               if (fd >= 0) {
-                       write(fd, newcounters, counterlen);
-                       close(fd);
-               }
-       }
-#endif
-
-       ret = setsockopt(sockfd, TC_IPPROTO, SO_SET_ADD_COUNTERS,
-                        newcounters, counterlen);
-       if (ret < 0)
-               goto out_free_newcounters;
-
-       free(repl->counters);
-       free(repl);
-       free(newcounters);
-
-finished:
-       TC_FREE(handle);
-       return 1;
-
-out_free_newcounters:
-       free(newcounters);
-out_free_repl_counters:
-       free(repl->counters);
-out_free_repl:
-       free(repl);
-out_zero:
-       return 0;
-}
-
-/* Get raw socket. */
-int
-TC_GET_RAW_SOCKET(void)
-{
-       return sockfd;
-}
-
-/* Translates errno numbers into more human-readable form than strerror. */
-const char *
-TC_STRERROR(int err)
-{
-       unsigned int i;
-       struct table_struct {
-               void *fn;
-               int err;
-               const char *message;
-       } table [] =
-         { { TC_INIT, EPERM, "Permission denied (you must be root)" },
-           { TC_INIT, EINVAL, "Module is wrong version" },
-           { TC_INIT, ENOENT, 
-                   "Table does not exist (do you need to insmod?)" },
-           { TC_DELETE_CHAIN, ENOTEMPTY, "Chain is not empty" },
-           { TC_DELETE_CHAIN, EINVAL, "Can't delete built-in chain" },
-           { TC_DELETE_CHAIN, EMLINK,
-             "Can't delete chain with references left" },
-           { TC_CREATE_CHAIN, EEXIST, "Chain already exists" },
-           { TC_INSERT_ENTRY, E2BIG, "Index of insertion too big" },
-           { TC_REPLACE_ENTRY, E2BIG, "Index of replacement too big" },
-           { TC_DELETE_NUM_ENTRY, E2BIG, "Index of deletion too big" },
-           { TC_READ_COUNTER, E2BIG, "Index of counter too big" },
-           { TC_ZERO_COUNTER, E2BIG, "Index of counter too big" },
-           { TC_INSERT_ENTRY, ELOOP, "Loop found in table" },
-           { TC_INSERT_ENTRY, EINVAL, "Target problem" },
-           /* EINVAL for CHECK probably means bad interface. */
-           { TC_CHECK_PACKET, EINVAL,
-             "Bad arguments (does that interface exist?)" },
-           { TC_CHECK_PACKET, ENOSYS,
-             "Checking will most likely never get implemented" },
-           /* ENOENT for DELETE probably means no matching rule */
-           { TC_DELETE_ENTRY, ENOENT,
-             "Bad rule (does a matching rule exist in that chain?)" },
-           { TC_SET_POLICY, ENOENT,
-             "Bad built-in chain name" },
-           { TC_SET_POLICY, EINVAL,
-             "Bad policy name" },
-
-           { NULL, 0, "Incompatible with this kernel" },
-           { NULL, ENOPROTOOPT, "iptables who? (do you need to insmod?)" },
-           { NULL, ENOSYS, "Will be implemented real soon.  I promise ;)" },
-           { NULL, ENOMEM, "Memory allocation problem" },
-           { NULL, ENOENT, "No chain/target/match by that name" },
-         };
-
-       for (i = 0; i < sizeof(table)/sizeof(struct table_struct); i++) {
-               if ((!table[i].fn || table[i].fn == iptc_fn)
-                   && table[i].err == err)
-                       return table[i].message;
-       }
-
-       return strerror(err);
-}
diff --git a/libiptc/linux_list.h b/libiptc/linux_list.h
deleted file mode 100644 (file)
index abdcf88..0000000
+++ /dev/null
@@ -1,723 +0,0 @@
-#ifndef _LINUX_LIST_H
-#define _LINUX_LIST_H
-
-#undef offsetof
-#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
-
-/**
- * container_of - cast a member of a structure out to the containing structure
- *
- * @ptr:       the pointer to the member.
- * @type:      the type of the container struct this is embedded in.
- * @member:    the name of the member within the struct.
- *
- */
-#define container_of(ptr, type, member) ({                     \
-        const typeof( ((type *)0)->member ) *__mptr = (ptr);   \
-        (type *)( (char *)__mptr - offsetof(type,member) );})
-
-/*
- * Check at compile time that something is of a particular type.
- * Always evaluates to 1 so you may use it easily in comparisons.
- */
-#define typecheck(type,x) \
-({     type __dummy; \
-       typeof(x) __dummy2; \
-       (void)(&__dummy == &__dummy2); \
-       1; \
-})
-
-#define prefetch(x)            1
-
-/* empty define to make this work in userspace -HW */
-#define smp_wmb()
-
-/*
- * These are non-NULL pointers that will result in page faults
- * under normal circumstances, used to verify that nobody uses
- * non-initialized list entries.
- */
-#define LIST_POISON1  ((void *) 0x00100100)
-#define LIST_POISON2  ((void *) 0x00200200)
-
-/*
- * Simple doubly linked list implementation.
- *
- * Some of the internal functions ("__xxx") are useful when
- * manipulating whole lists rather than single entries, as
- * sometimes we already know the next/prev entries and we can
- * generate better code by using them directly rather than
- * using the generic single-entry routines.
- */
-
-struct list_head {
-       struct list_head *next, *prev;
-};
-
-#define LIST_HEAD_INIT(name) { &(name), &(name) }
-
-#define LIST_HEAD(name) \
-       struct list_head name = LIST_HEAD_INIT(name)
-
-#define INIT_LIST_HEAD(ptr) do { \
-       (ptr)->next = (ptr); (ptr)->prev = (ptr); \
-} while (0)
-
-/*
- * Insert a new entry between two known consecutive entries.
- *
- * This is only for internal list manipulation where we know
- * the prev/next entries already!
- */
-static inline void __list_add(struct list_head *new,
-                             struct list_head *prev,
-                             struct list_head *next)
-{
-       next->prev = new;
-       new->next = next;
-       new->prev = prev;
-       prev->next = new;
-}
-
-/**
- * list_add - add a new entry
- * @new: new entry to be added
- * @head: list head to add it after
- *
- * Insert a new entry after the specified head.
- * This is good for implementing stacks.
- */
-static inline void list_add(struct list_head *new, struct list_head *head)
-{
-       __list_add(new, head, head->next);
-}
-
-/**
- * list_add_tail - add a new entry
- * @new: new entry to be added
- * @head: list head to add it before
- *
- * Insert a new entry before the specified head.
- * This is useful for implementing queues.
- */
-static inline void list_add_tail(struct list_head *new, struct list_head *head)
-{
-       __list_add(new, head->prev, head);
-}
-
-/*
- * Insert a new entry between two known consecutive entries.
- *
- * This is only for internal list manipulation where we know
- * the prev/next entries already!
- */
-static inline void __list_add_rcu(struct list_head * new,
-               struct list_head * prev, struct list_head * next)
-{
-       new->next = next;
-       new->prev = prev;
-       smp_wmb();
-       next->prev = new;
-       prev->next = new;
-}
-
-/**
- * list_add_rcu - add a new entry to rcu-protected list
- * @new: new entry to be added
- * @head: list head to add it after
- *
- * Insert a new entry after the specified head.
- * This is good for implementing stacks.
- *
- * The caller must take whatever precautions are necessary
- * (such as holding appropriate locks) to avoid racing
- * with another list-mutation primitive, such as list_add_rcu()
- * or list_del_rcu(), running on this same list.
- * However, it is perfectly legal to run concurrently with
- * the _rcu list-traversal primitives, such as
- * list_for_each_entry_rcu().
- */
-static inline void list_add_rcu(struct list_head *new, struct list_head *head)
-{
-       __list_add_rcu(new, head, head->next);
-}
-
-/**
- * list_add_tail_rcu - add a new entry to rcu-protected list
- * @new: new entry to be added
- * @head: list head to add it before
- *
- * Insert a new entry before the specified head.
- * This is useful for implementing queues.
- *
- * The caller must take whatever precautions are necessary
- * (such as holding appropriate locks) to avoid racing
- * with another list-mutation primitive, such as list_add_tail_rcu()
- * or list_del_rcu(), running on this same list.
- * However, it is perfectly legal to run concurrently with
- * the _rcu list-traversal primitives, such as
- * list_for_each_entry_rcu().
- */
-static inline void list_add_tail_rcu(struct list_head *new,
-                                       struct list_head *head)
-{
-       __list_add_rcu(new, head->prev, head);
-}
-
-/*
- * Delete a list entry by making the prev/next entries
- * point to each other.
- *
- * This is only for internal list manipulation where we know
- * the prev/next entries already!
- */
-static inline void __list_del(struct list_head * prev, struct list_head * next)
-{
-       next->prev = prev;
-       prev->next = next;
-}
-
-/**
- * list_del - deletes entry from list.
- * @entry: the element to delete from the list.
- * Note: list_empty on entry does not return true after this, the entry is
- * in an undefined state.
- */
-static inline void list_del(struct list_head *entry)
-{
-       __list_del(entry->prev, entry->next);
-       entry->next = LIST_POISON1;
-       entry->prev = LIST_POISON2;
-}
-
-/**
- * list_del_rcu - deletes entry from list without re-initialization
- * @entry: the element to delete from the list.
- *
- * Note: list_empty on entry does not return true after this,
- * the entry is in an undefined state. It is useful for RCU based
- * lockfree traversal.
- *
- * In particular, it means that we can not poison the forward
- * pointers that may still be used for walking the list.
- *
- * The caller must take whatever precautions are necessary
- * (such as holding appropriate locks) to avoid racing
- * with another list-mutation primitive, such as list_del_rcu()
- * or list_add_rcu(), running on this same list.
- * However, it is perfectly legal to run concurrently with
- * the _rcu list-traversal primitives, such as
- * list_for_each_entry_rcu().
- *
- * Note that the caller is not permitted to immediately free
- * the newly deleted entry.  Instead, either synchronize_kernel()
- * or call_rcu() must be used to defer freeing until an RCU
- * grace period has elapsed.
- */
-static inline void list_del_rcu(struct list_head *entry)
-{
-       __list_del(entry->prev, entry->next);
-       entry->prev = LIST_POISON2;
-}
-
-/**
- * list_del_init - deletes entry from list and reinitialize it.
- * @entry: the element to delete from the list.
- */
-static inline void list_del_init(struct list_head *entry)
-{
-       __list_del(entry->prev, entry->next);
-       INIT_LIST_HEAD(entry);
-}
-
-/**
- * list_move - delete from one list and add as another's head
- * @list: the entry to move
- * @head: the head that will precede our entry
- */
-static inline void list_move(struct list_head *list, struct list_head *head)
-{
-        __list_del(list->prev, list->next);
-        list_add(list, head);
-}
-
-/**
- * list_move_tail - delete from one list and add as another's tail
- * @list: the entry to move
- * @head: the head that will follow our entry
- */
-static inline void list_move_tail(struct list_head *list,
-                                 struct list_head *head)
-{
-        __list_del(list->prev, list->next);
-        list_add_tail(list, head);
-}
-
-/**
- * list_empty - tests whether a list is empty
- * @head: the list to test.
- */
-static inline int list_empty(const struct list_head *head)
-{
-       return head->next == head;
-}
-
-/**
- * list_empty_careful - tests whether a list is
- * empty _and_ checks that no other CPU might be
- * in the process of still modifying either member
- *
- * NOTE: using list_empty_careful() without synchronization
- * can only be safe if the only activity that can happen
- * to the list entry is list_del_init(). Eg. it cannot be used
- * if another CPU could re-list_add() it.
- *
- * @head: the list to test.
- */
-static inline int list_empty_careful(const struct list_head *head)
-{
-       struct list_head *next = head->next;
-       return (next == head) && (next == head->prev);
-}
-
-static inline void __list_splice(struct list_head *list,
-                                struct list_head *head)
-{
-       struct list_head *first = list->next;
-       struct list_head *last = list->prev;
-       struct list_head *at = head->next;
-
-       first->prev = head;
-       head->next = first;
-
-       last->next = at;
-       at->prev = last;
-}
-
-/**
- * list_splice - join two lists
- * @list: the new list to add.
- * @head: the place to add it in the first list.
- */
-static inline void list_splice(struct list_head *list, struct list_head *head)
-{
-       if (!list_empty(list))
-               __list_splice(list, head);
-}
-
-/**
- * list_splice_init - join two lists and reinitialise the emptied list.
- * @list: the new list to add.
- * @head: the place to add it in the first list.
- *
- * The list at @list is reinitialised
- */
-static inline void list_splice_init(struct list_head *list,
-                                   struct list_head *head)
-{
-       if (!list_empty(list)) {
-               __list_splice(list, head);
-               INIT_LIST_HEAD(list);
-       }
-}
-
-/**
- * list_entry - get the struct for this entry
- * @ptr:       the &struct list_head pointer.
- * @type:      the type of the struct this is embedded in.
- * @member:    the name of the list_struct within the struct.
- */
-#define list_entry(ptr, type, member) \
-       container_of(ptr, type, member)
-
-/**
- * list_for_each       -       iterate over a list
- * @pos:       the &struct list_head to use as a loop counter.
- * @head:      the head for your list.
- */
-#define list_for_each(pos, head) \
-       for (pos = (head)->next, prefetch(pos->next); pos != (head); \
-               pos = pos->next, prefetch(pos->next))
-
-/**
- * __list_for_each     -       iterate over a list
- * @pos:       the &struct list_head to use as a loop counter.
- * @head:      the head for your list.
- *
- * This variant differs from list_for_each() in that it's the
- * simplest possible list iteration code, no prefetching is done.
- * Use this for code that knows the list to be very short (empty
- * or 1 entry) most of the time.
- */
-#define __list_for_each(pos, head) \
-       for (pos = (head)->next; pos != (head); pos = pos->next)
-
-/**
- * list_for_each_prev  -       iterate over a list backwards
- * @pos:       the &struct list_head to use as a loop counter.
- * @head:      the head for your list.
- */
-#define list_for_each_prev(pos, head) \
-       for (pos = (head)->prev, prefetch(pos->prev); pos != (head); \
-               pos = pos->prev, prefetch(pos->prev))
-
-/**
- * list_for_each_safe  -       iterate over a list safe against removal of list entry
- * @pos:       the &struct list_head to use as a loop counter.
- * @n:         another &struct list_head to use as temporary storage
- * @head:      the head for your list.
- */
-#define list_for_each_safe(pos, n, head) \
-       for (pos = (head)->next, n = pos->next; pos != (head); \
-               pos = n, n = pos->next)
-
-/**
- * list_for_each_entry -       iterate over list of given type
- * @pos:       the type * to use as a loop counter.
- * @head:      the head for your list.
- * @member:    the name of the list_struct within the struct.
- */
-#define list_for_each_entry(pos, head, member)                         \
-       for (pos = list_entry((head)->next, typeof(*pos), member),      \
-                    prefetch(pos->member.next);                        \
-            &pos->member != (head);                                    \
-            pos = list_entry(pos->member.next, typeof(*pos), member),  \
-                    prefetch(pos->member.next))
-
-/**
- * list_for_each_entry_reverse - iterate backwards over list of given type.
- * @pos:       the type * to use as a loop counter.
- * @head:      the head for your list.
- * @member:    the name of the list_struct within the struct.
- */
-#define list_for_each_entry_reverse(pos, head, member)                 \
-       for (pos = list_entry((head)->prev, typeof(*pos), member),      \
-                    prefetch(pos->member.prev);                        \
-            &pos->member != (head);                                    \
-            pos = list_entry(pos->member.prev, typeof(*pos), member),  \
-                    prefetch(pos->member.prev))
-
-/**
- * list_prepare_entry - prepare a pos entry for use as a start point in
- *                     list_for_each_entry_continue
- * @pos:       the type * to use as a start point
- * @head:      the head of the list
- * @member:    the name of the list_struct within the struct.
- */
-#define list_prepare_entry(pos, head, member) \
-       ((pos) ? : list_entry(head, typeof(*pos), member))
-
-/**
- * list_for_each_entry_continue -      iterate over list of given type
- *                     continuing after existing point
- * @pos:       the type * to use as a loop counter.
- * @head:      the head for your list.
- * @member:    the name of the list_struct within the struct.
- */
-#define list_for_each_entry_continue(pos, head, member)                \
-       for (pos = list_entry(pos->member.next, typeof(*pos), member),  \
-                    prefetch(pos->member.next);                        \
-            &pos->member != (head);                                    \
-            pos = list_entry(pos->member.next, typeof(*pos), member),  \
-                    prefetch(pos->member.next))
-
-/**
- * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry
- * @pos:       the type * to use as a loop counter.
- * @n:         another type * to use as temporary storage
- * @head:      the head for your list.
- * @member:    the name of the list_struct within the struct.
- */
-#define list_for_each_entry_safe(pos, n, head, member)                 \
-       for (pos = list_entry((head)->next, typeof(*pos), member),      \
-               n = list_entry(pos->member.next, typeof(*pos), member); \
-            &pos->member != (head);                                    \
-            pos = n, n = list_entry(n->member.next, typeof(*n), member))
-
-/**
- * list_for_each_rcu   -       iterate over an rcu-protected list
- * @pos:       the &struct list_head to use as a loop counter.
- * @head:      the head for your list.
- *
- * This list-traversal primitive may safely run concurrently with
- * the _rcu list-mutation primitives such as list_add_rcu()
- * as long as the traversal is guarded by rcu_read_lock().
- */
-#define list_for_each_rcu(pos, head) \
-       for (pos = (head)->next, prefetch(pos->next); pos != (head); \
-               pos = pos->next, ({ smp_read_barrier_depends(); 0;}), prefetch(pos->next))
-
-#define __list_for_each_rcu(pos, head) \
-       for (pos = (head)->next; pos != (head); \
-               pos = pos->next, ({ smp_read_barrier_depends(); 0;}))
-
-/**
- * list_for_each_safe_rcu      -       iterate over an rcu-protected list safe
- *                                     against removal of list entry
- * @pos:       the &struct list_head to use as a loop counter.
- * @n:         another &struct list_head to use as temporary storage
- * @head:      the head for your list.
- *
- * This list-traversal primitive may safely run concurrently with
- * the _rcu list-mutation primitives such as list_add_rcu()
- * as long as the traversal is guarded by rcu_read_lock().
- */
-#define list_for_each_safe_rcu(pos, n, head) \
-       for (pos = (head)->next, n = pos->next; pos != (head); \
-               pos = n, ({ smp_read_barrier_depends(); 0;}), n = pos->next)
-
-/**
- * list_for_each_entry_rcu     -       iterate over rcu list of given type
- * @pos:       the type * to use as a loop counter.
- * @head:      the head for your list.
- * @member:    the name of the list_struct within the struct.
- *
- * This list-traversal primitive may safely run concurrently with
- * the _rcu list-mutation primitives such as list_add_rcu()
- * as long as the traversal is guarded by rcu_read_lock().
- */
-#define list_for_each_entry_rcu(pos, head, member)                     \
-       for (pos = list_entry((head)->next, typeof(*pos), member),      \
-                    prefetch(pos->member.next);                        \
-            &pos->member != (head);                                    \
-            pos = list_entry(pos->member.next, typeof(*pos), member),  \
-                    ({ smp_read_barrier_depends(); 0;}),               \
-                    prefetch(pos->member.next))
-
-
-/**
- * list_for_each_continue_rcu  -       iterate over an rcu-protected list
- *                     continuing after existing point.
- * @pos:       the &struct list_head to use as a loop counter.
- * @head:      the head for your list.
- *
- * This list-traversal primitive may safely run concurrently with
- * the _rcu list-mutation primitives such as list_add_rcu()
- * as long as the traversal is guarded by rcu_read_lock().
- */
-#define list_for_each_continue_rcu(pos, head) \
-       for ((pos) = (pos)->next, prefetch((pos)->next); (pos) != (head); \
-               (pos) = (pos)->next, ({ smp_read_barrier_depends(); 0;}), prefetch((pos)->next))
-
-/*
- * Double linked lists with a single pointer list head.
- * Mostly useful for hash tables where the two pointer list head is
- * too wasteful.
- * You lose the ability to access the tail in O(1).
- */
-
-struct hlist_head {
-       struct hlist_node *first;
-};
-
-struct hlist_node {
-       struct hlist_node *next, **pprev;
-};
-
-#define HLIST_HEAD_INIT { .first = NULL }
-#define HLIST_HEAD(name) struct hlist_head name = {  .first = NULL }
-#define INIT_HLIST_HEAD(ptr) ((ptr)->first = NULL)
-#define INIT_HLIST_NODE(ptr) ((ptr)->next = NULL, (ptr)->pprev = NULL)
-
-static inline int hlist_unhashed(const struct hlist_node *h)
-{
-       return !h->pprev;
-}
-
-static inline int hlist_empty(const struct hlist_head *h)
-{
-       return !h->first;
-}
-
-static inline void __hlist_del(struct hlist_node *n)
-{
-       struct hlist_node *next = n->next;
-       struct hlist_node **pprev = n->pprev;
-       *pprev = next;
-       if (next)
-               next->pprev = pprev;
-}
-
-static inline void hlist_del(struct hlist_node *n)
-{
-       __hlist_del(n);
-       n->next = LIST_POISON1;
-       n->pprev = LIST_POISON2;
-}
-
-/**
- * hlist_del_rcu - deletes entry from hash list without re-initialization
- * @n: the element to delete from the hash list.
- *
- * Note: list_unhashed() on entry does not return true after this,
- * the entry is in an undefined state. It is useful for RCU based
- * lockfree traversal.
- *
- * In particular, it means that we can not poison the forward
- * pointers that may still be used for walking the hash list.
- *
- * The caller must take whatever precautions are necessary
- * (such as holding appropriate locks) to avoid racing
- * with another list-mutation primitive, such as hlist_add_head_rcu()
- * or hlist_del_rcu(), running on this same list.
- * However, it is perfectly legal to run concurrently with
- * the _rcu list-traversal primitives, such as
- * hlist_for_each_entry().
- */
-static inline void hlist_del_rcu(struct hlist_node *n)
-{
-       __hlist_del(n);
-       n->pprev = LIST_POISON2;
-}
-
-static inline void hlist_del_init(struct hlist_node *n)
-{
-       if (n->pprev)  {
-               __hlist_del(n);
-               INIT_HLIST_NODE(n);
-       }
-}
-
-#define hlist_del_rcu_init hlist_del_init
-
-static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h)
-{
-       struct hlist_node *first = h->first;
-       n->next = first;
-       if (first)
-               first->pprev = &n->next;
-       h->first = n;
-       n->pprev = &h->first;
-}
-
-
-/**
- * hlist_add_head_rcu - adds the specified element to the specified hlist,
- * while permitting racing traversals.
- * @n: the element to add to the hash list.
- * @h: the list to add to.
- *
- * The caller must take whatever precautions are necessary
- * (such as holding appropriate locks) to avoid racing
- * with another list-mutation primitive, such as hlist_add_head_rcu()
- * or hlist_del_rcu(), running on this same list.
- * However, it is perfectly legal to run concurrently with
- * the _rcu list-traversal primitives, such as
- * hlist_for_each_entry(), but only if smp_read_barrier_depends()
- * is used to prevent memory-consistency problems on Alpha CPUs.
- * Regardless of the type of CPU, the list-traversal primitive
- * must be guarded by rcu_read_lock().
- *
- * OK, so why don't we have an hlist_for_each_entry_rcu()???
- */
-static inline void hlist_add_head_rcu(struct hlist_node *n,
-                                       struct hlist_head *h)
-{
-       struct hlist_node *first = h->first;
-       n->next = first;
-       n->pprev = &h->first;
-       smp_wmb();
-       if (first)
-               first->pprev = &n->next;
-       h->first = n;
-}
-
-/* next must be != NULL */
-static inline void hlist_add_before(struct hlist_node *n,
-                                       struct hlist_node *next)
-{
-       n->pprev = next->pprev;
-       n->next = next;
-       next->pprev = &n->next;
-       *(n->pprev) = n;
-}
-
-static inline void hlist_add_after(struct hlist_node *n,
-                                       struct hlist_node *next)
-{
-       next->next = n->next;
-       n->next = next;
-       next->pprev = &n->next;
-
-       if(next->next)
-               next->next->pprev  = &next->next;
-}
-
-#define hlist_entry(ptr, type, member) container_of(ptr,type,member)
-
-#define hlist_for_each(pos, head) \
-       for (pos = (head)->first; pos && ({ prefetch(pos->next); 1; }); \
-            pos = pos->next)
-
-#define hlist_for_each_safe(pos, n, head) \
-       for (pos = (head)->first; pos && ({ n = pos->next; 1; }); \
-            pos = n)
-
-/**
- * hlist_for_each_entry        - iterate over list of given type
- * @tpos:      the type * to use as a loop counter.
- * @pos:       the &struct hlist_node to use as a loop counter.
- * @head:      the head for your list.
- * @member:    the name of the hlist_node within the struct.
- */
-#define hlist_for_each_entry(tpos, pos, head, member)                   \
-       for (pos = (head)->first;                                        \
-            pos && ({ prefetch(pos->next); 1;}) &&                      \
-               ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
-            pos = pos->next)
-
-/**
- * hlist_for_each_entry_continue - iterate over a hlist continuing after existing point
- * @tpos:      the type * to use as a loop counter.
- * @pos:       the &struct hlist_node to use as a loop counter.
- * @member:    the name of the hlist_node within the struct.
- */
-#define hlist_for_each_entry_continue(tpos, pos, member)                \
-       for (pos = (pos)->next;                                          \
-            pos && ({ prefetch(pos->next); 1;}) &&                      \
-               ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
-            pos = pos->next)
-
-/**
- * hlist_for_each_entry_from - iterate over a hlist continuing from existing point
- * @tpos:      the type * to use as a loop counter.
- * @pos:       the &struct hlist_node to use as a loop counter.
- * @member:    the name of the hlist_node within the struct.
- */
-#define hlist_for_each_entry_from(tpos, pos, member)                    \
-       for (; pos && ({ prefetch(pos->next); 1;}) &&                    \
-               ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
-            pos = pos->next)
-
-/**
- * hlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry
- * @tpos:      the type * to use as a loop counter.
- * @pos:       the &struct hlist_node to use as a loop counter.
- * @n:         another &struct hlist_node to use as temporary storage
- * @head:      the head for your list.
- * @member:    the name of the hlist_node within the struct.
- */
-#define hlist_for_each_entry_safe(tpos, pos, n, head, member)           \
-       for (pos = (head)->first;                                        \
-            pos && ({ n = pos->next; 1; }) &&                           \
-               ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
-            pos = n)
-
-/**
- * hlist_for_each_entry_rcu - iterate over rcu list of given type
- * @pos:       the type * to use as a loop counter.
- * @pos:       the &struct hlist_node to use as a loop counter.
- * @head:      the head for your list.
- * @member:    the name of the hlist_node within the struct.
- *
- * This list-traversal primitive may safely run concurrently with
- * the _rcu list-mutation primitives such as hlist_add_rcu()
- * as long as the traversal is guarded by rcu_read_lock().
- */
-#define hlist_for_each_entry_rcu(tpos, pos, head, member)               \
-       for (pos = (head)->first;                                        \
-            pos && ({ prefetch(pos->next); 1;}) &&                      \
-               ({ tpos = hlist_entry(pos, typeof(*tpos), member); 1;}); \
-            pos = pos->next, ({ smp_read_barrier_depends(); 0; }) )
-
-#endif
diff --git a/libiptc/linux_stddef.h b/libiptc/linux_stddef.h
deleted file mode 100644 (file)
index 56416f1..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef _LINUX_STDDEF_H
-#define _LINUX_STDDEF_H
-
-#undef NULL
-#if defined(__cplusplus)
-#define NULL 0
-#else
-#define NULL ((void *)0)
-#endif
-
-#undef offsetof
-#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
-
-
-/**
- * container_of - cast a member of a structure out to the containing structure
- *
- * @ptr:       the pointer to the member.
- * @type:      the type of the container struct this is embedded in.
- * @member:    the name of the member within the struct.
- *
- */
-#define container_of(ptr, type, member) ({                     \
-        const typeof( ((type *)0)->member ) *__mptr = (ptr);   \
-        (type *)( (char *)__mptr - offsetof(type,member) );})
-
-/*
- * Check at compile time that something is of a particular type.
- * Always evaluates to 1 so you may use it easily in comparisons.
- */
-#define typecheck(type,x) \
-({     type __dummy; \
-       typeof(x) __dummy2; \
-       (void)(&__dummy == &__dummy2); \
-       1; \
-})
-
-
-#endif
diff --git a/ltmain.sh b/ltmain.sh
deleted file mode 100644 (file)
index 0bf3848..0000000
--- a/ltmain.sh
+++ /dev/null
@@ -1,6964 +0,0 @@
-# ltmain.sh - Provide generalized library-building support services.
-# NOTE: Changing this file will not affect anything until you rerun configure.
-#
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006,
-# 2007, 2008  Free Software Foundation, Inc.
-# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 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 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, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# 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.
-
-basename="s,^.*/,,g"
-
-# 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 $basename`
-modename="$progname"
-
-# Global variables:
-EXIT_SUCCESS=0
-EXIT_FAILURE=1
-
-PROGRAM=ltmain.sh
-PACKAGE=libtool
-VERSION="1.5.26 Debian 1.5.26-4"
-TIMESTAMP=" (1.1220.2.493 2008/02/01 16:58:18)"
-
-# Be Bourne compatible (taken from Autoconf:_AS_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
-
-# Check that we have a working $echo.
-if test "X$1" = X--no-reexec; then
-  # Discard the --no-reexec flag, and continue.
-  shift
-elif test "X$1" = X--fallback-echo; then
-  # Avoid inline document here, it may be left over
-  :
-elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
-  # Yippee, $echo works!
-  :
-else
-  # Restart under the correct shell, and then maybe $echo will work.
-  exec $SHELL "$progpath" --no-reexec ${1+"$@"}
-fi
-
-if test "X$1" = X--fallback-echo; then
-  # used as fallback echo
-  shift
-  cat <<EOF
-$*
-EOF
-  exit $EXIT_SUCCESS
-fi
-
-default_mode=
-help="Try \`$progname --help' for more information."
-magic="%%%MAGIC variable%%%"
-mkdir="mkdir"
-mv="mv -f"
-rm="rm -f"
-
-# Sed substitution that helps us do robust quoting.  It backslashifies
-# metacharacters that are still active within double-quoted strings.
-Xsed="${SED}"' -e 1s/^X//'
-sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
-# 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
-  SP2NL='tr \040 \012'
-  NL2SP='tr \015\012 \040\040'
-  ;;
- *) # EBCDIC based system
-  SP2NL='tr \100 \n'
-  NL2SP='tr \r\n \100\100'
-  ;;
-esac
-
-# NLS nuisances.
-# Only set LANG and LC_ALL to C if already set.
-# These must not be set unconditionally because not all systems understand
-# e.g. LANG=C (notably SCO).
-# We save the old values to restore during execute mode.
-lt_env=
-for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
-do
-  eval "if test \"\${$lt_var+set}\" = set; then
-         save_$lt_var=\$$lt_var
-         lt_env=\"$lt_var=\$$lt_var \$lt_env\"
-         $lt_var=C
-         export $lt_var
-       fi"
-done
-
-if test -n "$lt_env"; then
-  lt_env="env $lt_env"
-fi
-
-# Make sure IFS has a sensible default
-lt_nl='
-'
-IFS="  $lt_nl"
-
-if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
-  $echo "$modename: not configured to build any kind of library" 1>&2
-  $echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
-  exit $EXIT_FAILURE
-fi
-
-# Global variables.
-mode=$default_mode
-nonopt=
-prev=
-prevopt=
-run=
-show="$echo"
-show_help=
-execute_dlfiles=
-duplicate_deps=no
-preserve_args=
-lo2o="s/\\.lo\$/.${objext}/"
-o2lo="s/\\.${objext}\$/.lo/"
-extracted_archives=
-extracted_serial=0
-
-#####################################
-# Shell function definitions:
-# This seems to be the best place for them
-
-# func_mktempdir [string]
-# Make a temporary directory that won't clash with other running
-# libtool processes, and avoids race conditions if possible.  If
-# given, STRING is the basename for that directory.
-func_mktempdir ()
-{
-    my_template="${TMPDIR-/tmp}/${1-$progname}"
-
-    if test "$run" = ":"; then
-      # Return a directory name, but don't create it in dry-run mode
-      my_tmpdir="${my_template}-$$"
-    else
-
-      # If mktemp works, use that first and foremost
-      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
-
-      if test ! -d "$my_tmpdir"; then
-       # Failing that, at least try and use $RANDOM to avoid a race
-       my_tmpdir="${my_template}-${RANDOM-0}$$"
-
-       save_mktempdir_umask=`umask`
-       umask 0077
-       $mkdir "$my_tmpdir"
-       umask $save_mktempdir_umask
-      fi
-
-      # If we're not in dry-run mode, bomb out on failure
-      test -d "$my_tmpdir" || {
-        $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2
-       exit $EXIT_FAILURE
-      }
-    fi
-
-    $echo "X$my_tmpdir" | $Xsed
-}
-
-
-# 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.
-func_win32_libid ()
-{
-  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
-    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \
-      $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
-      win32_nmres=`eval $NM -f posix -A $1 | \
-       $SED -n -e '1,100{
-               / I /{
-                       s,.*,import,
-                       p
-                       q
-                       }
-               }'`
-      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_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 ()
-{
-    if test -n "$available_tags" && test -z "$tagname"; then
-      CC_quoted=
-      for arg in $CC; do
-       case $arg in
-         *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
-         arg="\"$arg\""
-         ;;
-       esac
-       CC_quoted="$CC_quoted $arg"
-      done
-      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 "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;;
-      # 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.
-           case $arg in
-             *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \     ]*|*]*|"")
-             arg="\"$arg\""
-             ;;
-           esac
-           CC_quoted="$CC_quoted $arg"
-         done
-           case "$@ " in
-             " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*)
-             # 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
-         $echo "$modename: unable to infer tagged configuration"
-         $echo "$modename: specify a tag with \`--tag'" 1>&2
-         exit $EXIT_FAILURE
-#        else
-#          $echo "$modename: using $tagname tagged configuration"
-       fi
-       ;;
-      esac
-    fi
-}
-
-
-# func_extract_an_archive dir oldlib
-func_extract_an_archive ()
-{
-    f_ex_an_ar_dir="$1"; shift
-    f_ex_an_ar_oldlib="$1"
-
-    $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)"
-    $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $?
-    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
-     :
-    else
-      $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2
-      exit $EXIT_FAILURE
-    fi
-}
-
-# func_extract_archives gentop oldlib ...
-func_extract_archives ()
-{
-    my_gentop="$1"; shift
-    my_oldlibs=${1+"$@"}
-    my_oldobjs=""
-    my_xlib=""
-    my_xabs=""
-    my_xdir=""
-    my_status=""
-
-    $show "${rm}r $my_gentop"
-    $run ${rm}r "$my_gentop"
-    $show "$mkdir $my_gentop"
-    $run $mkdir "$my_gentop"
-    my_status=$?
-    if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then
-      exit $my_status
-    fi
-
-    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
-      my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'`
-      my_xlib_u=$my_xlib
-      while :; do
-        case " $extracted_archives " in
-       *" $my_xlib_u "*)
-         extracted_serial=`expr $extracted_serial + 1`
-         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"
-
-      $show "${rm}r $my_xdir"
-      $run ${rm}r "$my_xdir"
-      $show "$mkdir $my_xdir"
-      $run $mkdir "$my_xdir"
-      exit_status=$?
-      if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then
-       exit $exit_status
-      fi
-      case $host in
-      *-darwin*)
-       $show "Extracting $my_xabs"
-       # Do not bother doing anything if just a dry run
-       if test -z "$run"; then
-         darwin_orig_dir=`pwd`
-         cd $my_xdir || exit $?
-         darwin_archive=$my_xabs
-         darwin_curdir=`pwd`
-         darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'`
-         darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null`
-         if test -n "$darwin_arches"; then 
-           darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'`
-           darwin_arch=
-           $show "$darwin_base_archive has multiple architectures $darwin_arches"
-           for darwin_arch in  $darwin_arches ; do
-             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 have a bunch of thin objects, gotta fatten them up :)
-           darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP`
-           darwin_file=
-           darwin_files=
-           for darwin_file in $darwin_filelist; do
-             darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
-             lipo -create -output "$darwin_file" $darwin_files
-           done # $darwin_filelist
-           ${rm}r unfat-$$
-           cd "$darwin_orig_dir"
-         else
-           cd "$darwin_orig_dir"
-           func_extract_an_archive "$my_xdir" "$my_xabs"
-         fi # $darwin_arches
-       fi # $run
-       ;;
-      *)
-        func_extract_an_archive "$my_xdir" "$my_xabs"
-        ;;
-      esac
-      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
-    done
-    func_extract_archives_result="$my_oldobjs"
-}
-# End of Shell function definitions
-#####################################
-
-# Darwin sucks
-eval std_shrext=\"$shrext_cmds\"
-
-disable_libs=no
-
-# Parse our command line options once, thoroughly.
-while test "$#" -gt 0
-do
-  arg="$1"
-  shift
-
-  case $arg in
-  -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
-  *) optarg= ;;
-  esac
-
-  # If the previous option needs an argument, assign it.
-  if test -n "$prev"; then
-    case $prev in
-    execute_dlfiles)
-      execute_dlfiles="$execute_dlfiles $arg"
-      ;;
-    tag)
-      tagname="$arg"
-      preserve_args="${preserve_args}=$arg"
-
-      # Check whether tagname contains only valid characters
-      case $tagname in
-      *[!-_A-Za-z0-9,/]*)
-       $echo "$progname: invalid tag name: $tagname" 1>&2
-       exit $EXIT_FAILURE
-       ;;
-      esac
-
-      case $tagname in
-      CC)
-       # Don't test for the "default" C tag, as we know, it's there, but
-       # not specially marked.
-       ;;
-      *)
-       if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then
-         taglist="$taglist $tagname"
-         # Evaluate the configuration.
-         eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`"
-       else
-         $echo "$progname: ignoring unknown tag $tagname" 1>&2
-       fi
-       ;;
-      esac
-      ;;
-    *)
-      eval "$prev=\$arg"
-      ;;
-    esac
-
-    prev=
-    prevopt=
-    continue
-  fi
-
-  # Have we seen a non-optional argument yet?
-  case $arg in
-  --help)
-    show_help=yes
-    ;;
-
-  --version)
-    echo "\
-$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP
-
-Copyright (C) 2008  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."
-    exit $?
-    ;;
-
-  --config)
-    ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath
-    # Now print the configurations for the tags.
-    for tagname in $taglist; do
-      ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath"
-    done
-    exit $?
-    ;;
-
-  --debug)
-    $echo "$progname: enabling shell trace mode"
-    set -x
-    preserve_args="$preserve_args $arg"
-    ;;
-
-  --dry-run | -n)
-    run=:
-    ;;
-
-  --features)
-    $echo "host: $host"
-    if test "$build_libtool_libs" = yes; then
-      $echo "enable shared libraries"
-    else
-      $echo "disable shared libraries"
-    fi
-    if test "$build_old_libs" = yes; then
-      $echo "enable static libraries"
-    else
-      $echo "disable static libraries"
-    fi
-    exit $?
-    ;;
-
-  --finish) mode="finish" ;;
-
-  --mode) prevopt="--mode" prev=mode ;;
-  --mode=*) mode="$optarg" ;;
-
-  --preserve-dup-deps) duplicate_deps="yes" ;;
-
-  --quiet | --silent)
-    show=:
-    preserve_args="$preserve_args $arg"
-    ;;
-
-  --tag)
-    prevopt="--tag"
-    prev=tag
-    preserve_args="$preserve_args --tag"
-    ;;
-  --tag=*)
-    set tag "$optarg" ${1+"$@"}
-    shift
-    prev=tag
-    preserve_args="$preserve_args --tag"
-    ;;
-
-  -dlopen)
-    prevopt="-dlopen"
-    prev=execute_dlfiles
-    ;;
-
-  -*)
-    $echo "$modename: unrecognized option \`$arg'" 1>&2
-    $echo "$help" 1>&2
-    exit $EXIT_FAILURE
-    ;;
-
-  *)
-    nonopt="$arg"
-    break
-    ;;
-  esac
-done
-
-if test -n "$prevopt"; then
-  $echo "$modename: option \`$prevopt' requires an argument" 1>&2
-  $echo "$help" 1>&2
-  exit $EXIT_FAILURE
-fi
-
-case $disable_libs in
-no) 
-  ;;
-shared)
-  build_libtool_libs=no
-  build_old_libs=yes
-  ;;
-static)
-  build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
-  ;;
-esac
-
-# 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=
-
-if test -z "$show_help"; then
-
-  # Infer the operation mode.
-  if test -z "$mode"; then
-    $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2
-    $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2
-    case $nonopt in
-    *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*)
-      mode=link
-      for arg
-      do
-       case $arg in
-       -c)
-          mode=compile
-          break
-          ;;
-       esac
-      done
-      ;;
-    *db | *dbx | *strace | *truss)
-      mode=execute
-      ;;
-    *install*|cp|mv)
-      mode=install
-      ;;
-    *rm)
-      mode=uninstall
-      ;;
-    *)
-      # If we have no mode, but dlfiles were specified, then do execute mode.
-      test -n "$execute_dlfiles" && mode=execute
-
-      # Just use the default operation mode.
-      if test -z "$mode"; then
-       if test -n "$nonopt"; then
-         $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
-       else
-         $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
-       fi
-      fi
-      ;;
-    esac
-  fi
-
-  # Only execute mode is allowed to have -dlopen flags.
-  if test -n "$execute_dlfiles" && test "$mode" != execute; then
-    $echo "$modename: unrecognized option \`-dlopen'" 1>&2
-    $echo "$help" 1>&2
-    exit $EXIT_FAILURE
-  fi
-
-  # Change the help message to a mode-specific one.
-  generic_help="$help"
-  help="Try \`$modename --help --mode=$mode' for more information."
-
-  # These modes are in order of execution frequency so that they run quickly.
-  case $mode in
-  # libtool compile mode
-  compile)
-    modename="$modename: compile"
-    # 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=
-
-    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)
-         if test -n "$libobj" ; then
-           $echo "$modename: you cannot specify \`-o' more than once" 1>&2
-           exit $EXIT_FAILURE
-         fi
-         arg_mode=target
-         continue
-         ;;
-
-       -static | -prefer-pic | -prefer-non-pic)
-         later="$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,*)
-         args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
-         lastarg=
-         save_ifs="$IFS"; IFS=','
-         for arg in $args; do
-           IFS="$save_ifs"
-
-           # Double-quote args containing other shell metacharacters.
-           # Many Bourne shells cannot handle close brackets correctly
-           # in scan sets, so we specify it separately.
-           case $arg in
-             *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \     ]*|*]*|"")
-             arg="\"$arg\""
-             ;;
-           esac
-           lastarg="$lastarg $arg"
-         done
-         IFS="$save_ifs"
-         lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
-
-         # Add the arguments to base_compile.
-         base_compile="$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.
-      lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
-
-      case $lastarg in
-      # Double-quote args containing other shell metacharacters.
-      # Many Bourne shells cannot handle close brackets correctly
-      # in scan sets, and some SunOS ksh mistreat backslash-escaping
-      # in scan sets (worked around with variable expansion),
-      # and furthermore cannot handle '|' '&' '(' ')' in scan sets 
-      # at all, so we specify them separately.
-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
-       lastarg="\"$lastarg\""
-       ;;
-      esac
-
-      base_compile="$base_compile $lastarg"
-    done # for arg
-
-    case $arg_mode in
-    arg)
-      $echo "$modename: you must specify an argument for -Xcompile"
-      exit $EXIT_FAILURE
-      ;;
-    target)
-      $echo "$modename: you must specify a target with \`-o'" 1>&2
-      exit $EXIT_FAILURE
-      ;;
-    *)
-      # Get the name of the library object.
-      [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
-      ;;
-    esac
-
-    # Recognize several different file suffixes.
-    # If the user specifies -o file.o, it is replaced with file.lo
-    xform='[cCFSifmso]'
-    case $libobj in
-    *.ada) xform=ada ;;
-    *.adb) xform=adb ;;
-    *.ads) xform=ads ;;
-    *.asm) xform=asm ;;
-    *.c++) xform=c++ ;;
-    *.cc) xform=cc ;;
-    *.ii) xform=ii ;;
-    *.class) xform=class ;;
-    *.cpp) xform=cpp ;;
-    *.cxx) xform=cxx ;;
-    *.[fF][09]?) xform=[fF][09]. ;;
-    *.for) xform=for ;;
-    *.java) xform=java ;;
-    *.obj) xform=obj ;;
-    *.sx) xform=sx ;;
-    esac
-
-    libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
-
-    case $libobj in
-    *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
-    *)
-      $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
-      exit $EXIT_FAILURE
-      ;;
-    esac
-
-    func_infer_tag $base_compile
-
-    for arg in $later; do
-      case $arg in
-      -static)
-       build_old_libs=yes
-       continue
-       ;;
-
-      -prefer-pic)
-       pic_mode=yes
-       continue
-       ;;
-
-      -prefer-non-pic)
-       pic_mode=no
-       continue
-       ;;
-      esac
-    done
-
-    qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"`
-    case $qlibobj in
-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
-       qlibobj="\"$qlibobj\"" ;;
-    esac
-    test "X$libobj" != "X$qlibobj" \
-       && $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"'  &()|`$[]' \
-       && $echo "$modename: libobj name \`$libobj' may not contain shell special characters."
-    objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
-    xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
-    if test "X$xdir" = "X$obj"; then
-      xdir=
-    else
-      xdir=$xdir/
-    fi
-    lobj=${xdir}$objdir/$objname
-
-    if test -z "$base_compile"; then
-      $echo "$modename: you must specify a compilation command" 1>&2
-      $echo "$help" 1>&2
-      exit $EXIT_FAILURE
-    fi
-
-    # Delete any leftover library objects.
-    if test "$build_old_libs" = yes; then
-      removelist="$obj $lobj $libobj ${libobj}T"
-    else
-      removelist="$lobj $libobj ${libobj}T"
-    fi
-
-    $run $rm $removelist
-    trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
-
-    # On Cygwin there's no "real" PIC flag so we must build both object types
-    case $host_os in
-    cygwin* | mingw* | pw32* | os2*)
-      pic_mode=default
-      ;;
-    esac
-    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; 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 "$compiler_c_o" = no; then
-      output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
-      lockfile="$output_obj.lock"
-      removelist="$removelist $output_obj $lockfile"
-      trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
-    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 "$need_locks" = yes; then
-      until $run ln "$progpath" "$lockfile" 2>/dev/null; do
-       $show "Waiting for $lockfile to be removed"
-       sleep 2
-      done
-    elif test "$need_locks" = warn; 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."
-
-       $run $rm $removelist
-       exit $EXIT_FAILURE
-      fi
-      $echo "$srcfile" > "$lockfile"
-    fi
-
-    if test -n "$fix_srcfile_path"; then
-      eval srcfile=\"$fix_srcfile_path\"
-    fi
-    qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"`
-    case $qsrcfile in
-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
-      qsrcfile="\"$qsrcfile\"" ;;
-    esac
-
-    $run $rm "$libobj" "${libobj}T"
-
-    # Create a libtool object file (analogous to a ".la" file),
-    # but don't create it if we're doing a dry run.
-    test -z "$run" && cat > ${libobj}T <<EOF
-# $libobj - a libtool object file
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# Please DO NOT delete this file!
-# It is necessary for linking the library.
-
-# Name of the PIC object.
-EOF
-
-    # Only build a PIC object if we are building libtool libraries.
-    if test "$build_libtool_libs" = yes; then
-      # Without this assignment, base_compile gets emptied.
-      fbsd_hideous_sh_bug=$base_compile
-
-      if test "$pic_mode" != no; then
-       command="$base_compile $qsrcfile $pic_flag"
-      else
-       # Don't build PIC code
-       command="$base_compile $qsrcfile"
-      fi
-
-      if test ! -d "${xdir}$objdir"; then
-       $show "$mkdir ${xdir}$objdir"
-       $run $mkdir ${xdir}$objdir
-       exit_status=$?
-       if test "$exit_status" -ne 0 && test ! -d "${xdir}$objdir"; then
-         exit $exit_status
-       fi
-      fi
-
-      if test -z "$output_obj"; then
-       # Place PIC objects in $objdir
-       command="$command -o $lobj"
-      fi
-
-      $run $rm "$lobj" "$output_obj"
-
-      $show "$command"
-      if $run eval $lt_env "$command"; then :
-      else
-       test -n "$output_obj" && $run $rm $removelist
-       exit $EXIT_FAILURE
-      fi
-
-      if test "$need_locks" = warn &&
-        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."
-
-       $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
-       $show "$mv $output_obj $lobj"
-       if $run $mv $output_obj $lobj; then :
-       else
-         error=$?
-         $run $rm $removelist
-         exit $error
-       fi
-      fi
-
-      # Append the name of the PIC object to the libtool object file.
-      test -z "$run" && cat >> ${libobj}T <<EOF
-pic_object='$objdir/$objname'
-
-EOF
-
-      # Allow error messages only from the first compilation.
-      if test "$suppress_opt" = yes; then
-        suppress_output=' >/dev/null 2>&1'
-      fi
-    else
-      # No PIC object so indicate it doesn't exist in the libtool
-      # object file.
-      test -z "$run" && cat >> ${libobj}T <<EOF
-pic_object=none
-
-EOF
-    fi
-
-    # Only build a position-dependent object if we build old libraries.
-    if test "$build_old_libs" = yes; then
-      if test "$pic_mode" != yes; then
-       # Don't build PIC code
-       command="$base_compile $qsrcfile"
-      else
-       command="$base_compile $qsrcfile $pic_flag"
-      fi
-      if test "$compiler_c_o" = yes; then
-       command="$command -o $obj"
-      fi
-
-      # Suppress compiler output if we already did a PIC compilation.
-      command="$command$suppress_output"
-      $run $rm "$obj" "$output_obj"
-      $show "$command"
-      if $run eval $lt_env "$command"; then :
-      else
-       $run $rm $removelist
-       exit $EXIT_FAILURE
-      fi
-
-      if test "$need_locks" = warn &&
-        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."
-
-       $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
-       $show "$mv $output_obj $obj"
-       if $run $mv $output_obj $obj; then :
-       else
-         error=$?
-         $run $rm $removelist
-         exit $error
-       fi
-      fi
-
-      # Append the name of the non-PIC object the libtool object file.
-      # Only append if the libtool object file exists.
-      test -z "$run" && cat >> ${libobj}T <<EOF
-# Name of the non-PIC object.
-non_pic_object='$objname'
-
-EOF
-    else
-      # Append the name of the non-PIC object the libtool object file.
-      # Only append if the libtool object file exists.
-      test -z "$run" && cat >> ${libobj}T <<EOF
-# Name of the non-PIC object.
-non_pic_object=none
-
-EOF
-    fi
-
-    $run $mv "${libobj}T" "${libobj}"
-
-    # Unlock the critical section if it was locked
-    if test "$need_locks" != no; then
-      $run $rm "$lockfile"
-    fi
-
-    exit $EXIT_SUCCESS
-    ;;
-
-  # libtool link mode
-  link | relink)
-    modename="$modename: link"
-    case $host in
-    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
-      # It is impossible to link a dll without this setting, and
-      # we shouldn't force the makefile maintainer to figure out
-      # which 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 which 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=
-
-    avoid_version=no
-    dlfiles=
-    dlprefiles=
-    dlself=no
-    export_dynamic=no
-    export_symbols=
-    export_symbols_regex=
-    generated=
-    libobjs=
-    ltlibs=
-    module=no
-    no_install=no
-    objs=
-    non_pic_objects=
-    notinst_path= # paths that contain not-installed libtool libraries
-    precious_files_regex=
-    prefer_static_libs=no
-    preload=no
-    prev=
-    prevarg=
-    release=
-    rpath=
-    xrpath=
-    perm_rpath=
-    temp_rpath=
-    thread_safe=no
-    vinfo=
-    vinfo_number=no
-    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
-      -all-static | -static | -static-libtool-libs)
-       case $arg in
-       -all-static)
-         if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
-           $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
-         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
-      case $arg in
-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
-       qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
-       ;;
-      *) qarg=$arg ;;
-      esac
-      libtool_args="$libtool_args $qarg"
-
-      # If the previous option needs an argument, assign it.
-      if test -n "$prev"; then
-       case $prev in
-       output)
-         compile_command="$compile_command @OUTPUT@"
-         finalize_command="$finalize_command @OUTPUT@"
-         ;;
-       esac
-
-       case $prev in
-       dlfiles|dlprefiles)
-         if test "$preload" = no; then
-           # Add the symbol object into the linking commands.
-           compile_command="$compile_command @SYMFILE@"
-           finalize_command="$finalize_command @SYMFILE@"
-           preload=yes
-         fi
-         case $arg in
-         *.la | *.lo) ;;  # We handle these cases below.
-         force)
-           if test "$dlself" = no; then
-             dlself=needless
-             export_dynamic=yes
-           fi
-           prev=
-           continue
-           ;;
-         self)
-           if test "$prev" = dlprefiles; then
-             dlself=yes
-           elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
-             dlself=yes
-           else
-             dlself=needless
-             export_dynamic=yes
-           fi
-           prev=
-           continue
-           ;;
-         *)
-           if test "$prev" = dlfiles; then
-             dlfiles="$dlfiles $arg"
-           else
-             dlprefiles="$dlprefiles $arg"
-           fi
-           prev=
-           continue
-           ;;
-         esac
-         ;;
-       expsyms)
-         export_symbols="$arg"
-         if test ! -f "$arg"; then
-           $echo "$modename: symbol file \`$arg' does not exist"
-           exit $EXIT_FAILURE
-         fi
-         prev=
-         continue
-         ;;
-       expsyms_regex)
-         export_symbols_regex="$arg"
-         prev=
-         continue
-         ;;
-       inst_prefix)
-         inst_prefix_dir="$arg"
-         prev=
-         continue
-         ;;
-       precious_regex)
-         precious_files_regex="$arg"
-         prev=
-         continue
-         ;;
-       release)
-         release="-$arg"
-         prev=
-         continue
-         ;;
-       objectlist)
-         if test -f "$arg"; then
-           save_arg=$arg
-           moreargs=
-           for fil in `cat $save_arg`
-           do
-#            moreargs="$moreargs $fil"
-             arg=$fil
-             # A libtool-controlled object.
-
-             # Check to see that this really is a libtool object.
-             if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-               pic_object=
-               non_pic_object=
-
-               # Read the .lo file
-               # If there is no directory component, then add one.
-               case $arg in
-               */* | *\\*) . $arg ;;
-               *) . ./$arg ;;
-               esac
-
-               if test -z "$pic_object" || \
-                  test -z "$non_pic_object" ||
-                  test "$pic_object" = none && \
-                  test "$non_pic_object" = none; then
-                 $echo "$modename: cannot find name of object for \`$arg'" 1>&2
-                 exit $EXIT_FAILURE
-               fi
-
-               # Extract subdirectory from the argument.
-               xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
-               if test "X$xdir" = "X$arg"; then
-                 xdir=
-               else
-                 xdir="$xdir/"
-               fi
-
-               if test "$pic_object" != none; then
-                 # Prepend the subdirectory the object is found in.
-                 pic_object="$xdir$pic_object"
-
-                 if test "$prev" = dlfiles; then
-                   if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
-                     dlfiles="$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 "$prev" = dlprefiles; then
-                   # Preload the old-style object.
-                   dlprefiles="$dlprefiles $pic_object"
-                   prev=
-                 fi
-
-                 # A PIC object.
-                 libobjs="$libobjs $pic_object"
-                 arg="$pic_object"
-               fi
-
-               # Non-PIC object.
-               if test "$non_pic_object" != none; then
-                 # Prepend the subdirectory the object is found in.
-                 non_pic_object="$xdir$non_pic_object"
-
-                 # A standard non-PIC object
-                 non_pic_objects="$non_pic_objects $non_pic_object"
-                 if test -z "$pic_object" || test "$pic_object" = none ; 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"
-                 non_pic_objects="$non_pic_objects $non_pic_object"
-               fi
-             else
-               # Only an error if not doing a dry-run.
-               if test -z "$run"; then
-                 $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
-                 exit $EXIT_FAILURE
-               else
-                 # Dry-run case.
-
-                 # Extract subdirectory from the argument.
-                 xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
-                 if test "X$xdir" = "X$arg"; then
-                   xdir=
-                 else
-                   xdir="$xdir/"
-                 fi
-
-                 pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
-                 non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
-                 libobjs="$libobjs $pic_object"
-                 non_pic_objects="$non_pic_objects $non_pic_object"
-               fi
-             fi
-           done
-         else
-           $echo "$modename: link input file \`$save_arg' does not exist"
-           exit $EXIT_FAILURE
-         fi
-         arg=$save_arg
-         prev=
-         continue
-         ;;
-       rpath | xrpath)
-         # We need an absolute path.
-         case $arg in
-         [\\/]* | [A-Za-z]:[\\/]*) ;;
-         *)
-           $echo "$modename: only absolute run-paths are allowed" 1>&2
-           exit $EXIT_FAILURE
-           ;;
-         esac
-         if test "$prev" = rpath; then
-           case "$rpath " in
-           *" $arg "*) ;;
-           *) rpath="$rpath $arg" ;;
-           esac
-         else
-           case "$xrpath " in
-           *" $arg "*) ;;
-           *) xrpath="$xrpath $arg" ;;
-           esac
-         fi
-         prev=
-         continue
-         ;;
-       xcompiler)
-         compiler_flags="$compiler_flags $qarg"
-         prev=
-         compile_command="$compile_command $qarg"
-         finalize_command="$finalize_command $qarg"
-         continue
-         ;;
-       xlinker)
-         linker_flags="$linker_flags $qarg"
-         compiler_flags="$compiler_flags $wl$qarg"
-         prev=
-         compile_command="$compile_command $wl$qarg"
-         finalize_command="$finalize_command $wl$qarg"
-         continue
-         ;;
-       xcclinker)
-         linker_flags="$linker_flags $qarg"
-         compiler_flags="$compiler_flags $qarg"
-         prev=
-         compile_command="$compile_command $qarg"
-         finalize_command="$finalize_command $qarg"
-         continue
-         ;;
-       shrext)
-         shrext_cmds="$arg"
-         prev=
-         continue
-         ;;
-       darwin_framework|darwin_framework_skip)
-         test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg"
-         compile_command="$compile_command $arg"
-         finalize_command="$finalize_command $arg"
-         prev=
-         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
-         compile_command="$compile_command $link_static_flag"
-         finalize_command="$finalize_command $link_static_flag"
-       fi
-       continue
-       ;;
-
-      -allow-undefined)
-       # FIXME: remove this flag sometime in the future.
-       $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
-       continue
-       ;;
-
-      -avoid-version)
-       avoid_version=yes
-       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
-         $echo "$modename: more than one -exported-symbols argument is not allowed"
-         exit $EXIT_FAILURE
-       fi
-       if test "X$arg" = "X-export-symbols"; then
-         prev=expsyms
-       else
-         prev=expsyms_regex
-       fi
-       continue
-       ;;
-
-      -framework|-arch|-isysroot)
-       case " $CC " in
-         *" ${arg} ${1} "* | *" ${arg} ${1} "*) 
-               prev=darwin_framework_skip ;;
-         *) compiler_flags="$compiler_flags $arg"
-            prev=darwin_framework ;;
-       esac
-       compile_command="$compile_command $arg"
-       finalize_command="$finalize_command $arg"
-       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*)
-         compile_command="$compile_command $arg"
-         finalize_command="$finalize_command $arg"
-         ;;
-       esac
-       continue
-       ;;
-
-      -L*)
-       dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
-       # We need an absolute path.
-       case $dir in
-       [\\/]* | [A-Za-z]:[\\/]*) ;;
-       *)
-         absdir=`cd "$dir" && pwd`
-         if test -z "$absdir"; then
-           $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
-           absdir="$dir"
-           notinst_path="$notinst_path $dir"
-         fi
-         dir="$absdir"
-         ;;
-       esac
-       case "$deplibs " in
-       *" -L$dir "*) ;;
-       *)
-         deplibs="$deplibs -L$dir"
-         lib_search_path="$lib_search_path $dir"
-         ;;
-       esac
-       case $host in
-       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
-         testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'`
-         case :$dllsearchpath: in
-         *":$dir:"*) ;;
-         *) dllsearchpath="$dllsearchpath:$dir";;
-         esac
-         case :$dllsearchpath: in
-         *":$testbindir:"*) ;;
-         *) dllsearchpath="$dllsearchpath:$testbindir";;
-         esac
-         ;;
-       esac
-       continue
-       ;;
-
-      -l*)
-       if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
-         case $host in
-         *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*)
-           # 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$arg" = "X-lc" && continue
-           ;;
-         *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
-           # Do not include libc due to us having libc/libc_r.
-           test "X$arg" = "X-lc" && continue
-           ;;
-         *-*-rhapsody* | *-*-darwin1.[012])
-           # Rhapsody C and math libraries are in the System framework
-           deplibs="$deplibs -framework System"
-           continue
-           ;;
-         *-*-sco3.2v5* | *-*-sco5v6*)
-           # Causes problems with __ctype
-           test "X$arg" = "X-lc" && continue
-           ;;
-         *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
-           # Compiler inserts libc in the correct place for threads to work
-           test "X$arg" = "X-lc" && continue
-           ;;
-         esac
-       elif test "X$arg" = "X-lc_r"; then
-        case $host in
-        *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
-          # Do not include libc_r directly, use -pthread flag.
-          continue
-          ;;
-        esac
-       fi
-       deplibs="$deplibs $arg"
-       continue
-       ;;
-
-      # Tru64 UNIX uses -model [arg] to determine the layout of C++
-      # classes, name mangling, and exception handling.
-      -model)
-       compile_command="$compile_command $arg"
-       compiler_flags="$compiler_flags $arg"
-       finalize_command="$finalize_command $arg"
-       prev=xcompiler
-       continue
-       ;;
-
-     -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
-       compiler_flags="$compiler_flags $arg"
-       compile_command="$compile_command $arg"
-       finalize_command="$finalize_command $arg"
-       continue
-       ;;
-
-      -multi_module)
-       single_module="${wl}-multi_module"
-       continue
-       ;;
-
-      -module)
-       module=yes
-       continue
-       ;;
-
-      # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
-      # -r[0-9][0-9]* specifies the processor on the SGI compiler
-      # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
-      # +DA*, +DD* enable 64-bit mode on the HP compiler
-      # -q* pass through compiler args for the IBM compiler
-      # -m* pass through architecture-specific compiler args for GCC
-      # -m*, -t[45]*, -txscale* pass through architecture-specific
-      # compiler args for GCC
-      # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
-      # -F/path gives path to uninstalled frameworks, gcc on darwin
-      # @file GCC response files
-      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
-      -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
-
-       # Unknown arguments in both finalize_command and compile_command need
-       # to be aesthetically quoted because they are evaled later.
-       arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-       case $arg in
-       *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \   ]*|*]*|"")
-         arg="\"$arg\""
-         ;;
-       esac
-        compile_command="$compile_command $arg"
-        finalize_command="$finalize_command $arg"
-        compiler_flags="$compiler_flags $arg"
-        continue
-        ;;
-
-      -shrext)
-       prev=shrext
-       continue
-       ;;
-
-      -no-fast-install)
-       fast_install=no
-       continue
-       ;;
-
-      -no-install)
-       case $host in
-       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin*)
-         # The PATH hackery in wrapper scripts is required on Windows
-         # and Darwin in order for the loader to find any dlls it needs.
-         $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
-         $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
-         fast_install=no
-         ;;
-       *) no_install=yes ;;
-       esac
-       continue
-       ;;
-
-      -no-undefined)
-       allow_undefined=no
-       continue
-       ;;
-
-      -objectlist)
-       prev=objectlist
-       continue
-       ;;
-
-      -o) prev=output ;;
-
-      -precious-files-regex)
-       prev=precious_regex
-       continue
-       ;;
-
-      -release)
-       prev=release
-       continue
-       ;;
-
-      -rpath)
-       prev=rpath
-       continue
-       ;;
-
-      -R)
-       prev=xrpath
-       continue
-       ;;
-
-      -R*)
-       dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
-       # We need an absolute path.
-       case $dir in
-       [\\/]* | [A-Za-z]:[\\/]*) ;;
-       *)
-         $echo "$modename: only absolute run-paths are allowed" 1>&2
-         exit $EXIT_FAILURE
-         ;;
-       esac
-       case "$xrpath " in
-       *" $dir "*) ;;
-       *) xrpath="$xrpath $dir" ;;
-       esac
-       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
-       ;;
-
-      -Wc,*)
-       args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
-       arg=
-       save_ifs="$IFS"; IFS=','
-       for flag in $args; do
-         IFS="$save_ifs"
-         case $flag in
-           *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \       ]*|*]*|"")
-           flag="\"$flag\""
-           ;;
-         esac
-         arg="$arg $wl$flag"
-         compiler_flags="$compiler_flags $flag"
-       done
-       IFS="$save_ifs"
-       arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
-       ;;
-
-      -Wl,*)
-       args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
-       arg=
-       save_ifs="$IFS"; IFS=','
-       for flag in $args; do
-         IFS="$save_ifs"
-         case $flag in
-           *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \       ]*|*]*|"")
-           flag="\"$flag\""
-           ;;
-         esac
-         arg="$arg $wl$flag"
-         compiler_flags="$compiler_flags $wl$flag"
-         linker_flags="$linker_flags $flag"
-       done
-       IFS="$save_ifs"
-       arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
-       ;;
-
-      -Xcompiler)
-       prev=xcompiler
-       continue
-       ;;
-
-      -Xlinker)
-       prev=xlinker
-       continue
-       ;;
-
-      -XCClinker)
-       prev=xcclinker
-       continue
-       ;;
-
-      # Some other compiler flag.
-      -* | +*)
-       # Unknown arguments in both finalize_command and compile_command need
-       # to be aesthetically quoted because they are evaled later.
-       arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-       case $arg in
-       *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \   ]*|*]*|"")
-         arg="\"$arg\""
-         ;;
-       esac
-       ;;
-
-      *.$objext)
-       # A standard object.
-       objs="$objs $arg"
-       ;;
-
-      *.lo)
-       # A libtool-controlled object.
-
-       # Check to see that this really is a libtool object.
-       if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-         pic_object=
-         non_pic_object=
-
-         # Read the .lo file
-         # If there is no directory component, then add one.
-         case $arg in
-         */* | *\\*) . $arg ;;
-         *) . ./$arg ;;
-         esac
-
-         if test -z "$pic_object" || \
-            test -z "$non_pic_object" ||
-            test "$pic_object" = none && \
-            test "$non_pic_object" = none; then
-           $echo "$modename: cannot find name of object for \`$arg'" 1>&2
-           exit $EXIT_FAILURE
-         fi
-
-         # Extract subdirectory from the argument.
-         xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
-         if test "X$xdir" = "X$arg"; then
-           xdir=
-         else
-           xdir="$xdir/"
-         fi
-
-         if test "$pic_object" != none; then
-           # Prepend the subdirectory the object is found in.
-           pic_object="$xdir$pic_object"
-
-           if test "$prev" = dlfiles; then
-             if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
-               dlfiles="$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 "$prev" = dlprefiles; then
-             # Preload the old-style object.
-             dlprefiles="$dlprefiles $pic_object"
-             prev=
-           fi
-
-           # A PIC object.
-           libobjs="$libobjs $pic_object"
-           arg="$pic_object"
-         fi
-
-         # Non-PIC object.
-         if test "$non_pic_object" != none; then
-           # Prepend the subdirectory the object is found in.
-           non_pic_object="$xdir$non_pic_object"
-
-           # A standard non-PIC object
-           non_pic_objects="$non_pic_objects $non_pic_object"
-           if test -z "$pic_object" || test "$pic_object" = none ; 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"
-           non_pic_objects="$non_pic_objects $non_pic_object"
-         fi
-       else
-         # Only an error if not doing a dry-run.
-         if test -z "$run"; then
-           $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
-           exit $EXIT_FAILURE
-         else
-           # Dry-run case.
-
-           # Extract subdirectory from the argument.
-           xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
-           if test "X$xdir" = "X$arg"; then
-             xdir=
-           else
-             xdir="$xdir/"
-           fi
-
-           pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
-           non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
-           libobjs="$libobjs $pic_object"
-           non_pic_objects="$non_pic_objects $non_pic_object"
-         fi
-       fi
-       ;;
-
-      *.$libext)
-       # An archive.
-       deplibs="$deplibs $arg"
-       old_deplibs="$old_deplibs $arg"
-       continue
-       ;;
-
-      *.la)
-       # A libtool-controlled library.
-
-       if test "$prev" = dlfiles; then
-         # This library was specified with -dlopen.
-         dlfiles="$dlfiles $arg"
-         prev=
-       elif test "$prev" = dlprefiles; then
-         # The library was specified with -dlpreopen.
-         dlprefiles="$dlprefiles $arg"
-         prev=
-       else
-         deplibs="$deplibs $arg"
-       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.
-       arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-       case $arg in
-       *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \   ]*|*]*|"")
-         arg="\"$arg\""
-         ;;
-       esac
-       ;;
-      esac # arg
-
-      # Now actually substitute the argument into the commands.
-      if test -n "$arg"; then
-       compile_command="$compile_command $arg"
-       finalize_command="$finalize_command $arg"
-      fi
-    done # argument parsing loop
-
-    if test -n "$prev"; then
-      $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
-      $echo "$help" 1>&2
-      exit $EXIT_FAILURE
-    fi
-
-    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
-      eval arg=\"$export_dynamic_flag_spec\"
-      compile_command="$compile_command $arg"
-      finalize_command="$finalize_command $arg"
-    fi
-
-    oldlibs=
-    # calculate the name of the file, without its directory
-    outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
-    libobjs_save="$libobjs"
-
-    if test -n "$shlibpath_var"; then
-      # get the directories listed in $shlibpath_var
-      eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'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\"
-
-    output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
-    if test "X$output_objdir" = "X$output"; then
-      output_objdir="$objdir"
-    else
-      output_objdir="$output_objdir/$objdir"
-    fi
-    # Create the object directory.
-    if test ! -d "$output_objdir"; then
-      $show "$mkdir $output_objdir"
-      $run $mkdir $output_objdir
-      exit_status=$?
-      if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then
-       exit $exit_status
-      fi
-    fi
-
-    # Determine the type of output
-    case $output in
-    "")
-      $echo "$modename: you must specify an output file" 1>&2
-      $echo "$help" 1>&2
-      exit $EXIT_FAILURE
-      ;;
-    *.$libext) linkmode=oldlib ;;
-    *.lo | *.$objext) linkmode=obj ;;
-    *.la) linkmode=lib ;;
-    *) linkmode=prog ;; # Anything else should be a program.
-    esac
-
-    case $host in
-    *cygwin* | *mingw* | *pw32*)
-      # don't eliminate duplications in $postdeps and $predeps
-      duplicate_compiler_generated_deps=yes
-      ;;
-    *)
-      duplicate_compiler_generated_deps=$duplicate_deps
-      ;;
-    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 test "X$duplicate_deps" = "Xyes" ; then
-       case "$libs " in
-       *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-       esac
-      fi
-      libs="$libs $deplib"
-    done
-
-    if test "$linkmode" = lib; 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 test "X$duplicate_compiler_generated_deps" = "Xyes" ; then
-       for pre_post_dep in $predeps $postdeps; do
-         case "$pre_post_deps " in
-         *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
-         esac
-         pre_post_deps="$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
-    case $linkmode in
-    lib)
-       passes="conv link"
-       for file in $dlfiles $dlprefiles; do
-         case $file in
-         *.la) ;;
-         *)
-           $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
-           exit $EXIT_FAILURE
-           ;;
-         esac
-       done
-       ;;
-    prog)
-       compile_deplibs=
-       finalize_deplibs=
-       alldeplibs=no
-       newdlfiles=
-       newdlprefiles=
-       passes="conv scan dlopen dlpreopen link"
-       ;;
-    *)  passes="conv"
-       ;;
-    esac
-    for pass in $passes; do
-      if test "$linkmode,$pass" = "lib,link" ||
-        test "$linkmode,$pass" = "prog,scan"; then
-       libs="$deplibs"
-       deplibs=
-      fi
-      if test "$linkmode" = prog; 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 "$pass" = dlopen; then
-       # Collect dlpreopened libraries
-       save_deplibs="$deplibs"
-       deplibs=
-      fi
-      for deplib in $libs; do
-       lib=
-       found=no
-       case $deplib in
-       -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
-         if test "$linkmode,$pass" = "prog,link"; then
-           compile_deplibs="$deplib $compile_deplibs"
-           finalize_deplibs="$deplib $finalize_deplibs"
-         else
-           compiler_flags="$compiler_flags $deplib"
-         fi
-         continue
-         ;;
-       -l*)
-         if test "$linkmode" != lib && test "$linkmode" != prog; then
-           $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2
-           continue
-         fi
-         name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
-         if test "$linkmode" = lib; 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 "$search_ext" = ".la"; then
-                 found=yes
-               else
-                 found=no
-               fi
-               break 2
-             fi
-           done
-         done
-         if test "$found" != yes; then
-           # deplib doesn't seem to be a libtool library
-           if test "$linkmode,$pass" = "prog,link"; then
-             compile_deplibs="$deplib $compile_deplibs"
-             finalize_deplibs="$deplib $finalize_deplibs"
-           else
-             deplibs="$deplib $deplibs"
-             test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
-           fi
-           continue
-         else # 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 "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-             case " $predeps $postdeps " in
-             *" $deplib "*)
-               if (${SED} -e '2q' $lib |
-                    grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-                 library_names=
-                 old_library=
-                 case $lib in
-                 */* | *\\*) . $lib ;;
-                 *) . ./$lib ;;
-                 esac
-                 for l in $old_library $library_names; do
-                   ll="$l"
-                 done
-                 if test "X$ll" = "X$old_library" ; then # only static version available
-                   found=no
-                   ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
-                   test "X$ladir" = "X$lib" && ladir="."
-                   lib=$ladir/$old_library
-                   if test "$linkmode,$pass" = "prog,link"; then
-                     compile_deplibs="$deplib $compile_deplibs"
-                     finalize_deplibs="$deplib $finalize_deplibs"
-                   else
-                     deplibs="$deplib $deplibs"
-                     test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
-                   fi
-                   continue
-                 fi
-               fi
-               ;;
-             *) ;;
-             esac
-           fi
-         fi
-         ;; # -l
-       -L*)
-         case $linkmode in
-         lib)
-           deplibs="$deplib $deplibs"
-           test "$pass" = conv && continue
-           newdependency_libs="$deplib $newdependency_libs"
-           newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
-           ;;
-         prog)
-           if test "$pass" = conv; then
-             deplibs="$deplib $deplibs"
-             continue
-           fi
-           if test "$pass" = scan; then
-             deplibs="$deplib $deplibs"
-           else
-             compile_deplibs="$deplib $compile_deplibs"
-             finalize_deplibs="$deplib $finalize_deplibs"
-           fi
-           newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
-           ;;
-         *)
-           $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2
-           ;;
-         esac # linkmode
-         continue
-         ;; # -L
-       -R*)
-         if test "$pass" = link; then
-           dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
-           # Make sure the xrpath contains only unique directories.
-           case "$xrpath " in
-           *" $dir "*) ;;
-           *) xrpath="$xrpath $dir" ;;
-           esac
-         fi
-         deplibs="$deplib $deplibs"
-         continue
-         ;;
-       *.la) lib="$deplib" ;;
-       *.$libext)
-         if test "$pass" = conv; then
-           deplibs="$deplib $deplibs"
-           continue
-         fi
-         case $linkmode in
-         lib)
-           valid_a_lib=no
-           case $deplibs_check_method in
-             match_pattern*)
-               set dummy $deplibs_check_method
-               match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
-               if eval $echo \"$deplib\" 2>/dev/null \
-                   | $SED 10q \
-                   | $EGREP "$match_pattern_regex" > /dev/null; then
-                 valid_a_lib=yes
-               fi
-               ;;
-             pass_all)
-               valid_a_lib=yes
-               ;;
-            esac
-           if test "$valid_a_lib" != yes; then
-             $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 used here."
-           else
-             $echo
-             $echo "*** Warning: Linking the shared library $output against the"
-             $echo "*** static library $deplib is not portable!"
-             deplibs="$deplib $deplibs"
-           fi
-           continue
-           ;;
-         prog)
-           if test "$pass" != link; then
-             deplibs="$deplib $deplibs"
-           else
-             compile_deplibs="$deplib $compile_deplibs"
-             finalize_deplibs="$deplib $finalize_deplibs"
-           fi
-           continue
-           ;;
-         esac # linkmode
-         ;; # *.$libext
-       *.lo | *.$objext)
-         if test "$pass" = conv; then
-           deplibs="$deplib $deplibs"
-         elif test "$linkmode" = prog; then
-           if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
-             # If there is no dlopen support or we're linking statically,
-             # we need to preload.
-             newdlprefiles="$newdlprefiles $deplib"
-             compile_deplibs="$deplib $compile_deplibs"
-             finalize_deplibs="$deplib $finalize_deplibs"
-           else
-             newdlfiles="$newdlfiles $deplib"
-           fi
-         fi
-         continue
-         ;;
-       %DEPLIBS%)
-         alldeplibs=yes
-         continue
-         ;;
-       esac # case $deplib
-       if test "$found" = yes || test -f "$lib"; then :
-       else
-         $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2
-         exit $EXIT_FAILURE
-       fi
-
-       # Check to see that this really is a libtool archive.
-       if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
-       else
-         $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
-         exit $EXIT_FAILURE
-       fi
-
-       ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
-       test "X$ladir" = "X$lib" && ladir="."
-
-       dlname=
-       dlopen=
-       dlpreopen=
-       libdir=
-       library_names=
-       old_library=
-       # 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
-       case $lib in
-       */* | *\\*) . $lib ;;
-       *) . ./$lib ;;
-       esac
-
-       if test "$linkmode,$pass" = "lib,link" ||
-          test "$linkmode,$pass" = "prog,scan" ||
-          { test "$linkmode" != prog && test "$linkmode" != lib; }; then
-         test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
-         test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
-       fi
-
-       if test "$pass" = conv; then
-         # Only check for convenience libraries
-         deplibs="$lib $deplibs"
-         if test -z "$libdir"; then
-           if test -z "$old_library"; then
-             $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
-             exit $EXIT_FAILURE
-           fi
-           # It is a libtool convenience library, so add in its objects.
-           convenience="$convenience $ladir/$objdir/$old_library"
-           old_convenience="$old_convenience $ladir/$objdir/$old_library"
-           tmp_libs=
-           for deplib in $dependency_libs; do
-             deplibs="$deplib $deplibs"
-              if test "X$duplicate_deps" = "Xyes" ; then
-               case "$tmp_libs " in
-               *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-               esac
-              fi
-             tmp_libs="$tmp_libs $deplib"
-           done
-         elif test "$linkmode" != prog && test "$linkmode" != lib; then
-           $echo "$modename: \`$lib' is not a convenience library" 1>&2
-           exit $EXIT_FAILURE
-         fi
-         continue
-       fi # $pass = conv
-
-
-       # Get the name of the library we link against.
-       linklib=
-       for l in $old_library $library_names; do
-         linklib="$l"
-       done
-       if test -z "$linklib"; then
-         $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
-         exit $EXIT_FAILURE
-       fi
-
-       # This library was specified with -dlopen.
-       if test "$pass" = dlopen; then
-         if test -z "$libdir"; then
-           $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
-           exit $EXIT_FAILURE
-         fi
-         if test -z "$dlname" ||
-            test "$dlopen_support" != yes ||
-            test "$build_libtool_libs" = no; 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.
-           dlprefiles="$dlprefiles $lib $dependency_libs"
-         else
-           newdlfiles="$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
-           $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
-           $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
-           abs_ladir="$ladir"
-         fi
-         ;;
-       esac
-       laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
-
-       # Find the relevant object directory and library name.
-       if test "X$installed" = Xyes; then
-         if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
-           $echo "$modename: warning: library \`$lib' was moved." 1>&2
-           dir="$ladir"
-           absdir="$abs_ladir"
-           libdir="$abs_ladir"
-         else
-           dir="$libdir"
-           absdir="$libdir"
-         fi
-         test "X$hardcode_automatic" = Xyes && 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
-           notinst_path="$notinst_path $abs_ladir"
-         else
-           dir="$ladir/$objdir"
-           absdir="$abs_ladir/$objdir"
-           # Remove this search path later
-           notinst_path="$notinst_path $abs_ladir"
-         fi
-       fi # $installed = yes
-       name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
-
-       # This library was specified with -dlpreopen.
-       if test "$pass" = dlpreopen; then
-         if test -z "$libdir"; then
-           $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
-           exit $EXIT_FAILURE
-         fi
-         # Prefer using a static library (so that no silly _DYNAMIC symbols
-         # are required to link).
-         if test -n "$old_library"; then
-           newdlprefiles="$newdlprefiles $dir/$old_library"
-         # Otherwise, use the dlname, so that lt_dlopen finds it.
-         elif test -n "$dlname"; then
-           newdlprefiles="$newdlprefiles $dir/$dlname"
-         else
-           newdlprefiles="$newdlprefiles $dir/$linklib"
-         fi
-       fi # $pass = dlpreopen
-
-       if test -z "$libdir"; then
-         # Link the convenience library
-         if test "$linkmode" = lib; then
-           deplibs="$dir/$old_library $deplibs"
-         elif test "$linkmode,$pass" = "prog,link"; 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 "$linkmode" = prog && test "$pass" != link; then
-         newlib_search_path="$newlib_search_path $ladir"
-         deplibs="$lib $deplibs"
-
-         linkalldeplibs=no
-         if test "$link_all_deplibs" != no || test -z "$library_names" ||
-            test "$build_libtool_libs" = no; then
-           linkalldeplibs=yes
-         fi
-
-         tmp_libs=
-         for deplib in $dependency_libs; do
-           case $deplib in
-           -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
-           esac
-           # Need to link against all dependency_libs?
-           if test "$linkalldeplibs" = yes; then
-             deplibs="$deplib $deplibs"
-           else
-             # Need to hardcode shared library paths
-             # or/and link against static libraries
-             newdependency_libs="$deplib $newdependency_libs"
-           fi
-           if test "X$duplicate_deps" = "Xyes" ; then
-             case "$tmp_libs " in
-             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-             esac
-           fi
-           tmp_libs="$tmp_libs $deplib"
-         done # for deplib
-         continue
-       fi # $linkmode = prog...
-
-       if test "$linkmode,$pass" = "prog,link"; then
-         if test -n "$library_names" &&
-            { { test "$prefer_static_libs" = no ||
-                test "$prefer_static_libs,$installed" = "built,yes"; } ||
-              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
-             *" $dir "*) ;;
-             *" $absdir "*) ;;
-             *) temp_rpath="$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 "*) ;;
-             *) compile_rpath="$compile_rpath $absdir"
-             esac
-             ;;
-           esac
-           case " $sys_lib_dlsearch_path " in
-           *" $libdir "*) ;;
-           *)
-             case "$finalize_rpath " in
-             *" $libdir "*) ;;
-             *) finalize_rpath="$finalize_rpath $libdir"
-             esac
-             ;;
-           esac
-         fi # $linkmode,$pass = prog,link...
-
-         if test "$alldeplibs" = yes &&
-            { test "$deplibs_check_method" = pass_all ||
-              { test "$build_libtool_libs" = yes &&
-                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 "$use_static_libs" = built && test "$installed" = yes ; then
-         use_static_libs=no
-       fi
-       if test -n "$library_names" &&
-          { test "$use_static_libs" = no || test -z "$old_library"; }; then
-         if test "$installed" = no; then
-           notinst_deplibs="$notinst_deplibs $lib"
-           need_relink=yes
-         fi
-         # This is a shared library
-
-         # Warn about portability, can't link against -module's on
-         # some systems (darwin)
-         if test "$shouldnotlink" = yes && test "$pass" = link ; then
-           $echo
-           if test "$linkmode" = prog; 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 "$linkmode" = lib &&
-            test "$hardcode_into_libs" = yes; 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 "*) ;;
-             *) compile_rpath="$compile_rpath $absdir"
-             esac
-             ;;
-           esac
-           case " $sys_lib_dlsearch_path " in
-           *" $libdir "*) ;;
-           *)
-             case "$finalize_rpath " in
-             *" $libdir "*) ;;
-             *) finalize_rpath="$finalize_rpath $libdir"
-             esac
-             ;;
-           esac
-         fi
-
-         if test -n "$old_archive_from_expsyms_cmds"; then
-           # figure out the soname
-           set dummy $library_names
-           realname="$2"
-           shift; 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*)
-               major=`expr $current - $age`
-               versuffix="-$major"
-               ;;
-             esac
-             eval soname=\"$soname_spec\"
-           else
-             soname="$realname"
-           fi
-
-           # Make a new name for the extract_expsyms_cmds to use
-           soroot="$soname"
-           soname=`$echo $soroot | ${SED} -e 's/^.*\///'`
-           newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a"
-
-           # If the library has no export list, then create one now
-           if test -f "$output_objdir/$soname-def"; then :
-           else
-             $show "extracting exported symbol list from \`$soname'"
-             save_ifs="$IFS"; IFS='~'
-             cmds=$extract_expsyms_cmds
-             for cmd in $cmds; do
-               IFS="$save_ifs"
-               eval cmd=\"$cmd\"
-               $show "$cmd"
-               $run eval "$cmd" || exit $?
-             done
-             IFS="$save_ifs"
-           fi
-
-           # Create $newlib
-           if test -f "$output_objdir/$newlib"; then :; else
-             $show "generating import library for \`$soname'"
-             save_ifs="$IFS"; IFS='~'
-             cmds=$old_archive_from_expsyms_cmds
-             for cmd in $cmds; do
-               IFS="$save_ifs"
-               eval cmd=\"$cmd\"
-               $show "$cmd"
-               $run eval "$cmd" || exit $?
-             done
-             IFS="$save_ifs"
-           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 "$linkmode" = prog || test "$mode" != relink; then
-           add_shlibpath=
-           add_dir=
-           add=
-           lib_linked=yes
-           case $hardcode_action in
-           immediate | unsupported)
-             if test "$hardcode_direct" = no; 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 module then we can not link against
-                   # it, someone is ignoring the new warnings I added
-                   if /usr/bin/file -L $add 2> /dev/null |
-                      $EGREP ": [^:]* bundle" >/dev/null ; 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
-                   fi
-               esac
-             elif test "$hardcode_minus_L" = no; then
-               case $host in
-               *-*-sunos*) add_shlibpath="$dir" ;;
-               esac
-               add_dir="-L$dir"
-               add="-l$name"
-             elif test "$hardcode_shlibpath_var" = no; then
-               add_shlibpath="$dir"
-               add="-l$name"
-             else
-               lib_linked=no
-             fi
-             ;;
-           relink)
-             if test "$hardcode_direct" = yes; then
-               add="$dir/$linklib"
-             elif test "$hardcode_minus_L" = yes; then
-               add_dir="-L$dir"
-               # Try looking first in the location we're being installed to.
-               if test -n "$inst_prefix_dir"; then
-                 case $libdir in
-                   [\\/]*)
-                     add_dir="$add_dir -L$inst_prefix_dir$libdir"
-                     ;;
-                 esac
-               fi
-               add="-l$name"
-             elif test "$hardcode_shlibpath_var" = yes; then
-               add_shlibpath="$dir"
-               add="-l$name"
-             else
-               lib_linked=no
-             fi
-             ;;
-           *) lib_linked=no ;;
-           esac
-
-           if test "$lib_linked" != yes; then
-             $echo "$modename: configuration error: unsupported hardcode properties"
-             exit $EXIT_FAILURE
-           fi
-
-           if test -n "$add_shlibpath"; then
-             case :$compile_shlibpath: in
-             *":$add_shlibpath:"*) ;;
-             *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
-             esac
-           fi
-           if test "$linkmode" = prog; 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 "$hardcode_direct" != yes && \
-                test "$hardcode_minus_L" != yes && \
-                test "$hardcode_shlibpath_var" = yes; then
-               case :$finalize_shlibpath: in
-               *":$libdir:"*) ;;
-               *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
-               esac
-             fi
-           fi
-         fi
-
-         if test "$linkmode" = prog || test "$mode" = relink; then
-           add_shlibpath=
-           add_dir=
-           add=
-           # Finalize command for both is simple: just hardcode it.
-           if test "$hardcode_direct" = yes; then
-             add="$libdir/$linklib"
-           elif test "$hardcode_minus_L" = yes; then
-             add_dir="-L$libdir"
-             add="-l$name"
-           elif test "$hardcode_shlibpath_var" = yes; then
-             case :$finalize_shlibpath: in
-             *":$libdir:"*) ;;
-             *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
-             esac
-             add="-l$name"
-           elif test "$hardcode_automatic" = yes; 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
-                 [\\/]*)
-                   add_dir="$add_dir -L$inst_prefix_dir$libdir"
-                   ;;
-               esac
-             fi
-             add="-l$name"
-           fi
-
-           if test "$linkmode" = prog; 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 "$linkmode" = prog; 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 "$hardcode_direct" != unsupported; 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 "$build_libtool_libs" = yes; then
-         # Not a shared library
-         if test "$deplibs_check_method" != pass_all; 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 can not 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 "$module" = yes; 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 "$build_old_libs" = no; 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 "$linkmode" = lib; then
-         if test -n "$dependency_libs" &&
-            { test "$hardcode_into_libs" != yes ||
-              test "$build_old_libs" = yes ||
-              test "$link_static" = yes; }; then
-           # Extract -R from dependency_libs
-           temp_deplibs=
-           for libdir in $dependency_libs; do
-             case $libdir in
-             -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
-                  case " $xrpath " in
-                  *" $temp_xrpath "*) ;;
-                  *) xrpath="$xrpath $temp_xrpath";;
-                  esac;;
-             *) temp_deplibs="$temp_deplibs $libdir";;
-             esac
-           done
-           dependency_libs="$temp_deplibs"
-         fi
-
-         newlib_search_path="$newlib_search_path $absdir"
-         # Link against this library
-         test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
-         # ... and its dependency_libs
-         tmp_libs=
-         for deplib in $dependency_libs; do
-           newdependency_libs="$deplib $newdependency_libs"
-           if test "X$duplicate_deps" = "Xyes" ; then
-             case "$tmp_libs " in
-             *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
-             esac
-           fi
-           tmp_libs="$tmp_libs $deplib"
-         done
-
-         if test "$link_all_deplibs" != no; then
-           # Add the search paths of all dependency libraries
-           for deplib in $dependency_libs; do
-             case $deplib in
-             -L*) path="$deplib" ;;
-             *.la)
-               dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
-               test "X$dir" = "X$deplib" && dir="."
-               # We need an absolute path.
-               case $dir in
-               [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
-               *)
-                 absdir=`cd "$dir" && pwd`
-                 if test -z "$absdir"; then
-                   $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
-                   absdir="$dir"
-                 fi
-                 ;;
-               esac
-               if grep "^installed=no" $deplib > /dev/null; then
-                 path="$absdir/$objdir"
-               else
-                 eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
-                 if test -z "$libdir"; then
-                   $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
-                   exit $EXIT_FAILURE
-                 fi
-                 if test "$absdir" != "$libdir"; then
-                   $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
-                 fi
-                 path="$absdir"
-               fi
-               depdepl=
-               case $host in
-               *-*-darwin*)
-                 # we do not want to link against static libs,
-                 # but need to link against shared
-                 eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
-                 eval deplibdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
-                 if test -n "$deplibrary_names" ; then
-                   for tmp in $deplibrary_names ; do
-                     depdepl=$tmp
-                   done
-                   if test -f "$deplibdir/$depdepl" ; then
-                     depdepl="$deplibdir/$depdepl"
-                   elif test -f "$path/$depdepl" ; then
-                     depdepl="$path/$depdepl"
-                   else
-                     # Can't find it, oh well...
-                     depdepl=
-                   fi
-                   # do not add paths which are already there
-                   case " $newlib_search_path " in
-                   *" $path "*) ;;
-                   *) newlib_search_path="$newlib_search_path $path";;
-                   esac
-                 fi
-                 path=""
-                 ;;
-               *)
-                 path="-L$path"
-                 ;;
-               esac
-               ;;
-             -l*)
-               case $host in
-               *-*-darwin*)
-                 # Again, we only want to link against shared libraries
-                 eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"`
-                 for tmp in $newlib_search_path ; do
-                   if test -f "$tmp/lib$tmp_libs.dylib" ; then
-                     eval depdepl="$tmp/lib$tmp_libs.dylib"
-                     break
-                   fi
-                 done
-                 path=""
-                 ;;
-               *) continue ;;
-               esac
-               ;;
-             *) continue ;;
-             esac
-             case " $deplibs " in
-             *" $path "*) ;;
-             *) deplibs="$path $deplibs" ;;
-             esac
-             case " $deplibs " in
-             *" $depdepl "*) ;;
-             *) deplibs="$depdepl $deplibs" ;;
-             esac
-           done
-         fi # link_all_deplibs != no
-       fi # linkmode = lib
-      done # for deplib in $libs
-      dependency_libs="$newdependency_libs"
-      if test "$pass" = dlpreopen; then
-       # Link the dlpreopened libraries before other libraries
-       for deplib in $save_deplibs; do
-         deplibs="$deplib $deplibs"
-       done
-      fi
-      if test "$pass" != dlopen; then
-       if test "$pass" != conv; then
-         # 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 "*) ;;
-           *) lib_search_path="$lib_search_path $dir" ;;
-           esac
-         done
-         newlib_search_path=
-       fi
-
-       if test "$linkmode,$pass" != "prog,link"; then
-         vars="deplibs"
-       else
-         vars="compile_deplibs finalize_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 "*) ;;
-             *) tmp_libs="$tmp_libs $deplib" ;;
-             esac
-             ;;
-           *) tmp_libs="$tmp_libs $deplib" ;;
-           esac
-         done
-         eval $var=\"$tmp_libs\"
-       done # for var
-      fi
-      # 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
-         tmp_libs="$tmp_libs $i"
-       fi
-      done
-      dependency_libs=$tmp_libs
-    done # for pass
-    if test "$linkmode" = prog; then
-      dlfiles="$newdlfiles"
-      dlprefiles="$newdlprefiles"
-    fi
-
-    case $linkmode in
-    oldlib)
-      case " $deplibs" in
-      *\ -l* | *\ -L*)
-       $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 ;;
-      esac
-
-      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-       $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
-      fi
-
-      if test -n "$rpath"; then
-       $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
-      fi
-
-      if test -n "$xrpath"; then
-       $echo "$modename: warning: \`-R' is ignored for archives" 1>&2
-      fi
-
-      if test -n "$vinfo"; then
-       $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2
-      fi
-
-      if test -n "$release"; then
-       $echo "$modename: warning: \`-release' is ignored for archives" 1>&2
-      fi
-
-      if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
-       $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
-      fi
-
-      # Now set the variables for building old libraries.
-      build_libtool_libs=no
-      oldlibs="$output"
-      objs="$objs$old_deplibs"
-      ;;
-
-    lib)
-      # Make sure we only generate libraries of the form `libNAME.la'.
-      case $outputname in
-      lib*)
-       name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
-       eval shared_ext=\"$shrext_cmds\"
-       eval libname=\"$libname_spec\"
-       ;;
-      *)
-       if test "$module" = no; then
-         $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
-         $echo "$help" 1>&2
-         exit $EXIT_FAILURE
-       fi
-       if test "$need_lib_prefix" != no; then
-         # Add the "lib" prefix for modules if required
-         name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
-         eval shared_ext=\"$shrext_cmds\"
-         eval libname=\"$libname_spec\"
-       else
-         libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
-       fi
-       ;;
-      esac
-
-      if test -n "$objs"; then
-       if test "$deplibs_check_method" != pass_all; then
-         $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
-         exit $EXIT_FAILURE
-       else
-         $echo
-         $echo "*** Warning: Linking the shared library $output against the non-libtool"
-         $echo "*** objects $objs is not portable!"
-         libobjs="$libobjs $objs"
-       fi
-      fi
-
-      if test "$dlself" != no; then
-       $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
-      fi
-
-      set dummy $rpath
-      if test "$#" -gt 2; then
-       $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
-      fi
-      install_libdir="$2"
-
-      oldlibs=
-      if test -z "$rpath"; then
-       if test "$build_libtool_libs" = yes; 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
-
-       if test -n "$vinfo"; then
-         $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2
-       fi
-
-       if test -n "$release"; then
-         $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
-       fi
-      else
-
-       # Parse the version information argument.
-       save_ifs="$IFS"; IFS=':'
-       set dummy $vinfo 0 0 0
-       IFS="$save_ifs"
-
-       if test -n "$8"; then
-         $echo "$modename: too many parameters to \`-version-info'" 1>&2
-         $echo "$help" 1>&2
-         exit $EXIT_FAILURE
-       fi
-
-       # 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="$2"
-         number_minor="$3"
-         number_revision="$4"
-         #
-         # 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
-         # which has an extra 1 added just for fun
-         #
-         case $version_type in
-         darwin|linux|osf|windows|none)
-           current=`expr $number_major + $number_minor`
-           age="$number_minor"
-           revision="$number_revision"
-           ;;
-         freebsd-aout|freebsd-elf|sunos)
-           current="$number_major"
-           revision="$number_minor"
-           age="0"
-           ;;
-         irix|nonstopux)
-           current=`expr $number_major + $number_minor`
-           age="$number_minor"
-           revision="$number_minor"
-           lt_irix_increment=no
-           ;;
-         *)
-           $echo "$modename: unknown library version type \`$version_type'" 1>&2
-           $echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
-           exit $EXIT_FAILURE
-           ;;
-         esac
-         ;;
-       no)
-         current="$2"
-         revision="$3"
-         age="$4"
-         ;;
-       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]) ;;
-       *)
-         $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2
-         $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-         exit $EXIT_FAILURE
-         ;;
-       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]) ;;
-       *)
-         $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2
-         $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-         exit $EXIT_FAILURE
-         ;;
-       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]) ;;
-       *)
-         $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2
-         $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-         exit $EXIT_FAILURE
-         ;;
-       esac
-
-       if test "$age" -gt "$current"; then
-         $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
-         $echo "$modename: \`$vinfo' is not valid version information" 1>&2
-         exit $EXIT_FAILURE
-       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
-         major=.`expr $current - $age`
-         versuffix="$major.$age.$revision"
-         # Darwin ld doesn't like 0 for these options...
-         minor_current=`expr $current + 1`
-         xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
-         verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
-         ;;
-
-       freebsd-aout)
-         major=".$current"
-         versuffix=".$current.$revision";
-         ;;
-
-       freebsd-elf)
-         major=".$current"
-         versuffix=".$current";
-         ;;
-
-       irix | nonstopux)
-         if test "X$lt_irix_increment" = "Xno"; then
-           major=`expr $current - $age`
-         else
-           major=`expr $current - $age + 1`
-         fi
-         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 "$loop" -ne 0; do
-           iface=`expr $revision - $loop`
-           loop=`expr $loop - 1`
-           verstring="$verstring_prefix$major.$iface:$verstring"
-         done
-
-         # Before this point, $major must not contain `.'.
-         major=.$major
-         versuffix="$major.$revision"
-         ;;
-
-       linux)
-         major=.`expr $current - $age`
-         versuffix="$major.$age.$revision"
-         ;;
-
-       osf)
-         major=.`expr $current - $age`
-         versuffix=".$current.$age.$revision"
-         verstring="$current.$age.$revision"
-
-         # Add in all the interfaces that we are compatible with.
-         loop=$age
-         while test "$loop" -ne 0; do
-           iface=`expr $current - $loop`
-           loop=`expr $loop - 1`
-           verstring="$verstring:${iface}.0"
-         done
-
-         # Make executables depend on our current version.
-         verstring="$verstring:${current}.0"
-         ;;
-
-       sunos)
-         major=".$current"
-         versuffix=".$current.$revision"
-         ;;
-
-       windows)
-         # Use '-' rather than '.', since we only want one
-         # extension on DOS 8.3 filesystems.
-         major=`expr $current - $age`
-         versuffix="-$major"
-         ;;
-
-       *)
-         $echo "$modename: unknown library version type \`$version_type'" 1>&2
-         $echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
-         exit $EXIT_FAILURE
-         ;;
-       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 "$need_version" = no; then
-           versuffix=
-         else
-           versuffix=".0.0"
-         fi
-       fi
-
-       # Remove version info from name if versioning should be avoided
-       if test "$avoid_version" = yes && test "$need_version" = no; then
-         major=
-         versuffix=
-         verstring=""
-       fi
-
-       # Check to see if the archive will have undefined symbols.
-       if test "$allow_undefined" = yes; then
-         if test "$allow_undefined_flag" = unsupported; then
-           $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
-           build_libtool_libs=no
-           build_old_libs=yes
-         fi
-       else
-         # Don't allow undefined symbols.
-         allow_undefined_flag="$no_undefined_flag"
-       fi
-      fi
-
-      if test "$mode" != relink; 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)
-              ;;
-           $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
-              if test "X$precious_files_regex" != "X"; then
-                if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
-                then
-                  continue
-                fi
-              fi
-              removelist="$removelist $p"
-              ;;
-           *) ;;
-         esac
-       done
-       if test -n "$removelist"; then
-         $show "${rm}r $removelist"
-         $run ${rm}r $removelist
-       fi
-      fi
-
-      # Now set the variables for building old libraries.
-      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
-       oldlibs="$oldlibs $output_objdir/$libname.$libext"
-
-       # Transform .lo files to .o files.
-       oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
-      fi
-
-      # Eliminate all temporary directories.
-      #for path in $notinst_path; do
-      #        lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"`
-      #        deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"`
-      #        dependency_libs=`$echo "$dependency_libs " | ${SED} -e "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
-         temp_xrpath="$temp_xrpath -R$libdir"
-         case "$finalize_rpath " in
-         *" $libdir "*) ;;
-         *) finalize_rpath="$finalize_rpath $libdir" ;;
-         esac
-       done
-       if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; 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 "*) ;;
-       *) dlfiles="$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 "*) ;;
-       *) dlprefiles="$dlprefiles $lib" ;;
-       esac
-      done
-
-      if test "$build_libtool_libs" = yes; then
-       if test -n "$rpath"; then
-         case $host in
-         *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
-           # these systems don't actually have a c library (as such)!
-           ;;
-         *-*-rhapsody* | *-*-darwin1.[012])
-           # Rhapsody C library is in the System framework
-           deplibs="$deplibs -framework System"
-           ;;
-         *-*-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 "$build_libtool_need_lc" = "yes"; then
-             deplibs="$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.
-         $rm conftest.c
-         cat > conftest.c <<EOF
-         int main() { return 0; }
-EOF
-         $rm conftest
-         if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
-           ldd_output=`ldd conftest`
-           for i in $deplibs; do
-             name=`expr $i : '-l\(.*\)'`
-             # If $name is empty we are operating on a -L argument.
-              if test "$name" != "" && test "$name" != "0"; then
-               if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-                 case " $predeps $postdeps " in
-                 *" $i "*)
-                   newdeplibs="$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
-                 deplib_match=$2
-                 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-                   newdeplibs="$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
-             else
-               newdeplibs="$newdeplibs $i"
-             fi
-           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
-             name=`expr $i : '-l\(.*\)'`
-             # If $name is empty we are operating on a -L argument.
-              if test "$name" != "" && test "$name" != "0"; then
-               $rm conftest
-               if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
-                 ldd_output=`ldd conftest`
-                 if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-                   case " $predeps $postdeps " in
-                   *" $i "*)
-                     newdeplibs="$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
-                   deplib_match=$2
-                   if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
-                     newdeplibs="$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
-             else
-               newdeplibs="$newdeplibs $i"
-             fi
-           done
-         fi
-         ;;
-       file_magic*)
-         set dummy $deplibs_check_method
-         file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
-         for a_deplib in $deplibs; do
-           name=`expr $a_deplib : '-l\(.*\)'`
-           # If $name is empty we are operating on a -L argument.
-            if test "$name" != "" && test  "$name" != "0"; then
-             if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-               case " $predeps $postdeps " in
-               *" $a_deplib "*)
-                 newdeplibs="$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
-                     # 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 "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
-                       esac
-                     done
-                     if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
-                        | ${SED} 10q \
-                        | $EGREP "$file_magic_regex" > /dev/null; then
-                       newdeplibs="$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
-           else
-             # Add a -L argument.
-             newdeplibs="$newdeplibs $a_deplib"
-           fi
-         done # Gone through all deplibs.
-         ;;
-       match_pattern*)
-         set dummy $deplibs_check_method
-         match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
-         for a_deplib in $deplibs; do
-           name=`expr $a_deplib : '-l\(.*\)'`
-           # If $name is empty we are operating on a -L argument.
-           if test -n "$name" && test "$name" != "0"; then
-             if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-               case " $predeps $postdeps " in
-               *" $a_deplib "*)
-                 newdeplibs="$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
-                     newdeplibs="$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
-           else
-             # Add a -L argument.
-             newdeplibs="$newdeplibs $a_deplib"
-           fi
-         done # Gone through all deplibs.
-         ;;
-       none | unknown | *)
-         newdeplibs=""
-         tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
-           -e 's/ -[LR][^ ]*//g'`
-         if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
-           for i in $predeps $postdeps ; do
-             # can't use Xsed below, because $i might contain '/'
-             tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"`
-           done
-         fi
-         if $echo "X $tmp_deplibs" | $Xsed -e 's/[     ]//g' \
-           | grep . >/dev/null; then
-           $echo
-           if test "X$deplibs_check_method" = "Xnone"; 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
-         fi
-         ;;
-       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 is the System framework
-         newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
-         ;;
-       esac
-
-       if test "$droppeddeps" = yes; then
-         if test "$module" = yes; 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 "$build_old_libs" = no; 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 "$allow_undefined" = no; 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 "$build_old_libs" = no; 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
-
-
-      # 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 "*)
-           new_libs="$new_libs -L$path/$objdir" ;;
-         esac
-         ;;
-       esac
-      done
-      for deplib in $deplibs; do
-       case $deplib in
-       -L*)
-         case " $new_libs " in
-         *" $deplib "*) ;;
-         *) new_libs="$new_libs $deplib" ;;
-         esac
-         ;;
-       *) new_libs="$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 "$build_libtool_libs" = yes; then
-       if test "$hardcode_into_libs" = yes; then
-         # Hardcode the library paths
-         hardcode_libdirs=
-         dep_rpath=
-         rpath="$finalize_rpath"
-         test "$mode" != relink && rpath="$compile_rpath$rpath"
-         for libdir in $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"*)
-                   ;;
-                 *)
-                   hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
-                   ;;
-                 esac
-               fi
-             else
-               eval flag=\"$hardcode_libdir_flag_spec\"
-               dep_rpath="$dep_rpath $flag"
-             fi
-           elif test -n "$runpath_var"; then
-             case "$perm_rpath " in
-             *" $libdir "*) ;;
-             *) perm_rpath="$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"
-           if test -n "$hardcode_libdir_flag_spec_ld"; then
-             case $archive_cmds in
-             *\$LD*) eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" ;;
-             *)      eval dep_rpath=\"$hardcode_libdir_flag_spec\" ;;
-             esac
-           else
-             eval dep_rpath=\"$hardcode_libdir_flag_spec\"
-           fi
-         fi
-         if test -n "$runpath_var" && test -n "$perm_rpath"; then
-           # We should set the runpath_var.
-           rpath=
-           for dir in $perm_rpath; do
-             rpath="$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 "$mode" != relink && 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
-       realname="$2"
-       shift; 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
-         linknames="$linknames $link"
-       done
-
-       # Use standard objects if they are pic
-       test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-
-       # Prepare the list of exported symbols
-       if test -z "$export_symbols"; then
-         if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
-           $show "generating symbol list for \`$libname.la'"
-           export_symbols="$output_objdir/$libname.exp"
-           $run $rm $export_symbols
-           cmds=$export_symbols_cmds
-           save_ifs="$IFS"; IFS='~'
-           for cmd in $cmds; do
-             IFS="$save_ifs"
-             eval cmd=\"$cmd\"
-             if len=`expr "X$cmd" : ".*"` &&
-              test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
-               $show "$cmd"
-               $run eval "$cmd" || exit $?
-               skipped_export=false
-             else
-               # The command line is too long to execute in one step.
-               $show "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"; then
-             $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
-             $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
-             $show "$mv \"${export_symbols}T\" \"$export_symbols\""
-             $run eval '$mv "${export_symbols}T" "$export_symbols"'
-           fi
-         fi
-       fi
-
-       if test -n "$export_symbols" && test -n "$include_expsyms"; then
-         $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
-       fi
-
-       tmp_deplibs=
-       for test_deplib in $deplibs; do
-               case " $convenience " in
-               *" $test_deplib "*) ;;
-               *)
-                       tmp_deplibs="$tmp_deplibs $test_deplib"
-                       ;;
-               esac
-       done
-       deplibs="$tmp_deplibs"
-
-       if test -n "$convenience"; then
-         if test -n "$whole_archive_flag_spec"; then
-           save_libobjs=$libobjs
-           eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
-         else
-           gentop="$output_objdir/${outputname}x"
-           generated="$generated $gentop"
-
-           func_extract_archives $gentop $convenience
-           libobjs="$libobjs $func_extract_archives_result"
-         fi
-       fi
-       
-       if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
-         eval flag=\"$thread_safe_flag_spec\"
-         linker_flags="$linker_flags $flag"
-       fi
-
-       # Make a backup of the uninstalled library when relinking
-       if test "$mode" = relink; then
-         $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
-       fi
-
-       # Do each of the archive commands.
-       if test "$module" = yes && 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 "X$skipped_export" != "X:" &&
-          len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
-          test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
-         :
-       else
-         # The command line is too long to link in one step, link piecewise.
-         $echo "creating reloadable object files..."
-
-         # 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
-         output_la=`$echo "X$output" | $Xsed -e "$basename"`
-
-         # Clear the reloadable object creation command queue and
-         # initialize k to one.
-         test_cmds=
-         concat_cmds=
-         objlist=
-         delfiles=
-         last_robj=
-         k=1
-         output=$output_objdir/$output_la-${k}.$objext
-         # Loop over the list of objects to be linked.
-         for obj in $save_libobjs
-         do
-           eval test_cmds=\"$reload_cmds $objlist $last_robj\"
-           if test "X$objlist" = X ||
-              { len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
-                test "$len" -le "$max_cmd_len"; }; then
-             objlist="$objlist $obj"
-           else
-             # The command $test_cmds is almost too long, add a
-             # command to the queue.
-             if test "$k" -eq 1 ; then
-               # The first file doesn't have a previous command to add.
-               eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
-             else
-               # All subsequent reloadable object files will link in
-               # the last one created.
-               eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\"
-             fi
-             last_robj=$output_objdir/$output_la-${k}.$objext
-             k=`expr $k + 1`
-             output=$output_objdir/$output_la-${k}.$objext
-             objlist=$obj
-             len=1
-           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~
-         eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
-
-         if ${skipped_export-false}; then
-           $show "generating symbol list for \`$libname.la'"
-           export_symbols="$output_objdir/$libname.exp"
-           $run $rm $export_symbols
-           libobjs=$output
-           # Append the command to create the export file.
-           eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\"
-          fi
-
-         # Set up a command to remove the reloadable object files
-         # after they are used.
-         i=0
-         while test "$i" -lt "$k"
-         do
-           i=`expr $i + 1`
-           delfiles="$delfiles $output_objdir/$output_la-${i}.$objext"
-         done
-
-         $echo "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"
-           $show "$cmd"
-           $run eval "$cmd" || exit $?
-         done
-         IFS="$save_ifs"
-
-         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\"
-         fi
-         # Expand the library linking commands again to reset the
-         # value of $libobjs for piecewise linking.
-
-         # Do each of the archive commands.
-         if test "$module" = yes && 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
-
-         # Append the command to remove the reloadable object files
-         # to the just-reset $cmds.
-         eval cmds=\"\$cmds~\$rm $delfiles\"
-       fi
-       save_ifs="$IFS"; IFS='~'
-       for cmd in $cmds; do
-         IFS="$save_ifs"
-         eval cmd=\"$cmd\"
-         $show "$cmd"
-         $run eval "$cmd" || {
-           lt_exit=$?
-
-           # Restore the uninstalled library and exit
-           if test "$mode" = relink; then
-             $run eval '(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 "$mode" = relink; then
-         $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
-             $show "${rm}r $gentop"
-             $run ${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
-           $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
-           $run 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 "$module" = yes || test "$export_dynamic" = yes; then
-         # On all known operating systems, these are identical.
-         dlname="$soname"
-       fi
-      fi
-      ;;
-
-    obj)
-      case " $deplibs" in
-      *\ -l* | *\ -L*)
-       $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 ;;
-      esac
-
-      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-       $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
-      fi
-
-      if test -n "$rpath"; then
-       $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
-      fi
-
-      if test -n "$xrpath"; then
-       $echo "$modename: warning: \`-R' is ignored for objects" 1>&2
-      fi
-
-      if test -n "$vinfo"; then
-       $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
-      fi
-
-      if test -n "$release"; then
-       $echo "$modename: warning: \`-release' is ignored for objects" 1>&2
-      fi
-
-      case $output in
-      *.lo)
-       if test -n "$objs$old_deplibs"; then
-         $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
-         exit $EXIT_FAILURE
-       fi
-       libobj="$output"
-       obj=`$echo "X$output" | $Xsed -e "$lo2o"`
-       ;;
-      *)
-       libobj=
-       obj="$output"
-       ;;
-      esac
-
-      # Delete the old objects.
-      $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=
-      # reload_cmds runs $LD directly, so let us get rid of
-      # -Wl from whole_archive_flag_spec and hope we can get by with
-      # turning comma into space..
-      wl=
-
-      if test -n "$convenience"; then
-       if test -n "$whole_archive_flag_spec"; then
-         eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
-         reload_conv_objs=$reload_objs\ `$echo "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
-       else
-         gentop="$output_objdir/${obj}x"
-         generated="$generated $gentop"
-
-         func_extract_archives $gentop $convenience
-         reload_conv_objs="$reload_objs $func_extract_archives_result"
-       fi
-      fi
-
-      # Create the old-style object.
-      reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
-
-      output="$obj"
-      cmds=$reload_cmds
-      save_ifs="$IFS"; IFS='~'
-      for cmd in $cmds; do
-       IFS="$save_ifs"
-       eval cmd=\"$cmd\"
-       $show "$cmd"
-       $run eval "$cmd" || exit $?
-      done
-      IFS="$save_ifs"
-
-      # Exit if we aren't doing a library object file.
-      if test -z "$libobj"; then
-       if test -n "$gentop"; then
-         $show "${rm}r $gentop"
-         $run ${rm}r $gentop
-       fi
-
-       exit $EXIT_SUCCESS
-      fi
-
-      if test "$build_libtool_libs" != yes; then
-       if test -n "$gentop"; then
-         $show "${rm}r $gentop"
-         $run ${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"
-       # $run eval "echo timestamp > $libobj" || exit $?
-       exit $EXIT_SUCCESS
-      fi
-
-      if test -n "$pic_flag" || test "$pic_mode" != default; then
-       # Only do commands if we really have different PIC objects.
-       reload_objs="$libobjs $reload_conv_objs"
-       output="$libobj"
-       cmds=$reload_cmds
-       save_ifs="$IFS"; IFS='~'
-       for cmd in $cmds; do
-         IFS="$save_ifs"
-         eval cmd=\"$cmd\"
-         $show "$cmd"
-         $run eval "$cmd" || exit $?
-       done
-       IFS="$save_ifs"
-      fi
-
-      if test -n "$gentop"; then
-       $show "${rm}r $gentop"
-       $run ${rm}r $gentop
-      fi
-
-      exit $EXIT_SUCCESS
-      ;;
-
-    prog)
-      case $host in
-       *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
-      esac
-      if test -n "$vinfo"; then
-       $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
-      fi
-
-      if test -n "$release"; then
-       $echo "$modename: warning: \`-release' is ignored for programs" 1>&2
-      fi
-
-      if test "$preload" = yes; then
-       if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
-          test "$dlopen_self_static" = unknown; then
-         $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
-       fi
-      fi
-
-      case $host in
-      *-*-rhapsody* | *-*-darwin1.[012])
-       # On Rhapsody replace the C library is the System framework
-       compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
-       finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
-       ;;
-      esac
-
-      case $host in
-      *darwin*)
-        # Don't allow lazy linking, it breaks C++ global constructors
-        if test "$tagname" = CXX ; then
-        compile_command="$compile_command ${wl}-bind_at_load"
-        finalize_command="$finalize_command ${wl}-bind_at_load"
-        fi
-        ;;
-      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 "*)
-           new_libs="$new_libs -L$path/$objdir" ;;
-         esac
-         ;;
-       esac
-      done
-      for deplib in $compile_deplibs; do
-       case $deplib in
-       -L*)
-         case " $new_libs " in
-         *" $deplib "*) ;;
-         *) new_libs="$new_libs $deplib" ;;
-         esac
-         ;;
-       *) new_libs="$new_libs $deplib" ;;
-       esac
-      done
-      compile_deplibs="$new_libs"
-
-
-      compile_command="$compile_command $compile_deplibs"
-      finalize_command="$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 "*) ;;
-         *) finalize_rpath="$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"*)
-               ;;
-             *)
-               hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
-               ;;
-             esac
-           fi
-         else
-           eval flag=\"$hardcode_libdir_flag_spec\"
-           rpath="$rpath $flag"
-         fi
-       elif test -n "$runpath_var"; then
-         case "$perm_rpath " in
-         *" $libdir "*) ;;
-         *) perm_rpath="$perm_rpath $libdir" ;;
-         esac
-       fi
-       case $host in
-       *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
-         testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'`
-         case :$dllsearchpath: in
-         *":$libdir:"*) ;;
-         *) dllsearchpath="$dllsearchpath:$libdir";;
-         esac
-         case :$dllsearchpath: in
-         *":$testbindir:"*) ;;
-         *) dllsearchpath="$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"*)
-               ;;
-             *)
-               hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
-               ;;
-             esac
-           fi
-         else
-           eval flag=\"$hardcode_libdir_flag_spec\"
-           rpath="$rpath $flag"
-         fi
-       elif test -n "$runpath_var"; then
-         case "$finalize_perm_rpath " in
-         *" $libdir "*) ;;
-         *) finalize_perm_rpath="$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 "$build_old_libs" = yes; then
-       # Transform all the library objects into standard objects.
-       compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-       finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-      fi
-
-      dlsyms=
-      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
-       if test -n "$NM" && test -n "$global_symbol_pipe"; then
-         dlsyms="${outputname}S.c"
-       else
-         $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
-       fi
-      fi
-
-      if test -n "$dlsyms"; then
-       case $dlsyms in
-       "") ;;
-       *.c)
-         # Discover the nlist of each of the dlfiles.
-         nlist="$output_objdir/${outputname}.nm"
-
-         $show "$rm $nlist ${nlist}S ${nlist}T"
-         $run $rm "$nlist" "${nlist}S" "${nlist}T"
-
-         # Parse the name list into a source file.
-         $show "creating $output_objdir/$dlsyms"
-
-         test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
-/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
-/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
-
-#ifdef __cplusplus
-extern \"C\" {
-#endif
-
-/* Prevent the only kind of declaration conflicts we can make. */
-#define lt_preloaded_symbols some_other_symbol
-
-/* External symbol declarations for the compiler. */\
-"
-
-         if test "$dlself" = yes; then
-           $show "generating symbol list for \`$output'"
-
-           test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
-
-           # Add our own program objects to the symbol list.
-           progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
-           for arg in $progfiles; do
-             $show "extracting global C symbols from \`$arg'"
-             $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
-           done
-
-           if test -n "$exclude_expsyms"; then
-             $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
-             $run eval '$mv "$nlist"T "$nlist"'
-           fi
-
-           if test -n "$export_symbols_regex"; then
-             $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
-             $run eval '$mv "$nlist"T "$nlist"'
-           fi
-
-           # Prepare the list of exported symbols
-           if test -z "$export_symbols"; then
-             export_symbols="$output_objdir/$outputname.exp"
-             $run $rm $export_symbols
-             $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
-              case $host in
-              *cygwin* | *mingw* )
-               $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
-               $run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
-                ;;
-              esac
-           else
-             $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
-             $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
-             $run eval 'mv "$nlist"T "$nlist"'
-              case $host in
-              *cygwin* | *mingw* )
-               $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
-               $run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
-                ;;
-              esac
-           fi
-         fi
-
-         for arg in $dlprefiles; do
-           $show "extracting global C symbols from \`$arg'"
-           name=`$echo "$arg" | ${SED} -e 's%^.*/%%'`
-           $run eval '$echo ": $name " >> "$nlist"'
-           $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
-         done
-
-         if test -z "$run"; then
-           # 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/$dlsyms"'
-           else
-             $echo '/* NONE */' >> "$output_objdir/$dlsyms"
-           fi
-
-           $echo >> "$output_objdir/$dlsyms" "\
-
-#undef lt_preloaded_symbols
-
-#if defined (__STDC__) && __STDC__
-# define lt_ptr void *
-#else
-# define lt_ptr char *
-# define const
-#endif
-
-/* The mapping between symbol names and symbols. */
-"
-
-           case $host in
-           *cygwin* | *mingw* )
-         $echo >> "$output_objdir/$dlsyms" "\
-/* DATA imports from DLLs on WIN32 can't be const, because
-   runtime relocations are performed -- see ld's documentation
-   on pseudo-relocs */
-struct {
-"
-             ;;
-           * )
-         $echo >> "$output_objdir/$dlsyms" "\
-const struct {
-"
-             ;;
-           esac
-
-
-         $echo >> "$output_objdir/$dlsyms" "\
-  const char *name;
-  lt_ptr address;
-}
-lt_preloaded_symbols[] =
-{\
-"
-
-           eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms"
-
-           $echo >> "$output_objdir/$dlsyms" "\
-  {0, (lt_ptr) 0}
-};
-
-/* This works around a problem in FreeBSD linker */
-#ifdef FREEBSD_WORKAROUND
-static const void *lt_preloaded_setup() {
-  return lt_preloaded_symbols;
-}
-#endif
-
-#ifdef __cplusplus
-}
-#endif\
-"
-         fi
-
-         pic_flag_for_symtable=
-         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*)
-           case "$compile_command " in
-           *" -static "*) ;;
-           *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";;
-           esac;;
-         *-*-hpux*)
-           case "$compile_command " in
-           *" -static "*) ;;
-           *) pic_flag_for_symtable=" $pic_flag";;
-           esac
-         esac
-
-         # Now compile the dynamic symbol file.
-         $show "(cd $output_objdir && $LTCC  $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
-         $run eval '(cd $output_objdir && $LTCC  $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
-
-         # Clean up the generated files.
-         $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
-         $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
-
-         # Transform the symbol file into the correct name.
-          case $host in
-          *cygwin* | *mingw* )
-            if test -f "$output_objdir/${outputname}.def" ; then
-              compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP`
-              finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%" | $NL2SP`
-            else
-              compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
-              finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
-             fi
-            ;;
-          * )
-            compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
-            finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%" | $NL2SP`
-            ;;
-          esac
-         ;;
-       *)
-         $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
-         exit $EXIT_FAILURE
-         ;;
-       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 "X$compile_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP`
-       finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "s% @SYMFILE@%%" | $NL2SP`
-      fi
-
-      if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
-       # Replace the output file specification.
-       compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$output"'%g' | $NL2SP`
-       link_command="$compile_command$compile_rpath"
-
-       # We have no uninstalled library dependencies, so finalize right now.
-       $show "$link_command"
-       $run eval "$link_command"
-       exit_status=$?
-
-       # Delete the generated files.
-       if test -n "$dlsyms"; then
-         $show "$rm $output_objdir/${outputname}S.${objext}"
-         $run $rm "$output_objdir/${outputname}S.${objext}"
-       fi
-
-       exit $exit_status
-      fi
-
-      if test -n "$shlibpath_var"; then
-       # We should set the shlibpath_var
-       rpath=
-       for dir in $temp_rpath; do
-         case $dir in
-         [\\/]* | [A-Za-z]:[\\/]*)
-           # Absolute path.
-           rpath="$rpath$dir:"
-           ;;
-         *)
-           # Relative path: add a thisdir entry.
-           rpath="$rpath\$thisdir/$dir:"
-           ;;
-         esac
-       done
-       temp_rpath="$rpath"
-      fi
-
-      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
-           rpath="$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
-           rpath="$rpath$dir:"
-         done
-         finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
-       fi
-      fi
-
-      if test "$no_install" = yes; 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 "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
-       # Delete the old output file.
-       $run $rm $output
-       # Link the executable and exit
-       $show "$link_command"
-       $run eval "$link_command" || exit $?
-       exit $EXIT_SUCCESS
-      fi
-
-      if test "$hardcode_action" = relink; then
-       # Fast installation is not supported
-       link_command="$compile_var$compile_command$compile_rpath"
-       relink_command="$finalize_var$finalize_command$finalize_rpath"
-
-       $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
-       $echo "$modename: \`$output' will be relinked during installation" 1>&2
-      else
-       if test "$fast_install" != no; then
-         link_command="$finalize_var$compile_command$finalize_rpath"
-         if test "$fast_install" = yes; then
-           relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $SP2NL | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g' | $NL2SP`
-         else
-           # fast_install is set to needless
-           relink_command=
-         fi
-       else
-         link_command="$compile_var$compile_command$compile_rpath"
-         relink_command="$finalize_var$finalize_command$finalize_rpath"
-       fi
-      fi
-
-      # Replace the output file specification.
-      link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
-
-      # Delete the old output files.
-      $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
-
-      $show "$link_command"
-      $run eval "$link_command" || exit $?
-
-      # Now create the wrapper script.
-      $show "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}\" || 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
-           var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
-           relink_command="$var=\"$var_value\"; export $var; $relink_command"
-         fi
-       done
-       relink_command="(cd `pwd`; $relink_command)"
-       relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP`
-      fi
-
-      # Quote $echo for shipping.
-      if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then
-       case $progpath in
-       [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
-       *) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
-       esac
-       qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
-      else
-       qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
-      fi
-
-      # Only actually do things if our run command is non-null.
-      if test -z "$run"; then
-       # win32 will think the script is a binary if it has
-       # a .exe suffix, so we strip it off here.
-       case $output in
-         *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;;
-       esac
-       # test for cygwin because mv fails w/o .exe extensions
-       case $host in
-         *cygwin*)
-           exeext=.exe
-           outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;;
-         *) exeext= ;;
-       esac
-       case $host in
-         *cygwin* | *mingw* )
-            output_name=`basename $output`
-            output_path=`dirname $output`
-            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
-
-           cat > $cwrappersource <<EOF
-
-/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
-   Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-
-   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.
-
-   Currently, it simply execs the wrapper *script* "/bin/sh $output",
-   but could eventually absorb all of the scripts functionality and
-   exec $objdir/$outputname directly.
-*/
-EOF
-           cat >> $cwrappersource<<"EOF"
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <malloc.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <string.h>
-#include <ctype.h>
-#include <sys/stat.h>
-
-#if defined(PATH_MAX)
-# define LT_PATHMAX PATH_MAX
-#elif defined(MAXPATHLEN)
-# define LT_PATHMAX MAXPATHLEN
-#else
-# define LT_PATHMAX 1024
-#endif
-
-#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
-# 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 */
-
-#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
-#define XFREE(stale) do { \
-  if (stale) { free ((void *) stale); stale = 0; } \
-} while (0)
-
-/* -DDEBUG is fairly common in CFLAGS.  */
-#undef DEBUG
-#if defined DEBUGWRAPPER
-# define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__)
-#else
-# define DEBUG(format, ...)
-#endif
-
-const char *program_name = NULL;
-
-void * xmalloc (size_t num);
-char * xstrdup (const char *string);
-const char * base_name (const char *name);
-char * find_executable(const char *wrapper);
-int    check_executable(const char *path);
-char * strendzap(char *str, const char *pat);
-void lt_fatal (const char *message, ...);
-
-int
-main (int argc, char *argv[])
-{
-  char **newargz;
-  int i;
-
-  program_name = (char *) xstrdup (base_name (argv[0]));
-  DEBUG("(main) argv[0]      : %s\n",argv[0]);
-  DEBUG("(main) program_name : %s\n",program_name);
-  newargz = XMALLOC(char *, argc+2);
-EOF
-
-            cat >> $cwrappersource <<EOF
-  newargz[0] = (char *) xstrdup("$SHELL");
-EOF
-
-            cat >> $cwrappersource <<"EOF"
-  newargz[1] = find_executable(argv[0]);
-  if (newargz[1] == NULL)
-    lt_fatal("Couldn't find %s", argv[0]);
-  DEBUG("(main) found exe at : %s\n",newargz[1]);
-  /* we know the script has the same name, without the .exe */
-  /* so make sure newargz[1] doesn't end in .exe */
-  strendzap(newargz[1],".exe");
-  for (i = 1; i < argc; i++)
-    newargz[i+1] = xstrdup(argv[i]);
-  newargz[argc+1] = NULL;
-
-  for (i=0; i<argc+1; i++)
-  {
-    DEBUG("(main) newargz[%d]   : %s\n",i,newargz[i]);
-    ;
-  }
-
-EOF
-
-            case $host_os in
-              mingw*)
-                cat >> $cwrappersource <<EOF
-  execv("$SHELL",(char const **)newargz);
-EOF
-              ;;
-              *)
-                cat >> $cwrappersource <<EOF
-  execv("$SHELL",newargz);
-EOF
-              ;;
-            esac
-
-            cat >> $cwrappersource <<"EOF"
-  return 127;
-}
-
-void *
-xmalloc (size_t num)
-{
-  void * p = (void *) malloc (num);
-  if (!p)
-    lt_fatal ("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;
-
-  DEBUG("(check_executable)  : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!");
-  if ((!path) || (!*path))
-    return 0;
-
-  if ((stat (path, &st) >= 0) &&
-      (
-        /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */
-#if defined (S_IXOTH)
-       ((st.st_mode & S_IXOTH) == S_IXOTH) ||
-#endif
-#if defined (S_IXGRP)
-       ((st.st_mode & S_IXGRP) == S_IXGRP) ||
-#endif
-       ((st.st_mode & S_IXUSR) == S_IXUSR))
-      )
-    return 1;
-  else
-    return 0;
-}
-
-/* Searches for the full path of the wrapper.  Returns
-   newly allocated full path name if found, NULL otherwise */
-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];
-  int tmp_len;
-  char* concat_name;
-
-  DEBUG("(find_executable)  : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!");
-
-  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 = 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 ("getcwd failed");
-          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 ("getcwd failed");
-  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 *
-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 (strcmp(str, pat) == 0)
-      *str = '\0';
-  }
-  return str;
-}
-
-static void
-lt_error_core (int exit_status, const char * mode,
-          const char * message, va_list ap)
-{
-  fprintf (stderr, "%s: %s: ", program_name, mode);
-  vfprintf (stderr, message, ap);
-  fprintf (stderr, ".\n");
-
-  if (exit_status >= 0)
-    exit (exit_status);
-}
-
-void
-lt_fatal (const char *message, ...)
-{
-  va_list ap;
-  va_start (ap, message);
-  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
-  va_end (ap);
-}
-EOF
-          # we should really use a build-platform specific compiler
-          # here, but OTOH, the wrappers (shell script and this C one)
-          # are only useful if you want to execute the "real" binary.
-          # Since the "real" binary is built for $host, then this
-          # wrapper might as well be built for $host, too.
-          $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource
-          ;;
-        esac
-        $rm $output
-        trap "$rm $output; exit $EXIT_FAILURE" 1 2 15
-
-       $echo > $output "\
-#! $SHELL
-
-# $output - temporary wrapper script for $objdir/$outputname
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# 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.
-Xsed='${SED} -e 1s/^X//'
-sed_quote_subst='$sed_quote_subst'
-
-# Be Bourne compatible (taken from Autoconf:_AS_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 variable:
-  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
-    echo=\"$qecho\"
-    file=\"\$0\"
-    # Make sure echo works.
-    if test \"X\$1\" = X--no-reexec; then
-      # Discard the --no-reexec flag, and continue.
-      shift
-    elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
-      # Yippee, \$echo works!
-      :
-    else
-      # Restart under the correct shell, and then maybe \$echo will work.
-      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
-    fi
-  fi\
-"
-       $echo >> $output "\
-
-  # Find the directory that this script lives in.
-  thisdir=\`\$echo \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
-    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
-  done
-
-  # Try to get the absolute directory name.
-  absdir=\`cd \"\$thisdir\" && pwd\`
-  test -n \"\$absdir\" && thisdir=\"\$absdir\"
-"
-
-       if test "$fast_install" = yes; then
-         $echo >> $output "\
-  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 >> $output "\
-
-    # 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 $EXIT_FAILURE
-      fi
-    fi
-
-    $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
-    { $rm \"\$progdir/\$program\";
-      $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
-    $rm \"\$progdir/\$file\"
-  fi"
-       else
-         $echo >> $output "\
-  program='$outputname'
-  progdir=\"\$thisdir/$objdir\"
-"
-       fi
-
-       $echo >> $output "\
-
-  if test -f \"\$progdir/\$program\"; then"
-
-       # Export our shlibpath_var if we have one.
-       if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
-         $echo >> $output "\
-    # 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 \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
-
-    export $shlibpath_var
-"
-       fi
-
-       # fixup the dll searchpath if we need to.
-       if test -n "$dllsearchpath"; then
-         $echo >> $output "\
-    # Add the dll search path components to the executable PATH
-    PATH=$dllsearchpath:\$PATH
-"
-       fi
-
-       $echo >> $output "\
-    if test \"\$libtool_execute_magic\" != \"$magic\"; then
-      # Run the actual program with our arguments.
-"
-       case $host in
-       # Backslashes separate directories on plain windows
-       *-*-mingw | *-*-os2*)
-         $echo >> $output "\
-      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
-"
-         ;;
-
-       *)
-         $echo >> $output "\
-      exec \"\$progdir/\$program\" \${1+\"\$@\"}
-"
-         ;;
-       esac
-       $echo >> $output "\
-      \$echo \"\$0: cannot exec \$program \$*\"
-      exit $EXIT_FAILURE
-    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 $EXIT_FAILURE
-  fi
-fi\
-"
-       chmod +x $output
-      fi
-      exit $EXIT_SUCCESS
-      ;;
-    esac
-
-    # See if we need to build an old-fashioned archive.
-    for oldlib in $oldlibs; do
-
-      if test "$build_libtool_libs" = convenience; then
-       oldobjs="$libobjs_save"
-       addlibs="$convenience"
-       build_libtool_libs=no
-      else
-       if test "$build_libtool_libs" = module; then
-         oldobjs="$libobjs_save"
-         build_libtool_libs=no
-       else
-         oldobjs="$old_deplibs $non_pic_objects"
-       fi
-       addlibs="$old_convenience"
-      fi
-
-      if test -n "$addlibs"; then
-       gentop="$output_objdir/${outputname}x"
-       generated="$generated $gentop"
-
-       func_extract_archives $gentop $addlibs
-       oldobjs="$oldobjs $func_extract_archives_result"
-      fi
-
-      # Do each command in the archive commands.
-      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
-       cmds=$old_archive_from_new_cmds
-      else
-       # 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
-             $echo "X$obj" | $Xsed -e 's%^.*/%%'
-           done | sort | sort -uc >/dev/null 2>&1); then
-         :
-       else
-         $echo "copying selected object files to avoid basename conflicts..."
-
-         if test -z "$gentop"; then
-           gentop="$output_objdir/${outputname}x"
-           generated="$generated $gentop"
-
-           $show "${rm}r $gentop"
-           $run ${rm}r "$gentop"
-           $show "$mkdir $gentop"
-           $run $mkdir "$gentop"
-           exit_status=$?
-           if test "$exit_status" -ne 0 && test ! -d "$gentop"; then
-             exit $exit_status
-           fi
-         fi
-
-         save_oldobjs=$oldobjs
-         oldobjs=
-         counter=1
-         for obj in $save_oldobjs
-         do
-           objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
-           case " $oldobjs " in
-           " ") oldobjs=$obj ;;
-           *[\ /]"$objbase "*)
-             while :; do
-               # Make sure we don't pick an alternate name that also
-               # overlaps.
-               newobj=lt$counter-$objbase
-               counter=`expr $counter + 1`
-               case " $oldobjs " in
-               *[\ /]"$newobj "*) ;;
-               *) if test ! -f "$gentop/$newobj"; then break; fi ;;
-               esac
-             done
-             $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
-             $run ln "$obj" "$gentop/$newobj" ||
-             $run cp "$obj" "$gentop/$newobj"
-             oldobjs="$oldobjs $gentop/$newobj"
-             ;;
-           *) oldobjs="$oldobjs $obj" ;;
-           esac
-         done
-       fi
-
-       eval cmds=\"$old_archive_cmds\"
-
-       if len=`expr "X$cmds" : ".*"` &&
-            test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
-         cmds=$old_archive_cmds
-       else
-         # the command line is too long to link in one step, link in parts
-         $echo "using piecewise archive linking..."
-         save_RANLIB=$RANLIB
-         RANLIB=:
-         objlist=
-         concat_cmds=
-         save_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
-         for obj in $save_oldobjs
-         do
-           oldobjs="$objlist $obj"
-           objlist="$objlist $obj"
-           eval test_cmds=\"$old_archive_cmds\"
-           if len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
-              test "$len" -le "$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=
-           fi
-         done
-         RANLIB=$save_RANLIB
-         oldobjs=$objlist
-         if test "X$oldobjs" = "X" ; then
-           eval cmds=\"\$concat_cmds\"
-         else
-           eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
-         fi
-       fi
-      fi
-      save_ifs="$IFS"; IFS='~'
-      for cmd in $cmds; do
-        eval cmd=\"$cmd\"
-       IFS="$save_ifs"
-       $show "$cmd"
-       $run eval "$cmd" || exit $?
-      done
-      IFS="$save_ifs"
-    done
-
-    if test -n "$generated"; then
-      $show "${rm}r$generated"
-      $run ${rm}r$generated
-    fi
-
-    # Now create the libtool archive.
-    case $output in
-    *.la)
-      old_library=
-      test "$build_old_libs" = yes && old_library="$libname.$libext"
-      $show "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}\" || 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
-         var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
-         relink_command="$var=\"$var_value\"; 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 "X$relink_command" | $SP2NL | $Xsed -e "$sed_quote_subst" | $NL2SP`
-      if test "$hardcode_automatic" = yes ; then
-       relink_command=
-      fi
-
-
-      # Only create the output if not a dry run.
-      if test -z "$run"; then
-       for installed in no yes; do
-         if test "$installed" = yes; 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)
-               name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
-               eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
-               if test -z "$libdir"; then
-                 $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
-                 exit $EXIT_FAILURE
-               fi
-               newdependency_libs="$newdependency_libs $libdir/$name"
-               ;;
-             *) newdependency_libs="$newdependency_libs $deplib" ;;
-             esac
-           done
-           dependency_libs="$newdependency_libs"
-           newdlfiles=
-           for lib in $dlfiles; do
-             name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
-             eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
-             if test -z "$libdir"; then
-               $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
-               exit $EXIT_FAILURE
-             fi
-             newdlfiles="$newdlfiles $libdir/$name"
-           done
-           dlfiles="$newdlfiles"
-           newdlprefiles=
-           for lib in $dlprefiles; do
-             name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
-             eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
-             if test -z "$libdir"; then
-               $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
-               exit $EXIT_FAILURE
-             fi
-             newdlprefiles="$newdlprefiles $libdir/$name"
-           done
-           dlprefiles="$newdlprefiles"
-         else
-           newdlfiles=
-           for lib in $dlfiles; do
-             case $lib in
-               [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
-               *) abs=`pwd`"/$lib" ;;
-             esac
-             newdlfiles="$newdlfiles $abs"
-           done
-           dlfiles="$newdlfiles"
-           newdlprefiles=
-           for lib in $dlprefiles; do
-             case $lib in
-               [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
-               *) abs=`pwd`"/$lib" ;;
-             esac
-             newdlprefiles="$newdlprefiles $abs"
-           done
-           dlprefiles="$newdlprefiles"
-         fi
-         $rm $output
-         # place dlname in correct position for cygwin
-         tdlname=$dlname
-         case $host,$output,$installed,$module,$dlname in
-           *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
-         esac
-         $echo > $output "\
-# $outputname - a libtool library file
-# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
-#
-# 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'
-
-# Libraries that this one depends upon.
-dependency_libs='$dependency_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 "$installed" = no && test "$need_relink" = yes; then
-           $echo >> $output "\
-relink_command=\"$relink_command\""
-         fi
-       done
-      fi
-
-      # Do a symbolic link so that the libtool archive can be found in
-      # LD_LIBRARY_PATH before the program is installed.
-      $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
-      $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
-      ;;
-    esac
-    exit $EXIT_SUCCESS
-    ;;
-
-  # libtool install mode
-  install)
-    modename="$modename: install"
-
-    # There may be an optional sh(1) argument at the beginning of
-    # install_prog (especially on Windows NT).
-    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
-       # Allow the use of GNU shtool's install command.
-       $echo "X$nonopt" | grep shtool > /dev/null; then
-      # Aesthetically quote it.
-      arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
-      case $arg in
-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
-       arg="\"$arg\""
-       ;;
-      esac
-      install_prog="$arg "
-      arg="$1"
-      shift
-    else
-      install_prog=
-      arg=$nonopt
-    fi
-
-    # The real first argument should be the name of the installation program.
-    # Aesthetically quote it.
-    arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-    case $arg in
-    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \      ]*|*]*|"")
-      arg="\"$arg\""
-      ;;
-    esac
-    install_prog="$install_prog$arg"
-
-    # We need to accept at least all the BSD install flags.
-    dest=
-    files=
-    opts=
-    prev=
-    install_type=
-    isdir=no
-    stripme=
-    for arg
-    do
-      if test -n "$dest"; then
-       files="$files $dest"
-       dest=$arg
-       continue
-      fi
-
-      case $arg in
-      -d) isdir=yes ;;
-      -f) 
-       case " $install_prog " in
-       *[\\\ /]cp\ *) ;;
-       *) prev=$arg ;;
-       esac
-       ;;
-      -g | -m | -o) prev=$arg ;;
-      -s)
-       stripme=" -s"
-       continue
-       ;;
-      -*)
-       ;;
-      *)
-       # If the previous option needed an argument, then skip it.
-       if test -n "$prev"; then
-         prev=
-       else
-         dest=$arg
-         continue
-       fi
-       ;;
-      esac
-
-      # Aesthetically quote the argument.
-      arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
-      case $arg in
-      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \    ]*|*]*|"")
-       arg="\"$arg\""
-       ;;
-      esac
-      install_prog="$install_prog $arg"
-    done
-
-    if test -z "$install_prog"; then
-      $echo "$modename: you must specify an install program" 1>&2
-      $echo "$help" 1>&2
-      exit $EXIT_FAILURE
-    fi
-
-    if test -n "$prev"; then
-      $echo "$modename: the \`$prev' option requires an argument" 1>&2
-      $echo "$help" 1>&2
-      exit $EXIT_FAILURE
-    fi
-
-    if test -z "$files"; then
-      if test -z "$dest"; then
-       $echo "$modename: no file or destination specified" 1>&2
-      else
-       $echo "$modename: you must specify a destination" 1>&2
-      fi
-      $echo "$help" 1>&2
-      exit $EXIT_FAILURE
-    fi
-
-    # Strip any trailing slash from the destination.
-    dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
-
-    # Check to see that the destination is a directory.
-    test -d "$dest" && isdir=yes
-    if test "$isdir" = yes; then
-      destdir="$dest"
-      destname=
-    else
-      destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
-      test "X$destdir" = "X$dest" && destdir=.
-      destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
-
-      # Not a directory, so check to see that there is only one file specified.
-      set dummy $files
-      if test "$#" -gt 2; then
-       $echo "$modename: \`$dest' is not a directory" 1>&2
-       $echo "$help" 1>&2
-       exit $EXIT_FAILURE
-      fi
-    fi
-    case $destdir in
-    [\\/]* | [A-Za-z]:[\\/]*) ;;
-    *)
-      for file in $files; do
-       case $file in
-       *.lo) ;;
-       *)
-         $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
-         $echo "$help" 1>&2
-         exit $EXIT_FAILURE
-         ;;
-       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.
-       staticlibs="$staticlibs $file"
-       ;;
-
-      *.la)
-       # Check to see that this really is a libtool archive.
-       if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
-       else
-         $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
-         $echo "$help" 1>&2
-         exit $EXIT_FAILURE
-       fi
-
-       library_names=
-       old_library=
-       relink_command=
-       # If there is no directory component, then add one.
-       case $file in
-       */* | *\\*) . $file ;;
-       *) . ./$file ;;
-       esac
-
-       # Add the libdir to current_libdirs if it is the destination.
-       if test "X$destdir" = "X$libdir"; then
-         case "$current_libdirs " in
-         *" $libdir "*) ;;
-         *) current_libdirs="$current_libdirs $libdir" ;;
-         esac
-       else
-         # Note the libdir as a future libdir.
-         case "$future_libdirs " in
-         *" $libdir "*) ;;
-         *) future_libdirs="$future_libdirs $libdir" ;;
-         esac
-       fi
-
-       dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
-       test "X$dir" = "X$file/" && dir=
-       dir="$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 "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.
-         if test "$inst_prefix_dir" = "$destdir"; then
-           $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
-           exit $EXIT_FAILURE
-         fi
-
-         if test -n "$inst_prefix_dir"; then
-           # Stick the inst_prefix_dir data into the link command.
-           relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%" | $NL2SP`
-         else
-           relink_command=`$echo "$relink_command" | $SP2NL | $SED "s%@inst_prefix_dir@%%" | $NL2SP`
-         fi
-
-         $echo "$modename: warning: relinking \`$file'" 1>&2
-         $show "$relink_command"
-         if $run eval "$relink_command"; then :
-         else
-           $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
-           exit $EXIT_FAILURE
-         fi
-       fi
-
-       # See the names of the shared library.
-       set dummy $library_names
-       if test -n "$2"; then
-         realname="$2"
-         shift
-         shift
-
-         srcname="$realname"
-         test -n "$relink_command" && srcname="$realname"T
-
-         # Install the shared library and build the symlinks.
-         $show "$install_prog $dir/$srcname $destdir/$realname"
-         $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
-         if test -n "$stripme" && test -n "$striplib"; then
-           $show "$striplib $destdir/$realname"
-           $run 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
-             if test "$linkname" != "$realname"; then
-                $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })"
-                $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })"
-             fi
-           done
-         fi
-
-         # Do each command in the postinstall commands.
-         lib="$destdir/$realname"
-         cmds=$postinstall_cmds
-         save_ifs="$IFS"; IFS='~'
-         for cmd in $cmds; do
-           IFS="$save_ifs"
-           eval cmd=\"$cmd\"
-           $show "$cmd"
-           $run eval "$cmd" || {
-             lt_exit=$?
-
-             # Restore the uninstalled library and exit
-             if test "$mode" = relink; then
-               $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)'
-             fi
-
-             exit $lt_exit
-           }
-         done
-         IFS="$save_ifs"
-       fi
-
-       # Install the pseudo-library for information purposes.
-       name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-       instname="$dir/$name"i
-       $show "$install_prog $instname $destdir/$name"
-       $run eval "$install_prog $instname $destdir/$name" || exit $?
-
-       # Maybe install the static library, too.
-       test -n "$old_library" && staticlibs="$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
-         destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-         destfile="$destdir/$destfile"
-       fi
-
-       # Deduce the name of the destination old-style object file.
-       case $destfile in
-       *.lo)
-         staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
-         ;;
-       *.$objext)
-         staticdest="$destfile"
-         destfile=
-         ;;
-       *)
-         $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
-         $echo "$help" 1>&2
-         exit $EXIT_FAILURE
-         ;;
-       esac
-
-       # Install the libtool object if requested.
-       if test -n "$destfile"; then
-         $show "$install_prog $file $destfile"
-         $run eval "$install_prog $file $destfile" || exit $?
-       fi
-
-       # Install the old object if enabled.
-       if test "$build_old_libs" = yes; then
-         # Deduce the name of the old-style object file.
-         staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
-
-         $show "$install_prog $staticobj $staticdest"
-         $run 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
-         destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-         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
-             file=`$echo $file|${SED} 's,.exe$,,'`
-             stripped_ext=".exe"
-           fi
-           ;;
-       esac
-
-       # Do a test to see if this is really a libtool program.
-       case $host in
-       *cygwin*|*mingw*)
-           wrapper=`$echo $file | ${SED} -e 's,.exe$,,'`
-           ;;
-       *)
-           wrapper=$file
-           ;;
-       esac
-       if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then
-         notinst_deplibs=
-         relink_command=
-
-         # Note that it is not necessary on cygwin/mingw to append a dot to
-         # foo even if both foo 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.
-         #
-         # If there is no directory component, then add one.
-         case $wrapper in
-         */* | *\\*) . ${wrapper} ;;
-         *) . ./${wrapper} ;;
-         esac
-
-         # Check the variables that should have been set.
-         if test -z "$notinst_deplibs"; then
-           $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2
-           exit $EXIT_FAILURE
-         fi
-
-         finalize=yes
-         for lib in $notinst_deplibs; do
-           # Check to see that each library is installed.
-           libdir=
-           if test -f "$lib"; then
-             # If there is no directory component, then add one.
-             case $lib in
-             */* | *\\*) . $lib ;;
-             *) . ./$lib ;;
-             esac
-           fi
-           libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
-           if test -n "$libdir" && test ! -f "$libfile"; then
-             $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
-             finalize=no
-           fi
-         done
-
-         relink_command=
-         # Note that it is not necessary on cygwin/mingw to append a dot to
-         # foo even if both foo 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.
-         #
-         # If there is no directory component, then add one.
-         case $wrapper in
-         */* | *\\*) . ${wrapper} ;;
-         *) . ./${wrapper} ;;
-         esac
-
-         outputname=
-         if test "$fast_install" = no && test -n "$relink_command"; then
-           if test "$finalize" = yes && test -z "$run"; then
-             tmpdir=`func_mktempdir`
-             file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'`
-             outputname="$tmpdir/$file"
-             # Replace the output file specification.
-             relink_command=`$echo "X$relink_command" | $SP2NL | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g' | $NL2SP`
-
-             $show "$relink_command"
-             if $run eval "$relink_command"; then :
-             else
-               $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
-               ${rm}r "$tmpdir"
-               continue
-             fi
-             file="$outputname"
-           else
-             $echo "$modename: warning: cannot relink \`$file'" 1>&2
-           fi
-         else
-           # Install the binary that we compiled earlier.
-           file=`$echo "X$file$stripped_ext" | $Xsed -e "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)
-           destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'`
-           ;;
-         esac
-         ;;
-       esac
-       $show "$install_prog$stripme $file $destfile"
-       $run eval "$install_prog\$stripme \$file \$destfile" || exit $?
-       test -n "$outputname" && ${rm}r "$tmpdir"
-       ;;
-      esac
-    done
-
-    for file in $staticlibs; do
-      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-
-      # Set up the ranlib parameters.
-      oldlib="$destdir/$name"
-
-      $show "$install_prog $file $oldlib"
-      $run eval "$install_prog \$file \$oldlib" || exit $?
-
-      if test -n "$stripme" && test -n "$old_striplib"; then
-       $show "$old_striplib $oldlib"
-       $run eval "$old_striplib $oldlib" || exit $?
-      fi
-
-      # Do each command in the postinstall commands.
-      cmds=$old_postinstall_cmds
-      save_ifs="$IFS"; IFS='~'
-      for cmd in $cmds; do
-       IFS="$save_ifs"
-       eval cmd=\"$cmd\"
-       $show "$cmd"
-       $run eval "$cmd" || exit $?
-      done
-      IFS="$save_ifs"
-    done
-
-    if test -n "$future_libdirs"; then
-      $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
-    fi
-
-    if test -n "$current_libdirs"; then
-      # Maybe just do a dry run.
-      test -n "$run" && current_libdirs=" -n$current_libdirs"
-      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
-    else
-      exit $EXIT_SUCCESS
-    fi
-    ;;
-
-  # libtool finish mode
-  finish)
-    modename="$modename: finish"
-    libdirs="$nonopt"
-    admincmds=
-
-    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
-      for dir
-      do
-       libdirs="$libdirs $dir"
-      done
-
-      for libdir in $libdirs; do
-       if test -n "$finish_cmds"; then
-         # Do each command in the finish commands.
-         cmds=$finish_cmds
-         save_ifs="$IFS"; IFS='~'
-         for cmd in $cmds; do
-           IFS="$save_ifs"
-           eval cmd=\"$cmd\"
-           $show "$cmd"
-           $run eval "$cmd" || admincmds="$admincmds
-       $cmd"
-         done
-         IFS="$save_ifs"
-       fi
-       if test -n "$finish_eval"; then
-         # Do the single finish_eval.
-         eval cmds=\"$finish_eval\"
-         $run eval "$cmds" || admincmds="$admincmds
-       $cmds"
-       fi
-      done
-    fi
-
-    # Exit here if they wanted silent mode.
-    test "$show" = : && exit $EXIT_SUCCESS
-
-    $echo "X----------------------------------------------------------------------" | $Xsed
-    $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"
-    $echo "more information, such as the ld(1) and ld.so(8) manual pages."
-    $echo "X----------------------------------------------------------------------" | $Xsed
-    exit $EXIT_SUCCESS
-    ;;
-
-  # libtool execute mode
-  execute)
-    modename="$modename: execute"
-
-    # The first argument is the command name.
-    cmd="$nonopt"
-    if test -z "$cmd"; then
-      $echo "$modename: you must specify a COMMAND" 1>&2
-      $echo "$help"
-      exit $EXIT_FAILURE
-    fi
-
-    # Handle -dlopen flags immediately.
-    for file in $execute_dlfiles; do
-      if test ! -f "$file"; then
-       $echo "$modename: \`$file' is not a file" 1>&2
-       $echo "$help" 1>&2
-       exit $EXIT_FAILURE
-      fi
-
-      dir=
-      case $file in
-      *.la)
-       # Check to see that this really is a libtool archive.
-       if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
-       else
-         $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
-         $echo "$help" 1>&2
-         exit $EXIT_FAILURE
-       fi
-
-       # Read the libtool library.
-       dlname=
-       library_names=
-
-       # If there is no directory component, then add one.
-       case $file in
-       */* | *\\*) . $file ;;
-       *) . ./$file ;;
-       esac
-
-       # Skip this library if it cannot be dlopened.
-       if test -z "$dlname"; then
-         # Warn if it was a shared library.
-         test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
-         continue
-       fi
-
-       dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
-       test "X$dir" = "X$file" && dir=.
-
-       if test -f "$dir/$objdir/$dlname"; then
-         dir="$dir/$objdir"
-       else
-         if test ! -f "$dir/$dlname"; then
-           $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
-           exit $EXIT_FAILURE
-         fi
-       fi
-       ;;
-
-      *.lo)
-       # Just add the directory containing the .lo file.
-       dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
-       test "X$dir" = "X$file" && dir=.
-       ;;
-
-      *)
-       $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
-       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
-      -*) ;;
-      *)
-       # Do a test to see if this is really a libtool program.
-       if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-         # If there is no directory component, then add one.
-         case $file in
-         */* | *\\*) . $file ;;
-         *) . ./$file ;;
-         esac
-
-         # Transform arg to wrapped name.
-         file="$progdir/$program"
-       fi
-       ;;
-      esac
-      # Quote arguments (to preserve shell metacharacters).
-      file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
-      args="$args \"$file\""
-    done
-
-    if test -z "$run"; then
-      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
-             fi"
-      done
-
-      # Now prepare to actually exec the command.
-      exec_cmd="\$cmd$args"
-    else
-      # 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
-    fi
-    ;;
-
-  # libtool clean and uninstall mode
-  clean | uninstall)
-    modename="$modename: $mode"
-    rm="$nonopt"
-    files=
-    rmforce=
-    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) rm="$rm $arg"; rmforce=yes ;;
-      -*) rm="$rm $arg" ;;
-      *) files="$files $arg" ;;
-      esac
-    done
-
-    if test -z "$rm"; then
-      $echo "$modename: you must specify an RM program" 1>&2
-      $echo "$help" 1>&2
-      exit $EXIT_FAILURE
-    fi
-
-    rmdirs=
-
-    origobjdir="$objdir"
-    for file in $files; do
-      dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
-      if test "X$dir" = "X$file"; then
-       dir=.
-       objdir="$origobjdir"
-      else
-       objdir="$dir/$origobjdir"
-      fi
-      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
-      test "$mode" = uninstall && objdir="$dir"
-
-      # Remember objdir for removal later, being careful to avoid duplicates
-      if test "$mode" = clean; then
-       case " $rmdirs " in
-         *" $objdir "*) ;;
-         *) rmdirs="$rmdirs $objdir" ;;
-       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 test "$rmforce" = yes; then
-       continue
-      fi
-
-      rmfiles="$file"
-
-      case $name in
-      *.la)
-       # Possibly a libtool archive, so verify it.
-       if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-         . $dir/$name
-
-         # Delete the libtool libraries and symlinks.
-         for n in $library_names; do
-           rmfiles="$rmfiles $objdir/$n"
-         done
-         test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
-
-         case "$mode" in
-         clean)
-           case "  $library_names " in
-           # "  " in the beginning catches empty $dlname
-           *" $dlname "*) ;;
-           *) rmfiles="$rmfiles $objdir/$dlname" ;;
-           esac
-            test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
-           ;;
-         uninstall)
-           if test -n "$library_names"; then
-             # Do each command in the postuninstall commands.
-             cmds=$postuninstall_cmds
-             save_ifs="$IFS"; IFS='~'
-             for cmd in $cmds; do
-               IFS="$save_ifs"
-               eval cmd=\"$cmd\"
-               $show "$cmd"
-               $run eval "$cmd"
-               if test "$?" -ne 0 && test "$rmforce" != yes; then
-                 exit_status=1
-               fi
-             done
-             IFS="$save_ifs"
-           fi
-
-           if test -n "$old_library"; then
-             # Do each command in the old_postuninstall commands.
-             cmds=$old_postuninstall_cmds
-             save_ifs="$IFS"; IFS='~'
-             for cmd in $cmds; do
-               IFS="$save_ifs"
-               eval cmd=\"$cmd\"
-               $show "$cmd"
-               $run eval "$cmd"
-               if test "$?" -ne 0 && test "$rmforce" != yes; then
-                 exit_status=1
-               fi
-             done
-             IFS="$save_ifs"
-           fi
-           # FIXME: should reinstall the best remaining shared library.
-           ;;
-         esac
-       fi
-       ;;
-
-      *.lo)
-       # Possibly a libtool object, so verify it.
-       if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-
-         # Read the .lo file
-         . $dir/$name
-
-         # Add PIC object to the list of files to remove.
-         if test -n "$pic_object" \
-            && test "$pic_object" != none; then
-           rmfiles="$rmfiles $dir/$pic_object"
-         fi
-
-         # Add non-PIC object to the list of files to remove.
-         if test -n "$non_pic_object" \
-            && test "$non_pic_object" != none; then
-           rmfiles="$rmfiles $dir/$non_pic_object"
-         fi
-       fi
-       ;;
-
-      *)
-       if test "$mode" = clean ; then
-         noexename=$name
-         case $file in
-         *.exe)
-           file=`$echo $file|${SED} 's,.exe$,,'`
-           noexename=`$echo $name|${SED} 's,.exe$,,'`
-           # $file with .exe has already been added to rmfiles,
-           # add $file without .exe
-           rmfiles="$rmfiles $file"
-           ;;
-         esac
-         # Do a test to see if this is a libtool program.
-         if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
-           relink_command=
-           . $dir/$noexename
-
-           # note $name still contains .exe if it was in $file originally
-           # as does the version of $file that was added into $rmfiles
-           rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
-           if test "$fast_install" = yes && test -n "$relink_command"; then
-             rmfiles="$rmfiles $objdir/lt-$name"
-           fi
-           if test "X$noexename" != "X$name" ; then
-             rmfiles="$rmfiles $objdir/lt-${noexename}.c"
-           fi
-         fi
-       fi
-       ;;
-      esac
-      $show "$rm $rmfiles"
-      $run $rm $rmfiles || exit_status=1
-    done
-    objdir="$origobjdir"
-
-    # Try to remove the ${objdir}s in the directories where we deleted files
-    for dir in $rmdirs; do
-      if test -d "$dir"; then
-       $show "rmdir $dir"
-       $run rmdir $dir >/dev/null 2>&1
-      fi
-    done
-
-    exit $exit_status
-    ;;
-
-  "")
-    $echo "$modename: you must specify a MODE" 1>&2
-    $echo "$generic_help" 1>&2
-    exit $EXIT_FAILURE
-    ;;
-  esac
-
-  if test -z "$exec_cmd"; then
-    $echo "$modename: invalid operation mode \`$mode'" 1>&2
-    $echo "$generic_help" 1>&2
-    exit $EXIT_FAILURE
-  fi
-fi # test -z "$show_help"
-
-if test -n "$exec_cmd"; then
-  eval exec $exec_cmd
-  exit $EXIT_FAILURE
-fi
-
-# We need to display help for each of the modes.
-case $mode in
-"") $echo \
-"Usage: $modename [OPTION]... [MODE-ARG]...
-
-Provide generalized library-building support services.
-
-    --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
-    --finish          same as \`--mode=finish'
-    --help            display this help message and exit
-    --mode=MODE       use operation mode MODE [default=inferred from MODE-ARGS]
-    --quiet           same as \`--silent'
-    --silent          don't print informational messages
-    --tag=TAG         use configuration variables from tag TAG
-    --version         print version information
-
-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.  Try \`$modename --help --mode=MODE' for
-a more detailed description of MODE.
-
-Report bugs to <bug-libtool@gnu.org>."
-  exit $EXIT_SUCCESS
-  ;;
-
-clean)
-  $echo \
-"Usage: $modename [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: $modename [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
-  -prefer-pic       try to building PIC objects only
-  -prefer-non-pic   try to building non-PIC objects only
-  -static           always build a \`.o' file suitable for static linking
-
-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: $modename [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: $modename [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: $modename [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 rest of the components are interpreted as arguments to that command (only
-BSD-compatible install options are recognized)."
-  ;;
-
-link)
-  $echo \
-"Usage: $modename [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
-  -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
-  -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
-  -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]
-
-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: $modename [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."
-  ;;
-
-*)
-  $echo "$modename: invalid operation mode \`$mode'" 1>&2
-  $echo "$help" 1>&2
-  exit $EXIT_FAILURE
-  ;;
-esac
-
-$echo
-$echo "Try \`$modename --help' for more information about other modes."
-
-exit $?
-
-# The TAGs below are defined such that we never get into a situation
-# in which 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
-disable_libs=shared
-# ### END LIBTOOL TAG CONFIG: disable-shared
-
-# ### BEGIN LIBTOOL TAG CONFIG: disable-static
-disable_libs=static
-# ### END LIBTOOL TAG CONFIG: disable-static
-
-# Local Variables:
-# mode:shell-script
-# sh-indentation:2
-# End:
diff --git a/missing b/missing
deleted file mode 100755 (executable)
index 894e786..0000000
--- a/missing
+++ /dev/null
@@ -1,360 +0,0 @@
-#! /bin/sh
-# Common stub for a few missing GNU programs while installing.
-
-scriptversion=2005-06-08.21
-
-# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
-#   Free Software Foundation, Inc.
-# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301, USA.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-if test $# -eq 0; then
-  echo 1>&2 "Try \`$0 --help' for more information"
-  exit 1
-fi
-
-run=:
-
-# In the cases where this matters, `missing' is being run in the
-# srcdir already.
-if test -f configure.ac; then
-  configure_ac=configure.ac
-else
-  configure_ac=configure.in
-fi
-
-msg="missing on your system"
-
-case "$1" in
---run)
-  # Try to run requested program, and just exit if it succeeds.
-  run=
-  shift
-  "$@" && exit 0
-  # Exit code 63 means version mismatch.  This often happens
-  # when the user try to use an ancient version of a tool on
-  # a file that requires a minimum version.  In this case we
-  # we should proceed has if the program had been absent, or
-  # if --run hadn't been passed.
-  if test $? = 63; then
-    run=:
-    msg="probably too old"
-  fi
-  ;;
-
-  -h|--h|--he|--hel|--help)
-    echo "\
-$0 [OPTION]... PROGRAM [ARGUMENT]...
-
-Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
-error status if there is no known handling for PROGRAM.
-
-Options:
-  -h, --help      display this help and exit
-  -v, --version   output version information and exit
-  --run           try to run the given command, and emulate it if it fails
-
-Supported PROGRAM values:
-  aclocal      touch file \`aclocal.m4'
-  autoconf     touch file \`configure'
-  autoheader   touch file \`config.h.in'
-  automake     touch all \`Makefile.in' files
-  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
-  flex         create \`lex.yy.c', if possible, from existing .c
-  help2man     touch the output file
-  lex          create \`lex.yy.c', if possible, from existing .c
-  makeinfo     touch the output file
-  tar          try tar, gnutar, gtar, then tar without non-portable flags
-  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]
-
-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
-
-# Now exit if we have it, but it failed.  Also exit now if we
-# don't have it and --version was passed (most likely to detect
-# the program).
-case "$1" in
-  lex|yacc)
-    # Not GNU programs, they don't have --version.
-    ;;
-
-  tar)
-    if test -n "$run"; then
-       echo 1>&2 "ERROR: \`tar' requires --run"
-       exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       exit 1
-    fi
-    ;;
-
-  *)
-    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
-       # We have it, but it failed.
-       exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       # Could not run --version or --help.  This is probably someone
-       # running `$TOOL --version' or `$TOOL --help' to check whether
-       # $TOOL exists and not knowing $TOOL uses missing.
-       exit 1
-    fi
-    ;;
-esac
-
-# If it does not exist, or fails to run (possibly an outdated version),
-# try to emulate it.
-case "$1" in
-  aclocal*)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
-         to install the \`Automake' and \`Perl' packages.  Grab them from
-         any GNU archive site."
-    touch aclocal.m4
-    ;;
-
-  autoconf)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`${configure_ac}'.  You might want to install the
-         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
-         archive site."
-    touch configure
-    ;;
-
-  autoheader)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
-         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
-         from any GNU archive site."
-    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
-    test -z "$files" && files="config.h"
-    touch_files=
-    for f in $files; do
-      case "$f" in
-      *:*) touch_files="$touch_files "`echo "$f" |
-                                      sed -e 's/^[^:]*://' -e 's/:.*//'`;;
-      *) touch_files="$touch_files $f.in";;
-      esac
-    done
-    touch $touch_files
-    ;;
-
-  automake*)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
-         You might want to install the \`Automake' and \`Perl' packages.
-         Grab them from any GNU archive site."
-    find . -type f -name Makefile.am -print |
-          sed 's/\.am$/.in/' |
-          while read f; do touch "$f"; done
-    ;;
-
-  autom4te)
-    echo 1>&2 "\
-WARNING: \`$1' is needed, but is $msg.
-         You might have modified some files without having the
-         proper tools for further handling them.
-         You can get \`$1' as part of \`Autoconf' from any GNU
-         archive site."
-
-    file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
-    test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
-    if test -f "$file"; then
-       touch $file
-    else
-       test -z "$file" || exec >$file
-       echo "#! /bin/sh"
-       echo "# Created by GNU Automake missing as a replacement of"
-       echo "#  $ $@"
-       echo "exit 0"
-       chmod +x $file
-       exit 1
-    fi
-    ;;
-
-  bison|yacc)
-    echo 1>&2 "\
-WARNING: \`$1' $msg.  You should only need it if
-         you modified a \`.y' file.  You may need the \`Bison' package
-         in order for those modifications to take effect.  You can get
-         \`Bison' from any GNU archive site."
-    rm -f y.tab.c y.tab.h
-    if [ $# -ne 1 ]; then
-        eval LASTARG="\${$#}"
-       case "$LASTARG" in
-       *.y)
-           SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
-           if [ -f "$SRCFILE" ]; then
-                cp "$SRCFILE" y.tab.c
-           fi
-           SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
-           if [ -f "$SRCFILE" ]; then
-                cp "$SRCFILE" y.tab.h
-           fi
-         ;;
-       esac
-    fi
-    if [ ! -f y.tab.h ]; then
-       echo >y.tab.h
-    fi
-    if [ ! -f y.tab.c ]; then
-       echo 'main() { return 0; }' >y.tab.c
-    fi
-    ;;
-
-  lex|flex)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified a \`.l' file.  You may need the \`Flex' package
-         in order for those modifications to take effect.  You can get
-         \`Flex' from any GNU archive site."
-    rm -f lex.yy.c
-    if [ $# -ne 1 ]; then
-        eval LASTARG="\${$#}"
-       case "$LASTARG" in
-       *.l)
-           SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
-           if [ -f "$SRCFILE" ]; then
-                cp "$SRCFILE" lex.yy.c
-           fi
-         ;;
-       esac
-    fi
-    if [ ! -f lex.yy.c ]; then
-       echo 'main() { return 0; }' >lex.yy.c
-    fi
-    ;;
-
-  help2man)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-        you modified a dependency of a manual page.  You may need the
-        \`Help2man' package in order for those modifications to take
-        effect.  You can get \`Help2man' from any GNU archive site."
-
-    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
-    if test -z "$file"; then
-       file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
-    fi
-    if [ -f "$file" ]; then
-       touch $file
-    else
-       test -z "$file" || exec >$file
-       echo ".ab help2man is required to generate this page"
-       exit 1
-    fi
-    ;;
-
-  makeinfo)
-    echo 1>&2 "\
-WARNING: \`$1' is $msg.  You should only need it if
-         you modified a \`.texi' or \`.texinfo' file, or any other file
-         indirectly affecting the aspect of the manual.  The spurious
-         call might also be the consequence of using a buggy \`make' (AIX,
-         DU, IRIX).  You might want to install the \`Texinfo' package or
-         the \`GNU make' package.  Grab either from any GNU archive site."
-    # The file to touch is that specified with -o ...
-    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
-    if test -z "$file"; then
-      # ... or it is the one specified with @setfilename ...
-      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
-      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile`
-      # ... or it is derived from the source name (dir/f.texi becomes f.info)
-      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
-    fi
-    # If the file does not exist, the user really needs makeinfo;
-    # let's fail without touching anything.
-    test -f $file || exit 1
-    touch $file
-    ;;
-
-  tar)
-    shift
-
-    # We have already tried tar in the generic part.
-    # Look for gnutar/gtar before invocation to avoid ugly error
-    # messages.
-    if (gnutar --version > /dev/null 2>&1); then
-       gnutar "$@" && exit 0
-    fi
-    if (gtar --version > /dev/null 2>&1); then
-       gtar "$@" && exit 0
-    fi
-    firstarg="$1"
-    if shift; then
-       case "$firstarg" in
-       *o*)
-           firstarg=`echo "$firstarg" | sed s/o//`
-           tar "$firstarg" "$@" && exit 0
-           ;;
-       esac
-       case "$firstarg" in
-       *h*)
-           firstarg=`echo "$firstarg" | sed s/h//`
-           tar "$firstarg" "$@" && exit 0
-           ;;
-       esac
-    fi
-
-    echo 1>&2 "\
-WARNING: I can't seem to be able to run \`tar' with the given arguments.
-         You may want to install GNU tar or Free paxutils, or check the
-         command line arguments."
-    exit 1
-    ;;
-
-  *)
-    echo 1>&2 "\
-WARNING: \`$1' is needed, and is $msg.
-         You might have modified some files without having the
-         proper tools for further handling them.  Check the \`README' file,
-         it often tells you about the needed prerequisites for installing
-         this package.  You may also peek at any GNU archive site, in case
-         some other package would contain this missing \`$1' program."
-    exit 1
-    ;;
-esac
-
-exit 0
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-end: "$"
-# End:
diff --git a/xtables.c b/xtables.c
deleted file mode 100644 (file)
index a97bdaa..0000000
--- a/xtables.c
+++ /dev/null
@@ -1,1227 +0,0 @@
-/*
- * (C) 2000-2006 by the netfilter coreteam <coreteam@netfilter.org>:
- *
- *     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 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, write to the Free Software
- *     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <netdb.h>
-#include <stdarg.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <arpa/inet.h>
-
-#include <xtables.h>
-
-#ifndef NO_SHARED_LIBS
-#include <dlfcn.h>
-#endif
-
-#define NPROTO 255
-
-#ifndef PROC_SYS_MODPROBE
-#define PROC_SYS_MODPROBE "/proc/sys/kernel/modprobe"
-#endif
-
-char *lib_dir;
-
-/* the path to command to load kernel module */
-const char *modprobe_program = NULL;
-
-/* Keeping track of external matches and targets: linked lists.  */
-struct xtables_match *xtables_matches;
-struct xtables_target *xtables_targets;
-
-void *fw_calloc(size_t count, size_t size)
-{
-       void *p;
-
-       if ((p = calloc(count, size)) == NULL) {
-               perror("ip[6]tables: calloc failed");
-               exit(1);
-       }
-
-       return p;
-}
-
-void *fw_malloc(size_t size)
-{
-       void *p;
-
-       if ((p = malloc(size)) == NULL) {
-               perror("ip[6]tables: malloc failed");
-               exit(1);
-       }
-
-       return p;
-}
-
-static char *get_modprobe(void)
-{
-       int procfile;
-       char *ret;
-
-#define PROCFILE_BUFSIZ        1024
-       procfile = open(PROC_SYS_MODPROBE, O_RDONLY);
-       if (procfile < 0)
-               return NULL;
-
-       ret = (char *) malloc(PROCFILE_BUFSIZ);
-       if (ret) {
-               memset(ret, 0, PROCFILE_BUFSIZ);
-               switch (read(procfile, ret, PROCFILE_BUFSIZ)) {
-               case -1: goto fail;
-               case PROCFILE_BUFSIZ: goto fail; /* Partial read.  Wierd */
-               }
-               if (ret[strlen(ret)-1]=='\n') 
-                       ret[strlen(ret)-1]=0;
-               close(procfile);
-               return ret;
-       }
- fail:
-       free(ret);
-       close(procfile);
-       return NULL;
-}
-
-int xtables_insmod(const char *modname, const char *modprobe, int quiet)
-{
-       char *buf = NULL;
-       char *argv[4];
-       int status;
-
-       /* If they don't explicitly set it, read out of kernel */
-       if (!modprobe) {
-               buf = get_modprobe();
-               if (!buf)
-                       return -1;
-               modprobe = buf;
-       }
-
-       switch (fork()) {
-       case 0:
-               argv[0] = (char *)modprobe;
-               argv[1] = (char *)modname;
-               if (quiet) {
-                       argv[2] = "-q";
-                       argv[3] = NULL;
-               } else {
-                       argv[2] = NULL;
-                       argv[3] = NULL;
-               }
-               execv(argv[0], argv);
-
-               /* not usually reached */
-               exit(1);
-       case -1:
-               return -1;
-
-       default: /* parent */
-               wait(&status);
-       }
-
-       free(buf);
-       if (WIFEXITED(status) && WEXITSTATUS(status) == 0)
-               return 0;
-       return -1;
-}
-
-int load_xtables_ko(const char *modprobe, int quiet)
-{
-       static int loaded = 0;
-       static int ret = -1;
-
-       if (!loaded) {
-               ret = xtables_insmod(afinfo.kmod, modprobe, quiet);
-               loaded = (ret == 0);
-       }
-
-       return ret;
-}
-
-int string_to_number_ll(const char *s, unsigned long long min,
-                       unsigned long long max, unsigned long long *ret)
-{
-       unsigned long long number;
-       char *end;
-
-       /* Handle hex, octal, etc. */
-       errno = 0;
-       number = strtoull(s, &end, 0);
-       if (*end == '\0' && end != s) {
-               /* we parsed a number, let's see if we want this */
-               if (errno != ERANGE && min <= number && (!max || number <= max)) {
-                       *ret = number;
-                       return 0;
-               }
-       }
-       return -1;
-}
-
-int string_to_number_l(const char *s, unsigned long min, unsigned long max,
-                      unsigned long *ret)
-{
-       int result;
-       unsigned long long number;
-
-       result = string_to_number_ll(s, min, max, &number);
-       *ret = (unsigned long)number;
-
-       return result;
-}
-
-int string_to_number(const char *s, unsigned int min, unsigned int max,
-               unsigned int *ret)
-{
-       int result;
-       unsigned long number;
-
-       result = string_to_number_l(s, min, max, &number);
-       *ret = (unsigned int)number;
-
-       return result;
-}
-
-/*
- * strtonum{,l} - string to number conversion
- *
- * If @end is NULL, we assume the caller does not want
- * a case like "15a", so reject it.
- */
-bool strtonuml(const char *s, char **end, unsigned long *value,
-               unsigned long min, unsigned long max)
-{
-       unsigned long v;
-       char *my_end;
-
-       errno = 0;
-       v = strtoul(s, &my_end, 0);
-
-       if (my_end == s)
-               return false;
-       if (end != NULL)
-               *end = my_end;
-
-       if (errno != ERANGE && min <= v && (max == 0 || v <= max)) {
-               if (value != NULL)
-                       *value = v;
-               if (end == NULL)
-                       return *my_end == '\0';
-               return true;
-       }
-
-       return false;
-}
-
-bool strtonum(const char *s, char **end, unsigned int *value,
-                  unsigned int min, unsigned int max)
-{
-       unsigned long v;
-       bool ret;
-
-       ret = strtonuml(s, end, &v, min, max);
-       if (value != NULL)
-               *value = v;
-       return ret;
-}
-
-int service_to_port(const char *name, const char *proto)
-{
-       struct servent *service;
-
-       if ((service = getservbyname(name, proto)) != NULL)
-               return ntohs((unsigned short) service->s_port);
-
-       return -1;
-}
-
-u_int16_t parse_port(const char *port, const char *proto)
-{
-       unsigned int portnum;
-
-       if ((string_to_number(port, 0, 65535, &portnum)) != -1 ||
-           (portnum = service_to_port(port, proto)) != (unsigned)-1)
-               return (u_int16_t)portnum;
-
-       exit_error(PARAMETER_PROBLEM,
-                  "invalid port/service `%s' specified", port);
-}
-
-void parse_interface(const char *arg, char *vianame, unsigned char *mask)
-{
-       int vialen = strlen(arg);
-       unsigned int i;
-
-       memset(mask, 0, IFNAMSIZ);
-       memset(vianame, 0, IFNAMSIZ);
-
-       if (vialen + 1 > IFNAMSIZ)
-               exit_error(PARAMETER_PROBLEM,
-                          "interface name `%s' must be shorter than IFNAMSIZ"
-                          " (%i)", arg, IFNAMSIZ-1);
-
-       strcpy(vianame, arg);
-       if ((vialen == 0) || (vialen == 1 && vianame[0] == '+'))
-               memset(mask, 0, IFNAMSIZ);
-       else if (vianame[vialen - 1] == '+') {
-               memset(mask, 0xFF, vialen - 1);
-               memset(mask + vialen - 1, 0, IFNAMSIZ - vialen + 1);
-               /* Don't remove `+' here! -HW */
-       } else {
-               /* Include nul-terminator in match */
-               memset(mask, 0xFF, vialen + 1);
-               memset(mask + vialen + 1, 0, IFNAMSIZ - vialen - 1);
-               for (i = 0; vianame[i]; i++) {
-                       if (vianame[i] == ':' ||
-                           vianame[i] == '!' ||
-                           vianame[i] == '*') {
-                               fprintf(stderr,
-                                       "Warning: weird character in interface"
-                                       " `%s' (No aliases, :, ! or *).\n",
-                                       vianame);
-                               break;
-                       }
-               }
-       }
-}
-
-#ifndef NO_SHARED_LIBS
-static void *load_extension(const char *search_path, const char *prefix,
-    const char *name, bool is_target)
-{
-       const char *dir = search_path, *next;
-       void *ptr = NULL;
-       struct stat sb;
-       char path[256];
-
-       do {
-               next = strchr(dir, ':');
-               if (next == NULL)
-                       next = dir + strlen(dir);
-               snprintf(path, sizeof(path), "%.*s/libxt_%s.so",
-                        (unsigned int)(next - dir), dir, name);
-
-               if (dlopen(path, RTLD_NOW) != NULL) {
-                       /* Found library.  If it didn't register itself,
-                          maybe they specified target as match. */
-                       if (is_target)
-                               ptr = find_target(name, DONT_LOAD);
-                       else
-                               ptr = find_match(name, DONT_LOAD, NULL);
-               } else if (stat(path, &sb) == 0) {
-                       fprintf(stderr, "%s: %s\n", path, dlerror());
-               }
-
-               if (ptr != NULL)
-                       return ptr;
-
-               snprintf(path, sizeof(path), "%.*s/%s%s.so",
-                        (unsigned int)(next - dir), dir, prefix, name);
-               if (dlopen(path, RTLD_NOW) != NULL) {
-                       if (is_target)
-                               ptr = find_target(name, DONT_LOAD);
-                       else
-                               ptr = find_match(name, DONT_LOAD, NULL);
-               } else if (stat(path, &sb) == 0) {
-                       fprintf(stderr, "%s: %s\n", path, dlerror());
-               }
-
-               if (ptr != NULL)
-                       return ptr;
-
-               dir = next + 1;
-       } while (*next != '\0');
-
-       return NULL;
-}
-#endif
-
-struct xtables_match *find_match(const char *name, enum xt_tryload tryload,
-                                struct xtables_rule_match **matches)
-{
-       struct xtables_match *ptr;
-       const char *icmp6 = "icmp6";
-
-       /* This is ugly as hell. Nonetheless, there is no way of changing
-        * this without hurting backwards compatibility */
-       if ( (strcmp(name,"icmpv6") == 0) ||
-            (strcmp(name,"ipv6-icmp") == 0) ||
-            (strcmp(name,"icmp6") == 0) )
-               name = icmp6;
-
-       for (ptr = xtables_matches; ptr; ptr = ptr->next) {
-               if (strcmp(name, ptr->name) == 0) {
-                       struct xtables_match *clone;
-
-                       /* First match of this type: */
-                       if (ptr->m == NULL)
-                               break;
-
-                       /* Second and subsequent clones */
-                       clone = fw_malloc(sizeof(struct xtables_match));
-                       memcpy(clone, ptr, sizeof(struct xtables_match));
-                       clone->mflags = 0;
-                       /* This is a clone: */
-                       clone->next = clone;
-
-                       ptr = clone;
-                       break;
-               }
-       }
-
-#ifndef NO_SHARED_LIBS
-       if (!ptr && tryload != DONT_LOAD && tryload != DURING_LOAD) {
-               ptr = load_extension(lib_dir, afinfo.libprefix, name, false);
-
-               if (ptr == NULL && tryload == LOAD_MUST_SUCCEED)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Couldn't load match `%s':%s\n",
-                                  name, dlerror());
-       }
-#else
-       if (ptr && !ptr->loaded) {
-               if (tryload != DONT_LOAD)
-                       ptr->loaded = 1;
-               else
-                       ptr = NULL;
-       }
-       if(!ptr && (tryload == LOAD_MUST_SUCCEED)) {
-               exit_error(PARAMETER_PROBLEM,
-                          "Couldn't find match `%s'\n", name);
-       }
-#endif
-
-       if (ptr && matches) {
-               struct xtables_rule_match **i;
-               struct xtables_rule_match *newentry;
-
-               newentry = fw_malloc(sizeof(struct xtables_rule_match));
-
-               for (i = matches; *i; i = &(*i)->next) {
-                       if (strcmp(name, (*i)->match->name) == 0)
-                               (*i)->completed = 1;
-               }
-               newentry->match = ptr;
-               newentry->completed = 0;
-               newentry->next = NULL;
-               *i = newentry;
-       }
-
-       return ptr;
-}
-
-
-struct xtables_target *find_target(const char *name, enum xt_tryload tryload)
-{
-       struct xtables_target *ptr;
-
-       /* Standard target? */
-       if (strcmp(name, "") == 0
-           || strcmp(name, XTC_LABEL_ACCEPT) == 0
-           || strcmp(name, XTC_LABEL_DROP) == 0
-           || strcmp(name, XTC_LABEL_QUEUE) == 0
-           || strcmp(name, XTC_LABEL_RETURN) == 0)
-               name = "standard";
-
-       for (ptr = xtables_targets; ptr; ptr = ptr->next) {
-               if (strcmp(name, ptr->name) == 0)
-                       break;
-       }
-
-#ifndef NO_SHARED_LIBS
-       if (!ptr && tryload != DONT_LOAD && tryload != DURING_LOAD) {
-               ptr = load_extension(lib_dir, afinfo.libprefix, name, true);
-
-               if (ptr == NULL && tryload == LOAD_MUST_SUCCEED)
-                       exit_error(PARAMETER_PROBLEM,
-                                  "Couldn't load target `%s':%s\n",
-                                  name, dlerror());
-       }
-#else
-       if (ptr && !ptr->loaded) {
-               if (tryload != DONT_LOAD)
-                       ptr->loaded = 1;
-               else
-                       ptr = NULL;
-       }
-       if(!ptr && (tryload == LOAD_MUST_SUCCEED)) {
-               exit_error(PARAMETER_PROBLEM,
-                          "Couldn't find target `%s'\n", name);
-       }
-#endif
-
-       if (ptr)
-               ptr->used = 1;
-
-       return ptr;
-}
-
-static int compatible_revision(const char *name, u_int8_t revision, int opt)
-{
-       struct xt_get_revision rev;
-       socklen_t s = sizeof(rev);
-       int max_rev, sockfd;
-
-       sockfd = socket(afinfo.family, SOCK_RAW, IPPROTO_RAW);
-       if (sockfd < 0) {
-               if (errno == EPERM) {
-                       /* revision 0 is always supported. */
-                       if (revision != 0)
-                               fprintf(stderr, "Could not determine whether "
-                                               "revision %u is supported, "
-                                               "assuming it is.\n",
-                                       revision);
-                       return 1;
-               }
-               fprintf(stderr, "Could not open socket to kernel: %s\n",
-                       strerror(errno));
-               exit(1);
-       }
-
-       load_xtables_ko(modprobe_program, 1);
-
-       strcpy(rev.name, name);
-       rev.revision = revision;
-
-       max_rev = getsockopt(sockfd, afinfo.ipproto, opt, &rev, &s);
-       if (max_rev < 0) {
-               /* Definitely don't support this? */
-               if (errno == ENOENT || errno == EPROTONOSUPPORT) {
-                       close(sockfd);
-                       return 0;
-               } else if (errno == ENOPROTOOPT) {
-                       close(sockfd);
-                       /* Assume only revision 0 support (old kernel) */
-                       return (revision == 0);
-               } else {
-                       fprintf(stderr, "getsockopt failed strangely: %s\n",
-                               strerror(errno));
-                       exit(1);
-               }
-       }
-       close(sockfd);
-       return 1;
-}
-
-
-static int compatible_match_revision(const char *name, u_int8_t revision)
-{
-       return compatible_revision(name, revision, afinfo.so_rev_match);
-}
-
-static int compatible_target_revision(const char *name, u_int8_t revision)
-{
-       return compatible_revision(name, revision, afinfo.so_rev_target);
-}
-
-void xtables_register_match(struct xtables_match *me)
-{
-       struct xtables_match **i, *old;
-
-       if (strcmp(me->version, program_version) != 0) {
-               fprintf(stderr, "%s: match `%s' v%s (I'm v%s).\n",
-                       program_name, me->name, me->version, program_version);
-               exit(1);
-       }
-
-       /* Revision field stole a char from name. */
-       if (strlen(me->name) >= XT_FUNCTION_MAXNAMELEN-1) {
-               fprintf(stderr, "%s: target `%s' has invalid name\n",
-                       program_name, me->name);
-               exit(1);
-       }
-
-       if (me->family >= NPROTO) {
-               fprintf(stderr,
-                       "%s: BUG: match %s has invalid protocol family\n",
-                       program_name, me->name);
-               exit(1);
-       }
-
-       /* ignore not interested match */
-       if (me->family != afinfo.family && me->family != AF_UNSPEC)
-               return;
-
-       old = find_match(me->name, DURING_LOAD, NULL);
-       if (old) {
-               if (old->revision == me->revision &&
-                   old->family == me->family) {
-                       fprintf(stderr,
-                               "%s: match `%s' already registered.\n",
-                               program_name, me->name);
-                       exit(1);
-               }
-
-               /* Now we have two (or more) options, check compatibility. */
-               if (compatible_match_revision(old->name, old->revision)
-                   && old->revision > me->revision)
-                       return;
-
-               /* See if new match can be used. */
-               if (!compatible_match_revision(me->name, me->revision))
-                       return;
-
-               /* Prefer !AF_UNSPEC over AF_UNSPEC for same revision. */
-               if (old->revision == me->revision && me->family == AF_UNSPEC)
-                       return;
-
-               /* Delete old one. */
-               for (i = &xtables_matches; *i!=old; i = &(*i)->next);
-               *i = old->next;
-       }
-
-       if (me->size != XT_ALIGN(me->size)) {
-               fprintf(stderr, "%s: match `%s' has invalid size %u.\n",
-                       program_name, me->name, (unsigned int)me->size);
-               exit(1);
-       }
-
-       /* Append to list. */
-       for (i = &xtables_matches; *i; i = &(*i)->next);
-       me->next = NULL;
-       *i = me;
-
-       me->m = NULL;
-       me->mflags = 0;
-}
-
-void xtables_register_target(struct xtables_target *me)
-{
-       struct xtables_target *old;
-
-       if (strcmp(me->version, program_version) != 0) {
-               fprintf(stderr, "%s: target `%s' v%s (I'm v%s).\n",
-                       program_name, me->name, me->version, program_version);
-               exit(1);
-       }
-
-       /* Revision field stole a char from name. */
-       if (strlen(me->name) >= XT_FUNCTION_MAXNAMELEN-1) {
-               fprintf(stderr, "%s: target `%s' has invalid name\n",
-                       program_name, me->name);
-               exit(1);
-       }
-
-       if (me->family >= NPROTO) {
-               fprintf(stderr,
-                       "%s: BUG: target %s has invalid protocol family\n",
-                       program_name, me->name);
-               exit(1);
-       }
-
-       /* ignore not interested target */
-       if (me->family != afinfo.family && me->family != AF_UNSPEC)
-               return;
-
-       old = find_target(me->name, DURING_LOAD);
-       if (old) {
-               struct xtables_target **i;
-
-               if (old->revision == me->revision &&
-                   old->family == me->family) {
-                       fprintf(stderr,
-                               "%s: target `%s' already registered.\n",
-                               program_name, me->name);
-                       exit(1);
-               }
-
-               /* Now we have two (or more) options, check compatibility. */
-               if (compatible_target_revision(old->name, old->revision)
-                   && old->revision > me->revision)
-                       return;
-
-               /* See if new target can be used. */
-               if (!compatible_target_revision(me->name, me->revision))
-                       return;
-
-               /* Prefer !AF_UNSPEC over AF_UNSPEC for same revision. */
-               if (old->revision == me->revision && me->family == AF_UNSPEC)
-                       return;
-
-               /* Delete old one. */
-               for (i = &xtables_targets; *i!=old; i = &(*i)->next);
-               *i = old->next;
-       }
-
-       if (me->size != XT_ALIGN(me->size)) {
-               fprintf(stderr, "%s: target `%s' has invalid size %u.\n",
-                       program_name, me->name, (unsigned int)me->size);
-               exit(1);
-       }
-
-       /* Prepend to list. */
-       me->next = xtables_targets;
-       xtables_targets = me;
-       me->t = NULL;
-       me->tflags = 0;
-}
-
-void param_act(unsigned int status, const char *p1, ...)
-{
-       const char *p2, *p3;
-       va_list args;
-       bool b;
-
-       va_start(args, p1);
-
-       switch (status) {
-       case P_ONLY_ONCE:
-               p2 = va_arg(args, const char *);
-               b  = va_arg(args, unsigned int);
-               if (!b)
-                       return;
-               exit_error(PARAMETER_PROBLEM,
-                          "%s: \"%s\" option may only be specified once",
-                          p1, p2);
-               break;
-       case P_NO_INVERT:
-               p2 = va_arg(args, const char *);
-               b  = va_arg(args, unsigned int);
-               if (!b)
-                       return;
-               exit_error(PARAMETER_PROBLEM,
-                          "%s: \"%s\" option cannot be inverted", p1, p2);
-               break;
-       case P_BAD_VALUE:
-               p2 = va_arg(args, const char *);
-               p3 = va_arg(args, const char *);
-               exit_error(PARAMETER_PROBLEM,
-                          "%s: Bad value for \"%s\" option: \"%s\"",
-                          p1, p2, p3);
-               break;
-       case P_ONE_ACTION:
-               b = va_arg(args, unsigned int);
-               if (!b)
-                       return;
-               exit_error(PARAMETER_PROBLEM,
-                          "%s: At most one action is possible", p1);
-               break;
-       default:
-               exit_error(status, p1, args);
-               break;
-       }
-
-       va_end(args);
-}
-
-const char *ipaddr_to_numeric(const struct in_addr *addrp)
-{
-       static char buf[20];
-       const unsigned char *bytep = (const void *)&addrp->s_addr;
-
-       sprintf(buf, "%u.%u.%u.%u", bytep[0], bytep[1], bytep[2], bytep[3]);
-       return buf;
-}
-
-static const char *ipaddr_to_host(const struct in_addr *addr)
-{
-       struct hostent *host;
-
-       host = gethostbyaddr(addr, sizeof(struct in_addr), AF_INET);
-       if (host == NULL)
-               return NULL;
-
-       return host->h_name;
-}
-
-static const char *ipaddr_to_network(const struct in_addr *addr)
-{
-       struct netent *net;
-
-       if ((net = getnetbyaddr(ntohl(addr->s_addr), AF_INET)) != NULL)
-               return net->n_name;
-
-       return NULL;
-}
-
-const char *ipaddr_to_anyname(const struct in_addr *addr)
-{
-       const char *name;
-
-       if ((name = ipaddr_to_host(addr)) != NULL ||
-           (name = ipaddr_to_network(addr)) != NULL)
-               return name;
-
-       return ipaddr_to_numeric(addr);
-}
-
-const char *ipmask_to_numeric(const struct in_addr *mask)
-{
-       static char buf[20];
-       uint32_t maskaddr, bits;
-       int i;
-
-       maskaddr = ntohl(mask->s_addr);
-
-       if (maskaddr == 0xFFFFFFFFL)
-               /* we don't want to see "/32" */
-               return "";
-
-       i = 32;
-       bits = 0xFFFFFFFEL;
-       while (--i >= 0 && maskaddr != bits)
-               bits <<= 1;
-       if (i >= 0)
-               sprintf(buf, "/%d", i);
-       else
-               /* mask was not a decent combination of 1's and 0's */
-               sprintf(buf, "/%s", ipaddr_to_numeric(mask));
-
-       return buf;
-}
-
-static struct in_addr *__numeric_to_ipaddr(const char *dotted, bool is_mask)
-{
-       static struct in_addr addr;
-       unsigned char *addrp;
-       unsigned int onebyte;
-       char buf[20], *p, *q;
-       int i;
-
-       /* copy dotted string, because we need to modify it */
-       strncpy(buf, dotted, sizeof(buf) - 1);
-       buf[sizeof(buf) - 1] = '\0';
-       addrp = (void *)&addr.s_addr;
-
-       p = buf;
-       for (i = 0; i < 3; ++i) {
-               if ((q = strchr(p, '.')) == NULL) {
-                       if (is_mask)
-                               return NULL;
-
-                       /* autocomplete, this is a network address */
-                       if (!strtonum(p, NULL, &onebyte, 0, 255))
-                               return NULL;
-
-                       addrp[i] = onebyte;
-                       while (i < 3)
-                               addrp[++i] = 0;
-
-                       return &addr;
-               }
-
-               *q = '\0';
-               if (!strtonum(p, NULL, &onebyte, 0, 255))
-                       return NULL;
-
-               addrp[i] = onebyte;
-               p = q + 1;
-       }
-
-       /* we have checked 3 bytes, now we check the last one */
-       if (!strtonum(p, NULL, &onebyte, 0, 255))
-               return NULL;
-
-       addrp[3] = onebyte;
-       return &addr;
-}
-
-struct in_addr *numeric_to_ipaddr(const char *dotted)
-{
-       return __numeric_to_ipaddr(dotted, false);
-}
-
-struct in_addr *numeric_to_ipmask(const char *dotted)
-{
-       return __numeric_to_ipaddr(dotted, true);
-}
-
-static struct in_addr *network_to_ipaddr(const char *name)
-{
-       static struct in_addr addr;
-       struct netent *net;
-
-       if ((net = getnetbyname(name)) != NULL) {
-               if (net->n_addrtype != AF_INET)
-                       return NULL;
-               addr.s_addr = htonl(net->n_net);
-               return &addr;
-       }
-
-       return NULL;
-}
-
-static struct in_addr *host_to_ipaddr(const char *name, unsigned int *naddr)
-{
-       struct hostent *host;
-       struct in_addr *addr;
-       unsigned int i;
-
-       *naddr = 0;
-       if ((host = gethostbyname(name)) != NULL) {
-               if (host->h_addrtype != AF_INET ||
-                   host->h_length != sizeof(struct in_addr))
-                       return NULL;
-
-               while (host->h_addr_list[*naddr] != NULL)
-                       ++*naddr;
-               addr = fw_calloc(*naddr, sizeof(struct in_addr) * *naddr);
-               for (i = 0; i < *naddr; i++)
-                       memcpy(&addr[i], host->h_addr_list[i],
-                              sizeof(struct in_addr));
-               return addr;
-       }
-
-       return NULL;
-}
-
-static struct in_addr *
-ipparse_hostnetwork(const char *name, unsigned int *naddrs)
-{
-       struct in_addr *addrptmp, *addrp;
-
-       if ((addrptmp = numeric_to_ipaddr(name)) != NULL ||
-           (addrptmp = network_to_ipaddr(name)) != NULL) {
-               addrp = fw_malloc(sizeof(struct in_addr));
-               memcpy(addrp, addrptmp, sizeof(*addrp));
-               *naddrs = 1;
-               return addrp;
-       }
-       if ((addrptmp = host_to_ipaddr(name, naddrs)) != NULL)
-               return addrptmp;
-
-       exit_error(PARAMETER_PROBLEM, "host/network `%s' not found", name);
-}
-
-static struct in_addr *parse_ipmask(const char *mask)
-{
-       static struct in_addr maskaddr;
-       struct in_addr *addrp;
-       unsigned int bits;
-
-       if (mask == NULL) {
-               /* no mask at all defaults to 32 bits */
-               maskaddr.s_addr = 0xFFFFFFFF;
-               return &maskaddr;
-       }
-       if ((addrp = numeric_to_ipmask(mask)) != NULL)
-               /* dotted_to_addr already returns a network byte order addr */
-               return addrp;
-       if (string_to_number(mask, 0, 32, &bits) == -1)
-               exit_error(PARAMETER_PROBLEM,
-                          "invalid mask `%s' specified", mask);
-       if (bits != 0) {
-               maskaddr.s_addr = htonl(0xFFFFFFFF << (32 - bits));
-               return &maskaddr;
-       }
-
-       maskaddr.s_addr = 0U;
-       return &maskaddr;
-}
-
-void ipparse_hostnetworkmask(const char *name, struct in_addr **addrpp,
-                             struct in_addr *maskp, unsigned int *naddrs)
-{
-       unsigned int i, j, k, n;
-       struct in_addr *addrp;
-       char buf[256], *p;
-
-       strncpy(buf, name, sizeof(buf) - 1);
-       buf[sizeof(buf) - 1] = '\0';
-       if ((p = strrchr(buf, '/')) != NULL) {
-               *p = '\0';
-               addrp = parse_ipmask(p + 1);
-       } else {
-               addrp = parse_ipmask(NULL);
-       }
-       memcpy(maskp, addrp, sizeof(*maskp));
-
-       /* if a null mask is given, the name is ignored, like in "any/0" */
-       if (maskp->s_addr == 0U)
-               strcpy(buf, "0.0.0.0");
-
-       addrp = *addrpp = ipparse_hostnetwork(buf, naddrs);
-       n = *naddrs;
-       for (i = 0, j = 0; i < n; ++i) {
-               addrp[j++].s_addr &= maskp->s_addr;
-               for (k = 0; k < j - 1; ++k)
-                       if (addrp[k].s_addr == addrp[j-1].s_addr) {
-                               --*naddrs;
-                               --j;
-                               break;
-                       }
-       }
-}
-
-const char *ip6addr_to_numeric(const struct in6_addr *addrp)
-{
-       /* 0000:0000:0000:0000:0000:000.000.000.000
-        * 0000:0000:0000:0000:0000:0000:0000:0000 */
-       static char buf[50+1];
-       return inet_ntop(AF_INET6, addrp, buf, sizeof(buf));
-}
-
-static const char *ip6addr_to_host(const struct in6_addr *addr)
-{
-       static char hostname[NI_MAXHOST];
-       struct sockaddr_in6 saddr;
-       int err;
-
-       memset(&saddr, 0, sizeof(struct sockaddr_in6));
-       memcpy(&saddr.sin6_addr, addr, sizeof(*addr));
-       saddr.sin6_family = AF_INET6;
-
-       err = getnameinfo((const void *)&saddr, sizeof(struct sockaddr_in6),
-             hostname, sizeof(hostname) - 1, NULL, 0, 0);
-       if (err != 0) {
-#ifdef DEBUG
-               fprintf(stderr,"IP2Name: %s\n",gai_strerror(err));
-#endif
-               return NULL;
-       }
-
-#ifdef DEBUG
-       fprintf (stderr, "\naddr2host: %s\n", hostname);
-#endif
-       return hostname;
-}
-
-const char *ip6addr_to_anyname(const struct in6_addr *addr)
-{
-       const char *name;
-
-       if ((name = ip6addr_to_host(addr)) != NULL)
-               return name;
-
-       return ip6addr_to_numeric(addr);
-}
-
-static int ip6addr_prefix_length(const struct in6_addr *k)
-{
-       unsigned int bits = 0;
-       uint32_t a, b, c, d;
-
-       a = ntohl(k->s6_addr32[0]);
-       b = ntohl(k->s6_addr32[1]);
-       c = ntohl(k->s6_addr32[2]);
-       d = ntohl(k->s6_addr32[3]);
-       while (a & 0x80000000U) {
-               ++bits;
-               a <<= 1;
-               a  |= (b >> 31) & 1;
-               b <<= 1;
-               b  |= (c >> 31) & 1;
-               c <<= 1;
-               c  |= (d >> 31) & 1;
-               d <<= 1;
-       }
-       if (a != 0 || b != 0 || c != 0 || d != 0)
-               return -1;
-       return bits;
-}
-
-const char *ip6mask_to_numeric(const struct in6_addr *addrp)
-{
-       static char buf[50+2];
-       int l = ip6addr_prefix_length(addrp);
-
-       if (l == -1) {
-               strcpy(buf, "/");
-               strcat(buf, ip6addr_to_numeric(addrp));
-               return buf;
-       }
-       sprintf(buf, "/%d", l);
-       return buf;
-}
-
-struct in6_addr *numeric_to_ip6addr(const char *num)
-{
-       static struct in6_addr ap;
-       int err;
-
-       if ((err = inet_pton(AF_INET6, num, &ap)) == 1)
-               return &ap;
-#ifdef DEBUG
-       fprintf(stderr, "\nnumeric2addr: %d\n", err);
-#endif
-       return NULL;
-}
-
-static struct in6_addr *
-host_to_ip6addr(const char *name, unsigned int *naddr)
-{
-       static struct in6_addr *addr;
-       struct addrinfo hints;
-       struct addrinfo *res;
-       int err;
-
-       memset(&hints, 0, sizeof(hints));
-       hints.ai_flags    = AI_CANONNAME;
-       hints.ai_family   = AF_INET6;
-       hints.ai_socktype = SOCK_RAW;
-       hints.ai_protocol = IPPROTO_IPV6;
-       hints.ai_next     = NULL;
-
-       *naddr = 0;
-       if ((err = getaddrinfo(name, NULL, &hints, &res)) != 0) {
-#ifdef DEBUG
-               fprintf(stderr,"Name2IP: %s\n",gai_strerror(err));
-#endif
-               return NULL;
-       } else {
-               if (res->ai_family != AF_INET6 ||
-                   res->ai_addrlen != sizeof(struct sockaddr_in6))
-                       return NULL;
-
-#ifdef DEBUG
-               fprintf(stderr, "resolved: len=%d  %s ", res->ai_addrlen,
-                       ip6addr_to_numeric(&((struct sockaddr_in6 *)res->ai_addr)->sin6_addr));
-#endif
-               /* Get the first element of the address-chain */
-               addr = fw_malloc(sizeof(struct in6_addr));
-               memcpy(addr, &((const struct sockaddr_in6 *)res->ai_addr)->sin6_addr,
-                      sizeof(struct in6_addr));
-               freeaddrinfo(res);
-               *naddr = 1;
-               return addr;
-       }
-
-       return NULL;
-}
-
-static struct in6_addr *network_to_ip6addr(const char *name)
-{
-       /*      abort();*/
-       /* TODO: not implemented yet, but the exception breaks the
-        *       name resolvation */
-       return NULL;
-}
-
-static struct in6_addr *
-ip6parse_hostnetwork(const char *name, unsigned int *naddrs)
-{
-       struct in6_addr *addrp, *addrptmp;
-
-       if ((addrptmp = numeric_to_ip6addr(name)) != NULL ||
-           (addrptmp = network_to_ip6addr(name)) != NULL) {
-               addrp = fw_malloc(sizeof(struct in6_addr));
-               memcpy(addrp, addrptmp, sizeof(*addrp));
-               *naddrs = 1;
-               return addrp;
-       }
-       if ((addrp = host_to_ip6addr(name, naddrs)) != NULL)
-               return addrp;
-
-       exit_error(PARAMETER_PROBLEM, "host/network `%s' not found", name);
-}
-
-static struct in6_addr *parse_ip6mask(char *mask)
-{
-       static struct in6_addr maskaddr;
-       struct in6_addr *addrp;
-       unsigned int bits;
-
-       if (mask == NULL) {
-               /* no mask at all defaults to 128 bits */
-               memset(&maskaddr, 0xff, sizeof maskaddr);
-               return &maskaddr;
-       }
-       if ((addrp = numeric_to_ip6addr(mask)) != NULL)
-               return addrp;
-       if (string_to_number(mask, 0, 128, &bits) == -1)
-               exit_error(PARAMETER_PROBLEM,
-                          "invalid mask `%s' specified", mask);
-       if (bits != 0) {
-               char *p = (void *)&maskaddr;
-               memset(p, 0xff, bits / 8);
-               memset(p + (bits / 8) + 1, 0, (128 - bits) / 8);
-               p[bits/8] = 0xff << (8 - (bits & 7));
-               return &maskaddr;
-       }
-
-       memset(&maskaddr, 0, sizeof(maskaddr));
-       return &maskaddr;
-}
-
-void ip6parse_hostnetworkmask(const char *name, struct in6_addr **addrpp,
-                              struct in6_addr *maskp, unsigned int *naddrs)
-{
-       struct in6_addr *addrp;
-       unsigned int i, j, k, n;
-       char buf[256], *p;
-
-       strncpy(buf, name, sizeof(buf) - 1);
-       buf[sizeof(buf)-1] = '\0';
-       if ((p = strrchr(buf, '/')) != NULL) {
-               *p = '\0';
-               addrp = parse_ip6mask(p + 1);
-       } else {
-               addrp = parse_ip6mask(NULL);
-       }
-       memcpy(maskp, addrp, sizeof(*maskp));
-
-       /* if a null mask is given, the name is ignored, like in "any/0" */
-       if (memcmp(maskp, &in6addr_any, sizeof(in6addr_any)) == 0)
-               strcpy(buf, "::");
-
-       addrp = *addrpp = ip6parse_hostnetwork(buf, naddrs);
-       n = *naddrs;
-       for (i = 0, j = 0; i < n; ++i) {
-               for (k = 0; k < 4; ++k)
-                       addrp[j].s6_addr32[k] &= maskp->s6_addr32[k];
-               ++j;
-               for (k = 0; k < j - 1; ++k)
-                       if (IN6_ARE_ADDR_EQUAL(&addrp[k], &addrp[j - 1])) {
-                               --*naddrs;
-                               --j;
-                               break;
-                       }
-       }
-}
-
-void save_string(const char *value)
-{
-       static const char no_quote_chars[] = "_-0123456789"
-               "abcdefghijklmnopqrstuvwxyz"
-               "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
-       static const char escape_chars[] = "\"\\'";
-       size_t length;
-       const char *p;
-
-       length = strcspn(value, no_quote_chars);
-       if (length > 0 && value[length] == 0) {
-               /* no quoting required */
-               fputs(value, stdout);
-               putchar(' ');
-       } else {
-               /* there is at least one dangerous character in the
-                  value, which we have to quote.  Write double quotes
-                  around the value and escape special characters with
-                  a backslash */
-               putchar('"');
-
-               for (p = strpbrk(value, escape_chars); p != NULL;
-                    p = strpbrk(value, escape_chars)) {
-                       if (p > value)
-                               fwrite(value, 1, p - value, stdout);
-                       putchar('\\');
-                       putchar(*p);
-                       value = p + 1;
-               }
-
-               /* print the rest and finish the double quoted
-                  string */
-               fputs(value, stdout);
-               printf("\" ");
-       }
-}