initial import

This commit is contained in:
dockes 2006-01-06 13:08:12 +00:00
parent 77b82a8db4
commit b396d2c39f
38 changed files with 59149 additions and 0 deletions

1
unac/.version Normal file
View File

@ -0,0 +1 @@
1.7.0

1
unac/AUTHORS Normal file
View File

@ -0,0 +1 @@
Loic Dachary loic@senga.org

340
unac/COPYING Normal file
View File

@ -0,0 +1,340 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 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.
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.)
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.
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.
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
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 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.

160
unac/ChangeLog Normal file
View File

@ -0,0 +1,160 @@
Mon Sep 02 12:37:45 2002 Loic Dachary <loic@gnu.org>
* release 1.7.0
* unac.3, unaccent.1: rewrote and proofread
Wed Aug 28 13:26:12 2002 Loic Dachary <loic@gnu.org>
* unaccent.c: debug options --debug_low and --debug_high
* configure.in: test vsnprintf, if not disable debug functions
* unac.[ch]: implement debug functions
* UnicodeData-3.2.0.txt: added UCD terms and original file
location.
* README: Add license section mentioning UCD terms
* t_unac: added regression test to make sure the bug
reported by Rune Nordbøe Skillingstad does not show
up again. Improved information level when a bug is
found.
* UnicodeData-3.2.0.txt: Rune Nordbøe Skillingstad
<runesk@linpro.no> says: 2 LATIN characters used in Norway
didn't have a "Character Decomposition Mapping". I've submitted
a patch to unicode.org that fixes this problem, but it might
take some time before somebody there have time to do something
about it.
Wed Jul 03 07:30:36 2002 Loic Dachary <loic@gnu.org>
* release 1.6.0
* configure.in, README: update libiconv URLs
* Makefile.am: update to Unicode-3.2.0
* acinclude.m4: autoconf archive updates
Thu Jul 19 10:26:24 2001 Loic Dachary <loic@gnu.org>
* release 1.5.0
* autotools: upgrade libtool-1.4 and config.guess + config.sub
* unac.c: use ICONV_CONST or define it to nothing if config.h
is not available.
* configure.in, acinclude.m4: use AM_ICONV instead of custom made
macro.
* *: copyright and documentation upgrade
* unac.c: include string.h
Sun Jan 14 19:05:31 2001 Loic Dachary <loic@senga.org>
* release 1.4.0
Fri Jan 12 19:00:07 2001 Loic Dachary <loic@senga.org>
* unac.h: Add function unac_version.
* unaccent.c (main): Add version number in usage.
* unactest1.c: check unac_string error code, add test
for 1/4 ISO-8859-1 char.
* unac.c (convert): Transparently convert EILSEQ characters
to SPACE. Some characters may be decomposed with characters
that cannot be mapped back to the original charset. For
instance the 1/4 ISO-8859-1 char is mapped to
ONE, FRACTION SLASH, FOUR and the FRACTION SLASH cannot
be mapped back to ISO-8859-1.
Sat Jan 06 15:12:44 2001 Loic Dachary <loic@senga.org>
* release 1.3.0
* unac.c (utf16be): return UTF-16BE if available, otherwise
return UTF-16, assuming it is big endian.
Sat Jan 06 14:39:24 2001 Loic Dachary <loic@senga.org>
* unac.c (unac_string): do nothing when an empty string is
sent but allocate the buffer anyway.
* unac.c (convert): fix allocation bug: it may occur that
E2BIG is returned and out_remain is not 0. Do not alloc
the output buffer from a size taken from the input_length
if the input_length is null.
Wed Jan 03 16:41:11 2001 Loic Dachary <loic@senga.org>
* unactest1.c: Add test for re-allocation.
* unactest.c: move simple conversion test to unactest1.c
Wed Dec 20 12:58:14 2000 Loic Dachary <loic@senga.org>
* release 1.2.0
* configure.in: generate unac.spec so that version is updated.
* unac.{c,h} (unac_string_*): length arguments must be
of type size_t to conform to the single unix specification.
* unac.c (unac_string): Helios De Creisquer (creis@zehc.net)
reported a bug related to endianness under RedHat-7.0.
Now always use UTF-16BE.
Mon Oct 16 11:06:14 2000 Loic Dachary <loic@senga.org>
* README.debian: Added to capture the debian packaging knowledge
from Rémi Perrot <remi_perrot@users.sourceforge.net>.
Wed Oct 11 13:16:59 2000 Loic Dachary <loic@senga.org>
* debian: remove debian dir, replace by unac_1.1.0-2.diff.gz that
appears in the CVS tree for archival but will never be distributed.
Debian specific stuff must not show in the sources so that debian
team may produce various diffs according to the debian distribution
and do not depend on the author. Thanks to Remi Perrot for making
this point clear.
Sun Oct 01 11:56:35 2000 Loic Dachary <loic@senga.org>
* Makefile.am: change -release into -version-info
Sat Sep 30 11:48:35 2000 Loic Dachary <loic@senga.org>
* debian: debian packaging specifications contributed by
Rémi Perrot <remi_perrot@users.sourceforge.net>
Thu Sep 28 21:19:48 2000 Loic Dachary <loic@senga.org>
* unac.3: document EINVAL error code.
Thu Sep 28 18:13:41 2000 Loic Dachary <loic@senga.org>
* release 1.1.0
* README (install): Add recommendations for Solaris
* unaccent.c (main): free the unaccented string before exit
* acinclude.m4: add --with-iconv option that does *not* include
iconv by default and allows to specify a specific directory
as root of iconv installation.
* unac.c (convert): fix error condition tests that failed because
they are unsigned and cannot be compared to -1. Change inclusion
of sys/errno.h for errno.h.
Wed Sep 20 19:34:07 2000 Loic Dachary <loic@senga.org>
* release 1.0.0

182
unac/INSTALL Normal file
View File

@ -0,0 +1,182 @@
Basic Installation
==================
These are generic installation instructions.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
you can run in the future to recreate the current configuration, a file
`config.cache' that saves the results of its tests to speed up
reconfiguring, and a file `config.log' containing compiler output
(useful mainly for debugging `configure').
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
be considered for the next release. If at some point `config.cache'
contains results you don't want to keep, you may remove or edit it.
The file `configure.in' is used to create `configure' by a program
called `autoconf'. You only need `configure.in' if you want to change
it or regenerate `configure' using a newer version of `autoconf'.
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system. If you're
using `csh' on an old version of System V, you might need to type
`sh ./configure' instead to prevent `csh' from trying to execute
`configure' itself.
Running `configure' takes awhile. While running, it prints some
messages telling which features it is checking for.
2. Type `make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
the package.
4. Type `make install' to install the programs and any data files and
documentation.
5. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that
the `configure' script does not know about. You can give `configure'
initial values for variables by setting them in the environment. Using
a Bourne-compatible shell, you can do that on the command line like
this:
CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
Or on systems that have the `env' program, you can do it like this:
env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you must use a version of `make' that
supports the `VPATH' variable, such as GNU `make'. `cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'.
If you have to use a `make' that does not supports the `VPATH'
variable, you have to compile the package for one architecture at a time
in the source code directory. After you have installed the package for
one architecture, use `make distclean' before reconfiguring for another
architecture.
Installation Names
==================
By default, `make install' will install the package's files in
`/usr/local/bin', `/usr/local/man', etc. You can specify an
installation prefix other than `/usr/local' by giving `configure' the
option `--prefix=PATH'.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
give `configure' the option `--exec-prefix=PATH', the package will use
PATH as the prefix for installing programs and libraries.
Documentation and other data files will still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=PATH' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them.
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
package recognizes.
For packages that use the X Window System, `configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
Specifying the System Type
==========================
There may be some features `configure' can not figure out
automatically, but needs to determine by the type of host the package
will run on. Usually `configure' can figure that out, but if it prints
a message saying it can not guess the host type, give it the
`--host=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name with three fields:
CPU-COMPANY-SYSTEM
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
need to know the host type.
If you are building compiler tools for cross-compiling, you can also
use the `--target=TYPE' option to select the type of system they will
produce code for and the `--build=TYPE' option to select the type of
system on which you are compiling the package.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share,
you can create a site shell script called `config.site' that gives
default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
Operation Controls
==================
`configure' recognizes the following options to control how it
operates.
`--cache-file=FILE'
Use and save the results of the tests in FILE instead of
`./config.cache'. Set FILE to `/dev/null' to disable caching, for
debugging `configure'.
`--help'
Print a summary of the options to `configure', and exit.
`--quiet'
`--silent'
`-q'
Do not print messages saying which checks are being made. To
suppress all normal output, redirect it to `/dev/null' (any error
messages will still be shown).
`--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
`--version'
Print the version of Autoconf used to generate the `configure'
script, and exit.
`configure' also accepts some other, not widely useful, options.

101
unac/Makefile.am Normal file
View File

@ -0,0 +1,101 @@
#
# Copyright (C) 2000, 2001, 2002 Loic Dachary <loic@senga.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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
#
# Documentation
#
man_MANS = unaccent.1 unac.3
INCLUDES = -DUNAC_VERSION=\"$(VERSION)\"
#
# Support programs
#
noinst_HEADERS = \
getopt.h
bin_PROGRAMS = unaccent
unaccent_SOURCES = unaccent.c
unaccent_LDFLAGS = $(PROFILING)
unaccent_LDADD = @LIBOBJS@ libunac.la
#
# Library and headers
#
lib_LTLIBRARIES = libunac.la
libunac_la_LDFLAGS = -version-info $(MAJOR_VERSION):$(MINOR_VERSION):$(MICRO_VERSION)
libunac_la_SOURCES = unac.c
include_HEADERS = \
unac.h
unac.c: $(UNICODEDATA) builder.in
$(PERL) builder -source -database=$(srcdir)/$(UNICODEDATA)
#
# Tests
#
TESTS = t_unac
noinst_PROGRAMS = unactest unactest1
unactest_SOURCES = unactest.c
unactest_LDFLAGS = $(PROFILING)
unactest_LDADD = libunac.la
unactest1_SOURCES = unactest1.c
unactest1_LDFLAGS = $(PROFILING)
unactest1_LDADD = libunac.la
#
# Packaging
#
MAINTAINERCLEANFILES = $(DISTCLEANFILES)
DISTCLEANFILES = config.log config.status
UNICODEDATA = UnicodeData-$(UNICODE_VERSION).txt
EXTRA_DIST = builder.in $(UNICODEDATA) .version t_unac.in \
unaccent.1 unac.3
pkgconfigdir = ${libdir}/pkgconfig
pkgconfig_DATA = unac.pc
#
# Build source and binary rpms. As of rpm-3.0, the ~/.rpmmacros
# must contain the following line:
# %_topdir /home/loic/local/rpm
# and that /home/loic/local/rpm contains the directory SOURCES, BUILD etc.
#
VERSION = $(MAJOR_VERSION).$(MINOR_VERSION).$(MICRO_VERSION)
rpm:
RPM_TOPDIR=`rpm --showrc | $(PERL) -n -e 'print if(s/.*_topdir\s+(.*)/$$1/)'` ; \
cp $(PACKAGE).spec $$RPM_TOPDIR/SPECS ; \
cp $(PACKAGE)-$(VERSION).tar.gz $$RPM_TOPDIR/SOURCES ; \
rpm -ba --clean --rmsource $$RPM_TOPDIR/SPECS/$(PACKAGE).spec ; \
mv $$RPM_TOPDIR/RPMS/i386/$(PACKAGE)-$(VERSION)-1.i386.rpm . ; \
mv $$RPM_TOPDIR/SRPMS/$(PACKAGE)-$(VERSION)-1.src.rpm .
#
# Cleanup
#
clean-local:
rm -f unac.reference

778
unac/Makefile.in Normal file
View File

@ -0,0 +1,778 @@
# Makefile.in generated automatically by automake 1.5 from Makefile.am.
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
# 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@
#
# Copyright (C) 2000, 2001, 2002 Loic Dachary <loic@senga.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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
#
# Documentation
#
SHELL = @SHELL@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = .
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
host_alias = @host_alias@
host_triplet = @host@
AMTAR = @AMTAR@
AS = @AS@
AWK = @AWK@
CC = @CC@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
ECHO = @ECHO@
EXEEXT = @EXEEXT@
HAVE_LIB = @HAVE_LIB@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LIB = @LIB@
LIBICONV = @LIBICONV@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
LTLIB = @LTLIB@
LTLIBICONV = @LTLIBICONV@
MAINT = @MAINT@
MAJOR_VERSION = @MAJOR_VERSION@
MICRO_VERSION = @MICRO_VERSION@
MINOR_VERSION = @MINOR_VERSION@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PERL = @PERL@
RANLIB = @RANLIB@
SH = @SH@
STRIP = @STRIP@
UNICODE_VERSION = @UNICODE_VERSION@
am__include = @am__include@
am__quote = @am__quote@
install_sh = @install_sh@
#
# Build source and binary rpms. As of rpm-3.0, the ~/.rpmmacros
# must contain the following line:
# %_topdir /home/loic/local/rpm
# and that /home/loic/local/rpm contains the directory SOURCES, BUILD etc.
#
VERSION = $(MAJOR_VERSION).$(MINOR_VERSION).$(MICRO_VERSION)
man_MANS = unaccent.1 unac.3
INCLUDES = -DUNAC_VERSION=\"$(VERSION)\"
#
# Support programs
#
noinst_HEADERS = \
getopt.h
bin_PROGRAMS = unaccent
unaccent_SOURCES = unaccent.c
unaccent_LDFLAGS = $(PROFILING)
unaccent_LDADD = @LIBOBJS@ libunac.la
#
# Library and headers
#
lib_LTLIBRARIES = libunac.la
libunac_la_LDFLAGS = -version-info $(MAJOR_VERSION):$(MINOR_VERSION):$(MICRO_VERSION)
libunac_la_SOURCES = unac.c
include_HEADERS = \
unac.h
#
# Tests
#
TESTS = t_unac
noinst_PROGRAMS = unactest unactest1
unactest_SOURCES = unactest.c
unactest_LDFLAGS = $(PROFILING)
unactest_LDADD = libunac.la
unactest1_SOURCES = unactest1.c
unactest1_LDFLAGS = $(PROFILING)
unactest1_LDADD = libunac.la
#
# Packaging
#
MAINTAINERCLEANFILES = $(DISTCLEANFILES)
DISTCLEANFILES = config.log config.status
UNICODEDATA = UnicodeData-$(UNICODE_VERSION).txt
EXTRA_DIST = builder.in $(UNICODEDATA) .version t_unac.in \
unaccent.1 unac.3
pkgconfigdir = ${libdir}/pkgconfig
pkgconfig_DATA = unac.pc
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = config.h
CONFIG_CLEAN_FILES = unac.pc unac.spec t_unac builder
LTLIBRARIES = $(lib_LTLIBRARIES)
libunac_la_LIBADD =
am_libunac_la_OBJECTS = unac.lo
libunac_la_OBJECTS = $(am_libunac_la_OBJECTS)
bin_PROGRAMS = unaccent$(EXEEXT)
noinst_PROGRAMS = unactest$(EXEEXT) unactest1$(EXEEXT)
PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
am_unaccent_OBJECTS = unaccent.$(OBJEXT)
unaccent_OBJECTS = $(am_unaccent_OBJECTS)
unaccent_DEPENDENCIES = @LIBOBJS@ libunac.la
am_unactest_OBJECTS = unactest.$(OBJEXT)
unactest_OBJECTS = $(am_unactest_OBJECTS)
unactest_DEPENDENCIES = libunac.la
am_unactest1_OBJECTS = unactest1.$(OBJEXT)
unactest1_OBJECTS = $(am_unactest1_OBJECTS)
unactest1_DEPENDENCIES = libunac.la
DEFS = @DEFS@
DEFAULT_INCLUDES = -I. -I$(srcdir) -I.
CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
depcomp = $(SHELL) $(top_srcdir)/depcomp
@AMDEP_TRUE@DEP_FILES = $(DEPDIR)/getopt.Po $(DEPDIR)/unac.Plo \
@AMDEP_TRUE@ $(DEPDIR)/unaccent.Po $(DEPDIR)/unactest.Po \
@AMDEP_TRUE@ $(DEPDIR)/unactest1.Po
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \
$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
CCLD = $(CC)
LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
CFLAGS = @CFLAGS@
DIST_SOURCES = $(libunac_la_SOURCES) $(unaccent_SOURCES) \
$(unactest_SOURCES) $(unactest1_SOURCES)
NROFF = nroff
MANS = $(man_MANS)
DATA = $(pkgconfig_DATA)
HEADERS = $(include_HEADERS) $(noinst_HEADERS)
DIST_COMMON = README $(include_HEADERS) $(noinst_HEADERS) \
././stamp-h.in ./stamp-h.in AUTHORS COPYING ChangeLog INSTALL \
Makefile.am Makefile.in NEWS THANKS acinclude.m4 aclocal.m4 \
builder.in config.guess config.h.in config.sub configure \
configure.ac depcomp getopt.c install-sh ltconfig ltmain.sh \
missing mkinstalldirs t_unac.in unac.pc.in unac.spec.in
SOURCES = $(libunac_la_SOURCES) $(unaccent_SOURCES) $(unactest_SOURCES) $(unactest1_SOURCES)
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
distclean-libtool:
-rm -f libtool
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.ac $(ACLOCAL_M4)
cd $(top_srcdir) && \
$(AUTOMAKE) --gnu Makefile
Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in $(top_builddir)/config.status
cd $(top_builddir) && \
CONFIG_HEADERS= CONFIG_LINKS= \
CONFIG_FILES=$@ $(SHELL) ./config.status
$(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
$(srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(srcdir)/configure.ac $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
cd $(srcdir) && $(AUTOCONF)
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.ac acinclude.m4
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
config.h: stamp-h
@if test ! -f $@; then \
rm -f stamp-h; \
$(MAKE) stamp-h; \
else :; fi
stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status
@rm -f stamp-h stamp-hT
@echo timestamp > stamp-hT 2> /dev/null
cd $(top_builddir) \
&& CONFIG_FILES= CONFIG_HEADERS=config.h \
$(SHELL) ./config.status
@mv stamp-hT stamp-h
$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/./stamp-h.in
@if test ! -f $@; then \
rm -f $(srcdir)/./stamp-h.in; \
$(MAKE) $(srcdir)/./stamp-h.in; \
else :; fi
$(srcdir)/./stamp-h.in: $(top_srcdir)/configure.ac $(ACLOCAL_M4)
@rm -f $(srcdir)/./stamp-h.in $(srcdir)/./stamp-h.inT
@echo timestamp > $(srcdir)/./stamp-h.inT 2> /dev/null
cd $(top_srcdir) && $(AUTOHEADER)
@mv $(srcdir)/./stamp-h.inT $(srcdir)/./stamp-h.in
distclean-hdr:
-rm -f config.h
unac.pc: $(top_builddir)/config.status unac.pc.in
cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status
unac.spec: $(top_builddir)/config.status unac.spec.in
cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status
t_unac: $(top_builddir)/config.status t_unac.in
cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status
builder: $(top_builddir)/config.status builder.in
cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(libdir)
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
if test -f $$p; then \
echo " $(LIBTOOL) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(libdir)/$$p"; \
$(LIBTOOL) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(libdir)/$$p; \
else :; fi; \
done
uninstall-libLTLIBRARIES:
@$(NORMAL_UNINSTALL)
@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
echo " $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p"; \
$(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libdir)/$$p; \
done
clean-libLTLIBRARIES:
-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
libunac.la: $(libunac_la_OBJECTS) $(libunac_la_DEPENDENCIES)
$(LINK) -rpath $(libdir) $(libunac_la_LDFLAGS) $(libunac_la_OBJECTS) $(libunac_la_LIBADD) $(LIBS)
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(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 '$(transform);s/$$/$(EXEEXT)/'`; \
echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$f"; \
$(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$f; \
else :; fi; \
done
uninstall-binPROGRAMS:
@$(NORMAL_UNINSTALL)
@list='$(bin_PROGRAMS)'; for p in $$list; do \
f=`echo $$p|sed 's/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
echo " rm -f $(DESTDIR)$(bindir)/$$f"; \
rm -f $(DESTDIR)$(bindir)/$$f; \
done
clean-binPROGRAMS:
-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
clean-noinstPROGRAMS:
-test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
unaccent$(EXEEXT): $(unaccent_OBJECTS) $(unaccent_DEPENDENCIES)
@rm -f unaccent$(EXEEXT)
$(LINK) $(unaccent_LDFLAGS) $(unaccent_OBJECTS) $(unaccent_LDADD) $(LIBS)
unactest$(EXEEXT): $(unactest_OBJECTS) $(unactest_DEPENDENCIES)
@rm -f unactest$(EXEEXT)
$(LINK) $(unactest_LDFLAGS) $(unactest_OBJECTS) $(unactest_LDADD) $(LIBS)
unactest1$(EXEEXT): $(unactest1_OBJECTS) $(unactest1_DEPENDENCIES)
@rm -f unactest1$(EXEEXT)
$(LINK) $(unactest1_LDFLAGS) $(unactest1_OBJECTS) $(unactest1_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT) core *.core
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getopt.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/unac.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/unaccent.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/unactest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/unactest1.Po@am__quote@
distclean-depend:
-rm -rf $(DEPDIR)
.c.o:
@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
$(COMPILE) -c `test -f $< || echo '$(srcdir)/'`$<
.c.obj:
@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
$(COMPILE) -c `cygpath -w $<`
.c.lo:
@AMDEP_TRUE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
$(LTCOMPILE) -c -o $@ `test -f $< || echo '$(srcdir)/'`$<
CCDEPMODE = @CCDEPMODE@
uninstall-info-am:
man1dir = $(mandir)/man1
install-man1: $(man1_MANS) $(man_MANS)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(man1dir)
@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
for i in $$l2; do \
case "$$i" in \
*.1*) 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/^.*\\.//'`; \
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)$(man1dir)/$$inst"; \
$(INSTALL_DATA) $$file $(DESTDIR)$(man1dir)/$$inst; \
done
uninstall-man1:
@$(NORMAL_UNINSTALL)
@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
for i in $$l2; do \
case "$$i" in \
*.1*) list="$$list $$i" ;; \
esac; \
done; \
for i in $$list; do \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
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)$(man1dir)/$$inst"; \
rm -f $(DESTDIR)$(man1dir)/$$inst; \
done
man3dir = $(mandir)/man3
install-man3: $(man3_MANS) $(man_MANS)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(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/^.*\\.//'`; \
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/^.*\\.//'`; \
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-pkgconfigDATA: $(pkgconfig_DATA)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(pkgconfigdir)
@list='$(pkgconfig_DATA)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
f="`echo $$p | sed -e 's|^.*/||'`"; \
echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(pkgconfigdir)/$$f"; \
$(INSTALL_DATA) $$d$$p $(DESTDIR)$(pkgconfigdir)/$$f; \
done
uninstall-pkgconfigDATA:
@$(NORMAL_UNINSTALL)
@list='$(pkgconfig_DATA)'; for p in $$list; do \
f="`echo $$p | sed -e 's|^.*/||'`"; \
echo " rm -f $(DESTDIR)$(pkgconfigdir)/$$f"; \
rm -f $(DESTDIR)$(pkgconfigdir)/$$f; \
done
install-includeHEADERS: $(include_HEADERS)
@$(NORMAL_INSTALL)
$(mkinstalldirs) $(DESTDIR)$(includedir)
@list='$(include_HEADERS)'; for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
f="`echo $$p | sed -e 's|^.*/||'`"; \
echo " $(INSTALL_HEADER) $$d$$p $(DESTDIR)$(includedir)/$$f"; \
$(INSTALL_HEADER) $$d$$p $(DESTDIR)$(includedir)/$$f; \
done
uninstall-includeHEADERS:
@$(NORMAL_UNINSTALL)
@list='$(include_HEADERS)'; for p in $$list; do \
f="`echo $$p | sed -e 's|^.*/||'`"; \
echo " rm -f $(DESTDIR)$(includedir)/$$f"; \
rm -f $(DESTDIR)$(includedir)/$$f; \
done
tags: TAGS
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(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 $(LISP)
TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) $(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 "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \
|| etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP)
GTAGS:
here=`CDPATH=: && cd $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH
check-TESTS: $(TESTS)
@failed=0; all=0; xfail=0; xpass=0; \
srcdir=$(srcdir); export srcdir; \
list='$(TESTS)'; \
if test -n "$$list"; then \
for tst in $$list; do \
if test -f ./$$tst; then dir=./; \
elif test -f $$tst; then dir=; \
else dir="$(srcdir)/"; fi; \
if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
all=`expr $$all + 1`; \
case " $(XFAIL_TESTS) " in \
*" $$tst "*) \
xpass=`expr $$xpass + 1`; \
failed=`expr $$failed + 1`; \
echo "XPASS: $$tst"; \
;; \
*) \
echo "PASS: $$tst"; \
;; \
esac; \
elif test $$? -ne 77; then \
all=`expr $$all + 1`; \
case " $(XFAIL_TESTS) " in \
*" $$tst "*) \
xfail=`expr $$xfail + 1`; \
echo "XFAIL: $$tst"; \
;; \
*) \
failed=`expr $$failed + 1`; \
echo "FAIL: $$tst"; \
;; \
esac; \
fi; \
done; \
if test "$$failed" -eq 0; then \
if test "$$xfail" -eq 0; then \
banner="All $$all tests passed"; \
else \
banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
fi; \
else \
if test "$$xpass" -eq 0; then \
banner="$$failed of $$all tests failed"; \
else \
banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
fi; \
fi; \
dashes=`echo "$$banner" | sed s/./=/g`; \
echo "$$dashes"; \
echo "$$banner"; \
echo "$$dashes"; \
test "$$failed" -eq 0; \
fi
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = .
# Avoid unsightly `./'.
distdir = $(PACKAGE)-$(VERSION)
GZIP_ENV = --best
distdir: $(DISTFILES)
-chmod -R a+w $(distdir) >/dev/null 2>&1; rm -rf $(distdir)
mkdir $(distdir)
$(mkinstalldirs) $(distdir)/. $(distdir)/./.
@for file in $(DISTFILES); do \
if test -f $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
$(mkinstalldirs) "$(distdir)/$$dir"; \
fi; \
if test -d $$d/$$file; then \
cp -pR $$d/$$file $(distdir) \
|| exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
|| 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: distdir
$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-chmod -R a+w $(distdir) >/dev/null 2>&1; rm -rf $(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
-chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir)
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf -
chmod -R a-w $(distdir); chmod a+w $(distdir)
mkdir $(distdir)/=build
mkdir $(distdir)/=inst
chmod a-w $(distdir)
dc_install_base=`CDPATH=: && cd $(distdir)/=inst && pwd` \
&& cd $(distdir)/=build \
&& ../configure --srcdir=.. --prefix=$$dc_install_base \
&& $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
&& $(MAKE) $(AM_MAKEFLAGS) check \
&& $(MAKE) $(AM_MAKEFLAGS) install \
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
&& (test `find $$dc_install_base -type f -print | wc -l` -le 1 \
|| (echo "Error: files left after uninstall" 1>&2; \
exit 1) ) \
&& $(MAKE) $(AM_MAKEFLAGS) dist \
&& $(MAKE) $(AM_MAKEFLAGS) distclean \
&& rm -f $(distdir).tar.gz \
&& (test `find . -type f -print | wc -l` -eq 0 \
|| (echo "Error: files left after distclean" 1>&2; \
exit 1) )
-chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir)
@echo "$(distdir).tar.gz is ready for distribution" | \
sed 'h;s/./=/g;p;x;p;x'
check-am: all-am
$(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: check-am
all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(MANS) $(DATA) $(HEADERS) \
config.h
install-binPROGRAMS: install-libLTLIBRARIES
installdirs:
$(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(bindir) $(DESTDIR)$(man1dir) $(DESTDIR)$(man3dir) $(DESTDIR)$(pkgconfigdir) $(DESTDIR)$(includedir)
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)" \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
clean: clean-am
clean-am: clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \
clean-libtool clean-local clean-noinstPROGRAMS mostlyclean-am
dist-all: distdir
$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-chmod -R a+w $(distdir) >/dev/null 2>&1; rm -rf $(distdir)
distclean: distclean-am
-rm -f config.status config.cache config.log
distclean-am: clean-am distclean-compile distclean-depend \
distclean-generic distclean-hdr distclean-libtool \
distclean-tags
dvi: dvi-am
dvi-am:
info: info-am
info-am:
install-data-am: install-includeHEADERS install-man \
install-pkgconfigDATA
install-exec-am: install-binPROGRAMS install-libLTLIBRARIES
install-info: install-info-am
install-man: install-man1 install-man3
installcheck-am:
maintainer-clean: maintainer-clean-am
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
uninstall-am: uninstall-binPROGRAMS uninstall-includeHEADERS \
uninstall-info-am uninstall-libLTLIBRARIES uninstall-man \
uninstall-pkgconfigDATA
uninstall-man: uninstall-man1 uninstall-man3
.PHONY: GTAGS all all-am check check-TESTS check-am clean \
clean-binPROGRAMS clean-generic clean-libLTLIBRARIES \
clean-libtool clean-local clean-noinstPROGRAMS dist dist-all \
distcheck distclean distclean-compile distclean-depend \
distclean-generic distclean-hdr distclean-libtool \
distclean-tags distdir dvi dvi-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-libLTLIBRARIES install-man \
install-man1 install-man3 install-pkgconfigDATA install-strip \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool tags uninstall \
uninstall-am uninstall-binPROGRAMS uninstall-includeHEADERS \
uninstall-info-am uninstall-libLTLIBRARIES uninstall-man \
uninstall-man1 uninstall-man3 uninstall-pkgconfigDATA
unac.c: $(UNICODEDATA) builder.in
$(PERL) builder -source -database=$(srcdir)/$(UNICODEDATA)
rpm:
RPM_TOPDIR=`rpm --showrc | $(PERL) -n -e 'print if(s/.*_topdir\s+(.*)/$$1/)'` ; \
cp $(PACKAGE).spec $$RPM_TOPDIR/SPECS ; \
cp $(PACKAGE)-$(VERSION).tar.gz $$RPM_TOPDIR/SOURCES ; \
rpm -ba --clean --rmsource $$RPM_TOPDIR/SPECS/$(PACKAGE).spec ; \
mv $$RPM_TOPDIR/RPMS/i386/$(PACKAGE)-$(VERSION)-1.i386.rpm . ; \
mv $$RPM_TOPDIR/SRPMS/$(PACKAGE)-$(VERSION)-1.src.rpm .
#
# Cleanup
#
clean-local:
rm -f unac.reference
# 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:

58
unac/NEWS Normal file
View File

@ -0,0 +1,58 @@
Version 1.7.0
* Rune Nordbøe Skillingstad fixed Unicode-3.2 bug
* Added debug information and improved regression test
information level
* Re-wrote manual pages for clarity and content
Version 1.6.0
* Upgrade to Unicode-3.2.0
Version 1.5.0
* Better detection of the iconv library, using the AM_ICONV
macro of Bruno Haible.
* Upgrade autotools files
* Minor documentation upgrades.
Version 1.4.0
* When unac_string finds an illegal sequence while converting,
it replaces it with a space. For instance 1/4 ISO-8859-1 character
is converted to 1 4 (one space four) because the fraction character
does not exist in ISO-8859-1.
* The new unac_version function returns the version number.
Version 1.3.0
* Add support for systems that do not have UTF-16BE defined
but only UTF-16 being implicitly big endian. It means that
it will work with both glibc-2.1.3 and glibc-2.1.94.
* Fix occasional allocation bug
* Allocate returned buffer even if an empty string is given
in input.
* Add more regression tests
Version 1.2.0
* Fix endianess problem that shows on RedHat-7.0
* Fix prototype mistake (int used where size_t required)
Version 1.1.0
* Fix error handling bug
* Recommend alternative iconv implementation for Solaris-2.6
Version 1.0.0

93
unac/README Normal file
View File

@ -0,0 +1,93 @@
$Header: /cvsroot/unac/unac/README,v 1.5 2002/09/02 10:40:09 loic Exp $
What is it ?
------------
unac is a C library that removes accents from characters, regardless
of the character set (ISO-8859-15, ISO-CELTIC, KOI8-RU...) as long as
iconv(3) is able to convert it into UTF-16 (Unicode). For instance
the string été will become ete. It provides a command line interface
(unaccent) that removes accents from an input flow or a string given
in argument. When using the library function or the command, the
charset of the input must be specified. The input is converted to
UTF-16 using iconv(3), accents are removed and the result is converted
back to the original charset. The iconv -l command on GNU/Linux will
show all charset supported.
Where is the documentation ?
----------------------------
The manual page of the unaccent command : man unaccent.
The manual page of the unac library : man unac.
How to install it ?
-------------------
For OS that are not GNU/Linux we recommend to use the iconv library
provided by Bruno Haible <haible@ilog.fr> at
ftp://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.8.tar.gz.
./configure [--with-iconv=/my/local]
make all
make check
make install
How to link with unac ?
-------------------------
Assuming you've installed unac in the /usr/local directory use something
similar to the following:
In the sources:
...
#include <unac.h>
...
On the command line:
cc -I/usr/local/include -o prog prog.cc -L/usr/local/lib -lunac
Where can I download it ?
-------------------------
The main distribution site is http://www.senga.org/unac/.
What is the license ?
---------------------
unac is distributed under the GNU GPL, as found at
http://www.gnu.org/licenses/gpl.txt. Unicode data files are
under the following license, which is compatible with the
GNU GPL:
http://www.unicode.org/Public/3.2-Update/UnicodeData-3.2.0.html#UCD_Terms
UCD Terms of Use
Disclaimer
The Unicode Character Database is provided as is by Unicode, Inc. No
claims are made as to fitness for any particular purpose. No
warranties of any kind are expressed or implied. The recipient agrees
to determine applicability of information provided. If this file has
been purchased on magnetic or optical media from Unicode, Inc., the
sole remedy for any claim will be exchange of defective media within
90 days of receipt.
This disclaimer is applicable for all other data files accompanying
the Unicode Character Database, some of which have been compiled by
the Unicode Consortium, and some of which have been supplied by other
sources. Limitations on Rights to Redistribute This Data
Recipient is granted the right to make copies in any form for internal
distribution and to freely use the information supplied in the
creation of products supporting the Unicode(TM) Standard. The files
in the Unicode Character Database can be redistributed to third
parties or other organizations (whether for profit or not) as long as
this notice and the disclaimer notice are retained. Information can
be extracted from these files and used in documentation or programs,
as long as there is an accompanying notice indicating the source.
Loic Dachary
loic@senga.org
http://www.senga.org/

9
unac/THANKS Normal file
View File

@ -0,0 +1,9 @@
Rune Nordbøe Skillingstad <runesk@linpro.no>
UnicodeData-3.2.0 patch for Norway
"Character Decomposition Mapping"
Remi Perrot remi_perrot@users.sourceforge.net
contributed the expertise for debian packaging
Helios De Creisquer creis@zehc.net
contributed bug fixes

13903
unac/UnicodeData-3.2.0.txt Normal file

File diff suppressed because it is too large Load Diff

156
unac/acinclude.m4 Normal file
View File

@ -0,0 +1,156 @@
dnl Copyright (C) 2000, 2001, 2002 Loic Dachary <loic@senga.org>
dnl
dnl This program is free software; you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by
dnl the Free Software Foundation; either version 2 of the License, or
dnl (at your option) any later version.
dnl
dnl This program is distributed in the hope that it will be useful,
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
dnl GNU General Public License for more details.
dnl
dnl You should have received a copy of the GNU General Public License
dnl along with this program; if not, write to the Free Software
dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
dnl
dnl Local autoconf definitions. Try to follow the guidelines of the autoconf
dnl macro repository so that integration in the repository is easy.
dnl To submit a macro to the repository send the macro (one macro per mail)
dnl to Peter Simons <simons@cryp.to>.
dnl The repository itself is at httphttp://savannah.gnu.org/projects/ac-archive/
dnl
dnl @synopsis AC_MANDATORY_HEADER(HEADER-FILE, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
dnl
dnl Same semantic as AC_CHECK_HEADER except that it aborts the configuration
dnl script if the header file is not found.
dnl
dnl @version $Id: acinclude.m4,v 1.5 2002/09/02 10:40:09 loic Exp $
dnl @author Loic Dachary <loic@senga.org>
dnl
AC_DEFUN([AC_MANDATORY_HEADER],
[dnl Do the transliteration at runtime so arg 1 can be a shell variable.
ac_safe=`echo "$1" | sed 'y%./+-%__p_%'`
AC_MSG_CHECKING([for $1])
AC_CACHE_VAL(ac_cv_header_$ac_safe,
[AC_TRY_CPP([#include <$1>], eval "ac_cv_header_$ac_safe=yes",
eval "ac_cv_header_$ac_safe=no")])dnl
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
AC_MSG_RESULT(yes)
ifelse([$2], , :, [$2])
else
AC_MSG_ERROR(header not found check config.log)
ifelse([$3], , , [$3
])dnl
fi
])
dnl @synopsis AC_MANDATORY_HEADERS(HEADER-FILE... [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
dnl
dnl Same semantic as AC_CHECK_HEADERS except that it aborts the configuration
dnl script if one of the headers file is not found.
dnl
dnl @version $Id: acinclude.m4,v 1.5 2002/09/02 10:40:09 loic Exp $
dnl @author Loic Dachary <loic@senga.org>
dnl
AC_DEFUN([AC_MANDATORY_HEADERS],
[for ac_hdr in $1
do
AC_MANDATORY_HEADER($ac_hdr,
[changequote(, )dnl
ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
changequote([, ])dnl
AC_DEFINE_UNQUOTED($ac_tr_hdr) $2], $3)dnl
done
])
dnl @synopsis AC_MANDATORY_LIB(LIBRARY, FUNCTION [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]])
dnl
dnl Same semantic as AC_CHECK_LIB except that it aborts the configuration
dnl script if the library is not found or compilation fails.
dnl
dnl @version $Id: acinclude.m4,v 1.5 2002/09/02 10:40:09 loic Exp $
dnl @author Loic Dachary <loic@senga.org>
dnl
AC_DEFUN([AC_MANDATORY_LIB],
[AC_MSG_CHECKING([for $2 in -l$1])
dnl Use a cache variable name containing both the library and function name,
dnl because the test really is for library $1 defining function $2, not
dnl just for library $1. Separate tests with the same $1 and different $2s
dnl may have different results.
ac_lib_var=`echo $1['_']$2 | sed 'y%./+-%__p_%'`
AC_CACHE_VAL(ac_cv_lib_$ac_lib_var,
[ac_save_LIBS="$LIBS"
LIBS="-l$1 $5 $LIBS"
AC_TRY_LINK(dnl
ifelse(AC_LANG, [FORTRAN77], ,
ifelse([$2], [main], , dnl Avoid conflicting decl of main.
[/* Override any gcc2 internal prototype to avoid an error. */
]ifelse(AC_LANG, CPLUSPLUS, [#ifdef __cplusplus
extern "C"
#endif
])dnl
[/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char $2();
])),
[$2()],
eval "ac_cv_lib_$ac_lib_var=yes",
eval "ac_cv_lib_$ac_lib_var=no")
LIBS="$ac_save_LIBS"
])dnl
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
AC_MSG_RESULT(yes)
ifelse([$3], ,
[changequote(, )dnl
ac_tr_lib=HAVE_LIB`echo $1 | sed -e 's/[^a-zA-Z0-9_]/_/g' \
-e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
changequote([, ])dnl
AC_DEFINE_UNQUOTED($ac_tr_lib)
LIBS="-l$1 $LIBS"
], [$3])
else
AC_MSG_ERROR(library not found check config.log)
ifelse([$4], , , [$4
])dnl
fi
])
dnl @synopsis AC_COMPILE_WARNINGS
dnl
dnl Set the maximum warning verbosity according to compiler used.
dnl Currently supports g++ and gcc.
dnl This macro must be put after AC_PROG_CC and AC_PROG_CXX in
dnl configure.in
dnl
dnl @version $Id: acinclude.m4,v 1.5 2002/09/02 10:40:09 loic Exp $
dnl @author Loic Dachary <loic@senga.org>
dnl
AC_DEFUN(AC_COMPILE_WARNINGS,
[AC_MSG_CHECKING(maximum warning verbosity option)
if test -n "$CXX"
then
if test "$GXX" = "yes"
then
ac_compile_warnings_opt='-Wall -Woverloaded-virtual'
fi
CXXFLAGS="$CXXFLAGS $ac_compile_warnings_opt"
ac_compile_warnings_msg="$ac_compile_warnings_opt for C++"
fi
if test -n "$CC"
then
if test "$GCC" = "yes"
then
ac_compile_warnings_opt='-Wall -Wmissing-declarations -Wmissing-prototypes'
fi
CFLAGS="$CFLAGS $ac_compile_warnings_opt"
ac_compile_warnings_msg="$ac_compile_warnings_msg $ac_compile_warnings_opt for C"
fi
AC_MSG_RESULT($ac_compile_warnings_msg)
unset ac_compile_warnings_msg
unset ac_compile_warnings_opt
])

5253
unac/aclocal.m4 vendored Normal file

File diff suppressed because it is too large Load Diff

405
unac/builder.in Normal file
View File

@ -0,0 +1,405 @@
#
# Copyright (C) 2000, 2001, 2002 Loic Dachary <loic@senga.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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
#
# Generate a table mapping UTF-16 characters to their unaccented
# equivalent. Some characters such as fi (one character) are expanded
# into two letters : f and i. In Unicode jargon it means that the table
# map each character to its compatibility decomposition in which marks
# were stripped.
#
# The format of the $base file can be found at:
# http://www.unicode.org/Public/3.2-Update/UnicodeData-3.2.0.html
#
use strict;
use Getopt::Long;
sub main {
my($base) = "UnicodeData-@UNICODE_VERSION@.txt";
my($verbose);
my($source);
my($reference);
GetOptions("verbose+" => \$verbose,
"database=s" => \$base,
"source!" => \$source,
"reference!" => \$reference);
my(%decomposition, %mark, %name);
my(%ranges);
open(FILE, "<$base") or die "cannot open $base for reading : $!";
while(<FILE>) {
next if(/^\s*#/); # Skip comments
my($code_value,
$character_name,
$general_category,
$canonical_combining_classes,
$bidirectional_category,
$character_decomposition_mapping,
$decimal_digit_value,
$digit_value,
$numeric_value,
$mirrored,
$unicode_1_0_name,
$_10646_comment_field,
$uppercase_mapping,
$lowercase_mapping,
$titlecase_mapping) = split(/;/, $_);
#
# Generate ranges of values that are not explicitly listed.
# CJK ideographs for instance.
#
if($character_name =~ /^<(.*), (First|Last)>/) {
$ranges{$1}{$2} = $code_value;
}
if($character_decomposition_mapping =~ /(<.*>)?\s*(.+)/) {
$decomposition{$code_value} = $2;
}
if($general_category =~ /^M/) {
$mark{$code_value} = 1;
}
$name{$code_value} = $character_name;
}
close(FILE);
#
# Generate compatibility decomposition and strip marks
# (marks == diacritics == accents)
#
my($from, $to);
while(($from, $to) = each(%decomposition)) {
my(@code_values) = split(' ', $to);
my($code_value);
my(@decomposition);
while(@code_values) {
my($code_value) = shift(@code_values);
if(exists($decomposition{$code_value})) {
push(@code_values, split(' ', $decomposition{$code_value}));
} elsif(!exists($mark{$code_value})) {
push(@decomposition, $code_value);
}
}
if(@decomposition) {
$decomposition{$from} = "@decomposition";
} else {
delete($decomposition{$from});
}
}
reference(\%decomposition, $verbose) if($reference);
source(\%decomposition, \%name, $verbose) if($source);
}
#
# Generate machine readable file mapping all UTF-16 codes
# to their unaccented replacement. This file can be compared
# with the output of a program doing the same mapping using the
# libunac library.
#
sub reference {
my($decomposition, $verbose) = @_;
my($code_value);
foreach $code_value (0 .. 0xFFFF) {
$code_value = uc(sprintf("%04x", $code_value));
print "$code_value";
if(exists($decomposition->{$code_value})) {
print " => $decomposition->{$code_value}\n";
} else {
print "\n";
}
}
}
#
# Read input file into hash table and return it.
#
# The input is divided in chuncks according to special markers. For
# instance:
#
# before
# /* Generated by builder. Do not modify. Start a_tag */
# bla bla
# /* Generated by builder. Do not modify. End a_tag */
# after
# /* Generated by builder. Do not modify. Start b_tag */
# more stuff
# /* Generated by builder. Do not modify. End b_tag */
# still something
#
# Will generate the following hash:
#
# {
# 'list' => [ 1, a_tag, 2, b_tag, 3 ],
# '1' => "before\n",
# 'a_tag' => undef,
# '2' => "after\n";
# 'b_tag' => undef,
# '3' => "still something\n"
# }
#
# The caller may then assign a string to the a_tag and b_tag entries
# and then call the spit function to rebuild the file.
#
sub slurp {
my($file) = @_;
my(%content);
my($count) = 1;
my(@lines);
open(FILE, "<$file") or die "cannot open $file for reading : $!";
while(<FILE>) {
if(/Do not modify. Start\s+(\w+)/i) {
push(@{$content{'list'}}, $count);
$content{$count} = join("", @lines);
$count++;
push(@{$content{'list'}}, $1);
@lines = ();
}
next if(/Do not modify. Start/i .. /Do not modify. End/i);
push(@lines, $_);
}
if(@lines) {
push(@{$content{'list'}}, $count);
$content{$count} = join("", @lines);
}
close(FILE);
return \%content;
}
#
# Write the $file with the content of the $content hash table.
# See the slurp function for a description of the $content format.
#
sub spit {
my($file, $content) = @_;
open(FILE, ">$file") or die "cannot open $file for writing : $!";
my($tag);
foreach $tag (@{$content->{'list'}}) {
print(FILE "/* Generated by builder. Do not modify. Start $tag */\n") if($tag !~ /^\d+$/);
print FILE $content->{$tag};
print(FILE "/* Generated by builder. Do not modify. End $tag */\n") if($tag !~ /^\d+$/);
}
close(FILE);
}
#
# Generate tables, defines and code in the unac.c and unac.h files.
# The unac.c and unac.h files are substituted in place.
#
sub source {
my($decomposition, $name, $verbose) = @_;
my($csource) = slurp("unac.c");
my($hsource) = slurp("unac.h");
#
# Human readable table
#
my(@comment);
push(@comment, "/*\n");
my($from);
foreach $from (sort(keys(%$decomposition))) {
my($character_name) = $name->{$from};
$character_name = "??" if(!$character_name);
push(@comment, " * $from $character_name\n");
my($code_value);
foreach $code_value (split(' ', $decomposition->{$from})) {
$character_name = $name->{$code_value} || "??";
push(@comment, " * \t$code_value $character_name\n");
}
}
push(@comment, "*/\n");
my($comment) = join("", @comment);
#
# Select the best block size (the one that takes less space)
#
# result: $best_blocks (array of blocks that contain exactly
# $block_count replacements. Each block
# is a string containing replacements
# separated by |)
# $best_indexes (array mapping block number to a block
# in the $best_blocks array)
# $best_block_shift (the size of the block)
#
# Within a block, if the character has no replacement the 0xFFFF
# placeholder is inserted.
#
my($best_blocks);
my($best_indexes);
my($best_block_shift);
my($best_total_size) = 10 * 1024 * 1024;
my($block_shift);
foreach $block_shift (2 .. 10) {
my($block_count) = 1 << $block_shift;
my(@blocks, @indexes);
my($duplicate) = 0;
my(@values);
my($code_value);
foreach $code_value (0 .. 0x10000) {
if($code_value > 0 && $code_value % $block_count == 0) {
my($block) = join("|", @values);
my($existing_block);
my($index) = 0;
my($found);
foreach $existing_block (@blocks) {
if($block eq $existing_block) {
push(@indexes, $index);
$found = 1;
$duplicate++;
last;
}
$index++;
}
if(!$found) {
push(@indexes, $index);
push(@blocks, $block);
}
@values = ();
}
$code_value = uc(sprintf("%04x", $code_value));
if(exists($decomposition->{$code_value})) {
push(@values, $decomposition->{$code_value});
} else {
push(@values, "FFFF");
}
}
print STDERR scalar(@blocks) . " blocks of " . $block_count . " entries, factorized $duplicate blocks\n\t" if($verbose);
my($block_size) = 0;
my($block);
foreach $block (@blocks) {
my(@tmp) = split(/[| ]/, $block);
$block_size += scalar(@tmp) * 2;
}
#
# Pointer to the block array
#
$block_size += scalar(@blocks) * 4;
#
# Positions of the entries in the block
#
$block_size += $block_count * scalar(@blocks) * 2;
print STDERR "total block size = $block_size, " if($verbose);
my($index_size) = (1 << (16 - $block_shift)) * 2;
print STDERR "index size = " . $index_size . "\n\t" if($verbose);
my($total_size) = $block_size + $index_size;
print STDERR "total size = $total_size\n" if($verbose);
if($total_size < $best_total_size) {
$best_total_size = $total_size;
$best_blocks = \@blocks;
$best_indexes = \@indexes;
$best_block_shift = $block_shift;
}
}
my($block_count) = scalar(@$best_blocks);
my($block_size) = 1 << $best_block_shift;
#
# Constants that depend on the block size.
# result : $defines
#
my($defines) = <<EOF;
#define UNAC_BLOCK_SHIFT $best_block_shift
#define UNAC_BLOCK_MASK ((1 << UNAC_BLOCK_SHIFT) - 1)
#define UNAC_BLOCK_SIZE (1 << UNAC_BLOCK_SHIFT)
#define UNAC_BLOCK_COUNT $block_count
#define UNAC_INDEXES_SIZE (0x10000 >> UNAC_BLOCK_SHIFT)
EOF
#
# Mapping block number to index in data_table or position table.
# result : $index_out
#
my($count) = 0;
my($index);
my($index_out) = "unsigned short unac_indexes[UNAC_INDEXES_SIZE] = {\n";
foreach $index (@$best_indexes) {
$count++;
$index_out .= sprintf("%4s,", $index);
if($count % 15 == 0) {
$index_out .= "\n";
}
}
$index_out =~ s/,\s*\Z/\n/s;
$index_out .= "};\n";
#
# Generate the position table (map character number in block to
# position in the data string), the data_table that maps a block
# to a unsigned short array that contains the character (aka the
# data array) and the data arrays themselves that is a pure concatenation
# of all the unsigned short in a block.
# result : $position_out, $data_table_out, $data_out
#
my(@positions_out);
my($highest_position) = 0;
my(@data_table_out);
my($data_table_out) = "unsigned short* unac_data_table[UNAC_BLOCK_COUNT] = {\n";
my(@data_out);
my($block_number) = 0;
my($block);
foreach $block (@$best_blocks) {
my(@index);
my($position) = 0;
my($entry);
my(@data);
foreach $entry (split('\|', $block)) {
push(@index, $position);
my(@tmp) = split(' ', $entry);
push(@data, @tmp);
$position += scalar(@tmp);
}
push(@index, $position);
$highest_position = $position if($position > $highest_position);
push(@positions_out, "/* $block_number */ { " . join(", ", @index) . " }");
push(@data_table_out, "unac_data$block_number");
push(@data_out, "unsigned short unac_data$block_number" . "[] = { 0x" . join(", 0x", @data) . " };\n");
$block_number++;
}
my($position_type) = $highest_position >= 256 ? "short" : "char";
my($positions_out) = "unsigned $position_type unac_positions[UNAC_BLOCK_COUNT][UNAC_BLOCK_SIZE + 1] = {\n";
$positions_out .= join(",\n", @positions_out);
$positions_out .= "\n};\n";
my($data_out) = join("", @data_out);
$data_table_out .= join(",\n", @data_table_out);
$data_table_out .= "\n};\n";
#
# Tables declarations
# result : $declarations
#
my($declarations);
$declarations = <<EOF;
extern unsigned short unac_indexes[UNAC_INDEXES_SIZE];
extern unsigned $position_type unac_positions[UNAC_BLOCK_COUNT][UNAC_BLOCK_SIZE + 1];
extern unsigned short* unac_data_table[UNAC_BLOCK_COUNT];
EOF
for($block_number = 0; $block_number < $block_count; $block_number++) {
$declarations .= "extern unsigned short unac_data$block_number" . "[];\n";
}
$csource->{'tables'} = "$comment\n$index_out\n$positions_out\n$data_out\n$data_table_out";
$hsource->{'defines'} = $defines;
$hsource->{'declarations'} = $declarations;
spit("unac.c", $csource);
spit("unac.h", $hsource);
}
main();

1325
unac/config.guess vendored Executable file

File diff suppressed because it is too large Load Diff

71
unac/config.h.in Normal file
View File

@ -0,0 +1,71 @@
/* 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 `getopt_long' function. */
#undef HAVE_GETOPT_LONG
/* Define if you have the iconv() function. */
#undef HAVE_ICONV
/* Define to 1 if you have the `iconv_open' function. */
#undef HAVE_ICONV_OPEN
/* 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 you have the `vsnprintf' function. */
#undef HAVE_VSNPRINTF
/* Define as const if the declaration of iconv() needs const. */
#undef ICONV_CONST
/* 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
/* Define to 1 if on AIX 3.
System headers sometimes define this.
We just want to avoid a redefinition error message. */
#ifndef _ALL_SOURCE
# undef _ALL_SOURCE
#endif

1460
unac/config.sub vendored Executable file

File diff suppressed because it is too large Load Diff

9713
unac/configure vendored Executable file

File diff suppressed because it is too large Load Diff

62
unac/configure.ac Normal file
View File

@ -0,0 +1,62 @@
#
# Copyright (C) 2000, 2001, 2002 Loic Dachary <loic@senga.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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
AC_INIT(config.h.in)
VERSION=`cat ${srcdir}/.version`
MAJOR_VERSION=[`expr $VERSION : '\([0-9][0-9]*\)'`]
AC_SUBST(MAJOR_VERSION)
MINOR_VERSION=[`expr $VERSION : '[0-9][0-9]*\.\([0-9][0-9]*\)'`]
AC_SUBST(MINOR_VERSION)
MICRO_VERSION=[`expr $VERSION : '[0-9][0-9]*\.[0-9][0-9]*\.\([0-9][0-9]*\)'`]
AC_SUBST(MICRO_VERSION)
AM_INIT_AUTOMAKE([unac], $VERSION, nosubst)
AC_PREREQ(2.13)
AM_CONFIG_HEADER(config.h)
AC_PROG_MAKE_SET
dnl
dnl Unicode version used by unac, as published at http://www.unicode.org/Public/
dnl
UNICODE_VERSION=3.2.0
AC_SUBST(UNICODE_VERSION)
AC_PROG_CC
AC_AIX
AC_COMPILE_WARNINGS
AM_PROG_LIBTOOL
AC_PATH_PROG(PERL, perl, /usr/bin/perl)
AC_PATH_PROG(SH, sh, /bin/sh)
AM_MAINTAINER_MODE
AM_ICONV
AC_CHECK_FUNCS(iconv_open,,AC_MSG_ERROR([
iconv_open not found try to install replacement from
http://www.gnu.org/software/libiconv/
ftp://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.8.tar.gz]))
AC_CHECK_FUNCS(vsnprintf)
AC_LIBSOURCES(getopt.c)
AC_CHECK_FUNCS(getopt_long,,[AC_LIBOBJ(getopt)])
AC_OUTPUT(Makefile unac.pc unac.spec t_unac builder, chmod +x t_unac)

411
unac/depcomp Executable file
View File

@ -0,0 +1,411 @@
#! /bin/sh
# depcomp - compile a program generating dependencies as side-effects
# Copyright 1999, 2000 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., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, 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>.
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
# `libtool' can also be set to `yes' or `no'.
depfile=${depfile-`echo "$object" | sed 's,\([^/]*\)$,.deps/\1,;s/\.\([^.]*\)$/.P\1/'`}
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. 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.
stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'`
tmpdepfile="$stripped.u"
outname="$stripped.o"
if test "$libtool" = yes; then
"$@" -Wc,-M
else
"$@" -M
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile"
exit $stat
fi
if test -f "$tmpdepfile"; then
# Each line is of the form `foo.o: dependent.h'.
# Do two passes, one to just change these to
# `$object: dependent.h' and one to simply `dependent.h:'.
sed -e "s,^$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"
;;
tru64)
# The Tru64 AIX 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.
tmpdepfile1="$object.d"
tmpdepfile2=`echo "$object" | sed -e 's/.o$/.d/'`
if test "$libtool" = yes; then
"$@" -Wc,-MD
else
"$@" -MD
fi
stat=$?
if test $stat -eq 0; then :
else
rm -f "$tmpdepfile1" "$tmpdepfile2"
exit $stat
fi
if test -f "$tmpdepfile1"; then
tmpdepfile="$tmpdepfile1"
else
tmpdepfile="$tmpdepfile2"
fi
if test -f "$tmpdepfile"; then
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
# That's a space and a tab 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 proprocessed file to stdout, regardless of -o,
# because we must use -o when running libtool.
test -z "$dashmflag" && dashmflag=-M
( IFS=" "
case " $* " in
*" --mode=compile "*) # this is libtool, let us make it quiet
for arg
do # cycle over the arguments
case "$arg" in
"--mode=compile")
# insert --quiet before "--mode=compile"
set fnord "$@" --quiet
shift # fnord
;;
esac
set fnord "$@" "$arg"
shift # fnord
shift # "$arg"
done
;;
esac
"$@" $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
) &
proc=$!
"$@"
stat=$?
wait "$proc"
if test "$stat" != 0; then exit $stat; fi
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)
# 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;;
-*)
;;
*)
set fnord "$@" "$arg"; shift;;
esac
done
obj_suffix="`echo $object | sed 's/^.*\././'`"
touch "$tmpdepfile"
${MAKEDEPEND-makedepend} 2>/dev/null -o"$obj_suffix" -f"$tmpdepfile" "$@"
) &
proc=$!
"$@"
stat=$?
wait "$proc"
if test "$stat" != 0; then exit $stat; fi
rm -f "$depfile"
cat < "$tmpdepfile" > "$depfile"
tail +3 "$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 proprocessed file to stdout, regardless of -o,
# because we must use -o when running libtool.
( IFS=" "
case " $* " in
*" --mode=compile "*)
for arg
do # cycle over the arguments
case $arg in
"--mode=compile")
# insert --quiet before "--mode=compile"
set fnord "$@" --quiet
shift # fnord
;;
esac
set fnord "$@" "$arg"
shift # fnord
shift # "$arg"
done
;;
esac
"$@" -E |
sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
sed '$ s: \\$::' > "$tmpdepfile"
) &
proc=$!
"$@"
stat=$?
wait "$proc"
if test "$stat" != 0; then exit $stat; fi
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 proprocessed file to stdout, regardless of -o,
# because we must use -o when running libtool.
( IFS=" "
case " $* " in
*" --mode=compile "*)
for arg
do # cycle over the arguments
case $arg in
"--mode=compile")
# insert --quiet before "--mode=compile"
set fnord "$@" --quiet
shift # fnord
;;
esac
set fnord "$@" "$arg"
shift # fnord
shift # "$arg"
done
;;
esac
"$@" -E |
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
) &
proc=$!
"$@"
stat=$?
wait "$proc"
if test "$stat" != 0; then exit $stat; fi
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

1279
unac/getopt.c Normal file

File diff suppressed because it is too large Load Diff

181
unac/getopt.h Normal file
View File

@ -0,0 +1,181 @@
/* Declarations for getopt.
Copyright (C) 1989-1994, 1996-1999, 2001 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
#ifndef _GETOPT_H
#ifndef __need_getopt
# define _GETOPT_H 1
#endif
/* If __GNU_LIBRARY__ is not already defined, either we are being used
standalone, or this is the first header included in the source file.
If we are being used with glibc, we need to include <features.h>, but
that does not exist if we are standalone. So: if __GNU_LIBRARY__ is
not defined, include <ctype.h>, which will pull in <features.h> for us
if it's from glibc. (Why ctype.h? It's guaranteed to exist and it
doesn't flood the namespace with stuff the way some other headers do.) */
#if !defined __GNU_LIBRARY__
# include <ctype.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* For communication from `getopt' to the caller.
When `getopt' finds an option that takes an argument,
the argument value is returned here.
Also, when `ordering' is RETURN_IN_ORDER,
each non-option ARGV-element is returned here. */
extern char *optarg;
/* Index in ARGV of the next element to be scanned.
This is used for communication to and from the caller
and for communication between successive calls to `getopt'.
On entry to `getopt', zero means this is the first call; initialize.
When `getopt' returns -1, this is the index of the first of the
non-option elements that the caller should itself scan.
Otherwise, `optind' communicates from one call to the next
how much of ARGV has been scanned so far. */
extern int optind;
/* Callers store zero here to inhibit the error message `getopt' prints
for unrecognized options. */
extern int opterr;
/* Set to an option character which was unrecognized. */
extern int optopt;
#ifndef __need_getopt
/* Describe the long-named options requested by the application.
The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
of `struct option' terminated by an element containing a name which is
zero.
The field `has_arg' is:
no_argument (or 0) if the option does not take an argument,
required_argument (or 1) if the option requires an argument,
optional_argument (or 2) if the option takes an optional argument.
If the field `flag' is not NULL, it points to a variable that is set
to the value given in the field `val' when the option is found, but
left unchanged if the option is not found.
To have a long-named option do something other than set an `int' to
a compiled-in constant, such as set a value from `optarg', set the
option's `flag' field to zero and its `val' field to a nonzero
value (the equivalent single-letter option character, if there is
one). For long options that have a zero `flag' field, `getopt'
returns the contents of the `val' field. */
struct option
{
# if (defined __STDC__ && __STDC__) || defined __cplusplus
const char *name;
# else
char *name;
# endif
/* has_arg can't be an enum because some compilers complain about
type mismatches in all the code that assumes it is an int. */
int has_arg;
int *flag;
int val;
};
/* Names for the values of the `has_arg' field of `struct option'. */
# define no_argument 0
# define required_argument 1
# define optional_argument 2
#endif /* need getopt */
/* Get definitions and prototypes for functions to process the
arguments in ARGV (ARGC of them, minus the program name) for
options given in OPTS.
Return the option character from OPTS just read. Return -1 when
there are no more options. For unrecognized options, or options
missing arguments, `optopt' is set to the option letter, and '?' is
returned.
The OPTS string is a list of characters which are recognized option
letters, optionally followed by colons, specifying that that letter
takes an argument, to be placed in `optarg'.
If a letter in OPTS is followed by two colons, its argument is
optional. This behavior is specific to the GNU `getopt'.
The argument `--' causes premature termination of argument
scanning, explicitly telling `getopt' that there are no more
options.
If OPTS begins with `--', then non-option arguments are treated as
arguments to the option '\0'. This behavior is specific to the GNU
`getopt'. */
#if (defined __STDC__ && __STDC__) || defined __cplusplus
# ifdef __GNU_LIBRARY__
/* Many other libraries have conflicting prototypes for getopt, with
differences in the consts, in stdlib.h. To avoid compilation
errors, only prototype getopt for the GNU C library. */
extern int getopt (int ___argc, char *const *___argv, const char *__shortopts);
# else /* not __GNU_LIBRARY__ */
extern int getopt ();
# endif /* __GNU_LIBRARY__ */
# ifndef __need_getopt
extern int getopt_long (int ___argc, char *const *___argv,
const char *__shortopts,
const struct option *__longopts, int *__longind);
extern int getopt_long_only (int ___argc, char *const *___argv,
const char *__shortopts,
const struct option *__longopts, int *__longind);
/* Internal only. Users should not call this directly. */
extern int _getopt_internal (int ___argc, char *const *___argv,
const char *__shortopts,
const struct option *__longopts, int *__longind,
int __long_only);
# endif
#else /* not __STDC__ */
extern int getopt ();
# ifndef __need_getopt
extern int getopt_long ();
extern int getopt_long_only ();
extern int _getopt_internal ();
# endif
#endif /* __STDC__ */
#ifdef __cplusplus
}
#endif
/* Make sure we later can get all the definitions and declarations. */
#undef __need_getopt
#endif /* getopt.h */

251
unac/install-sh Executable file
View File

@ -0,0 +1,251 @@
#!/bin/sh
#
# install - install a program, script, or datafile
# This comes from X11R5 (mit/util/scripts/install.sh).
#
# Copyright 1991 by the Massachusetts Institute of Technology
#
# Permission to use, copy, modify, distribute, and sell this software and its
# documentation for any purpose is hereby granted without fee, provided that
# the above copyright notice appear in all copies and that both that
# copyright notice and this permission notice appear in supporting
# documentation, and that the name of M.I.T. not be used in advertising or
# publicity pertaining to distribution of the software without specific,
# written prior permission. M.I.T. makes no representations about the
# suitability of this software for any purpose. It is provided "as is"
# without express or implied warranty.
#
# 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}"
transformbasename=""
transform_arg=""
instcmd="$mvprog"
chmodcmd="$chmodprog 0755"
chowncmd=""
chgrpcmd=""
stripcmd=""
rmcmd="$rmprog -f"
mvcmd="$mvprog"
src=""
dst=""
dir_arg=""
while [ x"$1" != x ]; do
case $1 in
-c) instcmd="$cpprog"
shift
continue;;
-d) dir_arg=true
shift
continue;;
-m) chmodcmd="$chmodprog $2"
shift
shift
continue;;
-o) chowncmd="$chownprog $2"
shift
shift
continue;;
-g) chgrpcmd="$chgrpprog $2"
shift
shift
continue;;
-s) stripcmd="$stripprog"
shift
continue;;
-t=*) transformarg=`echo $1 | sed 's/-t=//'`
shift
continue;;
-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
shift
continue;;
*) if [ x"$src" = x ]
then
src=$1
else
# this colon is to work around a 386BSD /bin/sh bug
:
dst=$1
fi
shift
continue;;
esac
done
if [ x"$src" = x ]
then
echo "install: no input file specified"
exit 1
else
true
fi
if [ x"$dir_arg" != x ]; then
dst=$src
src=""
if [ -d $dst ]; then
instcmd=:
chmodcmd=""
else
instcmd=mkdir
fi
else
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
# might cause directories to be created, which would be especially bad
# if $src (and thus $dsttmp) contains '*'.
if [ -f $src -o -d $src ]
then
true
else
echo "install: $src does not exist"
exit 1
fi
if [ x"$dst" = x ]
then
echo "install: no destination specified"
exit 1
else
true
fi
# If destination is a directory, append the input filename; if your system
# does not like double slashes in filenames, you may need to add some logic
if [ -d $dst ]
then
dst="$dst"/`basename $src`
else
true
fi
fi
## this sed command emulates the dirname command
dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
# Make sure that the destination directory exists.
# this part is taken from Noah Friedman's mkinstalldirs script
# Skip lots of stat calls in the usual case.
if [ ! -d "$dstdir" ]; then
defaultIFS='
'
IFS="${IFS-${defaultIFS}}"
oIFS="${IFS}"
# Some sh's can't handle IFS=/ for some reason.
IFS='%'
set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
IFS="${oIFS}"
pathcomp=''
while [ $# -ne 0 ] ; do
pathcomp="${pathcomp}${1}"
shift
if [ ! -d "${pathcomp}" ] ;
then
$mkdirprog "${pathcomp}"
else
true
fi
pathcomp="${pathcomp}/"
done
fi
if [ x"$dir_arg" != x ]
then
$doit $instcmd $dst &&
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
else
# If we're going to rename the final executable, determine the name now.
if [ x"$transformarg" = x ]
then
dstfile=`basename $dst`
else
dstfile=`basename $dst $transformbasename |
sed $transformarg`$transformbasename
fi
# don't allow the sed command to completely eliminate the filename
if [ x"$dstfile" = x ]
then
dstfile=`basename $dst`
else
true
fi
# Make a temp file name in the proper directory.
dsttmp=$dstdir/#inst.$$#
# Move or copy the file name to the temp name
$doit $instcmd $src $dsttmp &&
trap "rm -f ${dsttmp}" 0 &&
# 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 $instcmd $src $dsttmp" command.
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
# Now rename the file to the real destination.
$doit $rmcmd -f $dstdir/$dstfile &&
$doit $mvcmd $dsttmp $dstdir/$dstfile
fi &&
exit 0

3114
unac/ltconfig Executable file

File diff suppressed because it is too large Load Diff

5055
unac/ltmain.sh Normal file

File diff suppressed because it is too large Load Diff

283
unac/missing Executable file
View File

@ -0,0 +1,283 @@
#! /bin/sh
# Common stub for a few missing GNU programs while installing.
# Copyright 1996, 1997, 1999, 2000 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., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, 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
case "$1" in
--run)
# Try to run requested program, and just exit if it succeeds.
run=
shift
"$@" && exit 0
;;
esac
# If it does not exist, or fails to run (possibly an outdated version),
# try to emulate it.
case "$1" in
-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]"
;;
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
echo "missing 0.3 - GNU automake"
;;
-*)
echo 1>&2 "$0: Unknown \`$1' option"
echo 1>&2 "Try \`$0 --help' for more information"
exit 1
;;
aclocal)
echo 1>&2 "\
WARNING: \`$1' is missing on your system. 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 missing on your system. 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 missing on your system. 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 missing on your system. 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
;;
bison|yacc)
echo 1>&2 "\
WARNING: \`$1' is missing on your system. 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 missing on your system. 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 missing on your system. 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)
if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then
# We have makeinfo, but it failed.
exit 1
fi
echo 1>&2 "\
WARNING: \`$1' is missing on your system. 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."
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
if test -z "$file"; then
file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
fi
touch $file
;;
tar)
shift
if test -n "$run"; then
echo 1>&2 "ERROR: \`tar' requires --run"
exit 1
fi
# 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 ${1+"$@"} && exit 0
fi
if (gtar --version > /dev/null 2>&1); then
gtar ${1+"$@"} && exit 0
fi
firstarg="$1"
if shift; then
case "$firstarg" in
*o*)
firstarg=`echo "$firstarg" | sed s/o//`
tar "$firstarg" ${1+"$@"} && exit 0
;;
esac
case "$firstarg" in
*h*)
firstarg=`echo "$firstarg" | sed s/h//`
tar "$firstarg" ${1+"$@"} && 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 you do not seem to have it handy on your
system. 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 prerequirements 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

40
unac/mkinstalldirs Executable file
View File

@ -0,0 +1,40 @@
#! /bin/sh
# mkinstalldirs --- make directory hierarchy
# Author: Noah Friedman <friedman@prep.ai.mit.edu>
# Created: 1993-05-16
# Public domain
# $Id: mkinstalldirs,v 1.4 2002/09/02 10:51:42 loic Exp $
errstatus=0
for file
do
set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
shift
pathcomp=
for d
do
pathcomp="$pathcomp$d"
case "$pathcomp" in
-* ) pathcomp=./$pathcomp ;;
esac
if test ! -d "$pathcomp"; then
echo "mkdir $pathcomp"
mkdir "$pathcomp" || lasterr=$?
if test ! -d "$pathcomp"; then
errstatus=$lasterr
fi
fi
pathcomp="$pathcomp/"
done
done
exit $errstatus
# mkinstalldirs ends here

1
unac/stamp-h.in Normal file
View File

@ -0,0 +1 @@
timestamp

35
unac/t_unac.in Executable file
View File

@ -0,0 +1,35 @@
#!@SH@
@PERL@ builder -reference -database $srcdir/UnicodeData-@UNICODE_VERSION@.txt > unac.reference
if ./unactest | diff -bu - unac.reference
then
:
else
echo "unactest | diff - unac.reference must not show any difference" >&2
exit 1
fi
if ./unaccent ISO-8859-1 été ete > /dev/null
then
:
else
./unaccent --debug_high ISO-8859-1 été ete
exit 1
fi
#
# Rune Nordbøe Skillingstad <runesk@linpro.no> on
# UnicodeData-3.2.0.txt: 2 LATIN characters used in Norway didn't have
# a "Character Decomposition Mapping". I've submitted a patch to
# unicode.org that fixes this problem, but it might take some time
# before somebody there have time to do something about it.
#
if ./unaccent ISO-8859-1 æøåÆØÅ aeoaAEOA > /dev/null
then
:
else
./unaccent --debug_high ISO-8859-1 æøåÆØÅ aeoaAEOA
exit 1
fi

390
unac/unac.3 Normal file
View File

@ -0,0 +1,390 @@
'''
''' Copyright (C) 2000, 2001, 2002 Loic Dachary <loic@senga.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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
'''
.TH unac 3 local
.SH NAME
unac \- remove accents from string or character
.SH SYNOPSIS
.nf
.ft CW
#include <unac.h>
const char* unac_version();
int unac_string(const char* charset,
const char* in, int in_length,
char** out, int* out_length);
int unac_string_utf16(const char* in, int in_length,
char** out, int* out_length);
/* MACRO: side effect on unaccented and length */
unac_char_utf16(unsigned short c,
unsigned short* unaccented,
int length);
const char* unac_version()
/*
* level: UNAC_DEBUG_NONE UNAC_DEBUG_LOW UNAC_DEBUG_HIGH
*/
void unac_debug(int level)
/* typedef void (*unac_debug_print_t)(const char* message, void* data); */
void unac_debug_callback(int level, unac_debug_print_t function, void* data)
.ft R
.fi
.SH DESCRIPTION
.I unac
is a C library that removes accents from characters, regardless of the
character set (ISO-8859-15, ISO-CELTIC, KOI8-RU...) as long as
.I iconv(3)
is able to convert it into UTF-16 (Unicode).
The
.B unac_string
function is given a charset (ISO-8859-15 for instance) and a string. It
converts the string into UTF-16 and calls the
.B unac_string_utf16
function to remove all accents from the UTF-16 version. The unaccented
string is then converted into the original charset (ISO-8859-15 for
instance) and sent back to the caller of
.B unac_string.
.I unac
does a little more than removing accents:
every character that is made of two character such as
.B æ
(ISO-8859-15 octal code 346)
will be expanded in two characters
.B a
and
.B e.
Should a character be made of three characters, it would be
decomposed in the same way.
The conversion from and to UTF-16 is
done with
.I iconv(3).
The
.B iconv -l
will list all available charsets. Using UTF-16 as a pivot implies an
overhead but ensures that accents can be removed from all character
for which there is an equivalent character in Unicode.
.B unac_char_utf16
is a macro that returns a pointer to the unaccented equivalent
of any UTF-16 character. It is the basic building block of
.I unac.
.B unac_string_utf16
repeatidly applies the
.B unac_char_utf16
function on each character of an UTF-16 string.
.SH FUNCTIONS
.TP
.B int unac_string(const char* charset, const char* in, int in_length, char** out, int* out_length)
Returns the unaccented equivalent of the string
.B 'in'
of length
.B 'in_length'.
The returned string is stored in the pointer pointed by the
.B 'out'
argument and the length of the string is stored in the integer pointed by
the
.B 'out_length '
argument.
If the
.B '*out'
pointer is not null, it must point to an area allocated by
.I malloc(3)
and the length of the array must be specified in the
.B '*out_length'
argument. Both arguments
.B '*out'
and
.B '*out_length'
will be replaced with the return values when the function returns
on success. The
.B '*out'
pointer may point to a memory location that has been reallocated
by the
.B unac_string
function. There is no guarantee that '*out' is identical to the
value given by the caller and the malloc'ed memory location given
by the caller may not be useable when the function returns (either
error or success).
If the
.B '*out'
pointer is null, the
.B unac_string
function allocates a new memory block using
.I malloc(3).
It is the responsibility of the caller to deallocate the area returned
in the
.B '*out'
pointer.
The return value of
.B unac_string
is 0 on success and -1 on error, in which case
the errno variable is set to the corresponding error code. See
ERROR section below for more information, the
.I iconv(3)
manual page may also help.
.TP
int unac_string_utf16(const char* in, int in_length, char** out, int* out_length)
Has the same effect as
.B unac_string("UTF-16", in, in_length, out, out_length).
Since the
.B unac_string_utf16
is the backend function of the
.B unac_string
function it is more efficient because no charset conversion of the
input string (from and to UTF-16) is necessary.
.TP
unac_char_utf16(const unsigned short c, unsigned short* p, int l)
.B Warning: this is a macro, each argument may be evaluated more than once.
Returns the unaccented equivalent of the UTF-16 character
.B 'c'
in the pointer
.B 'p'.
The length of the unsigned short array pointed by
.B 'p'
is returned in the
.B 'l'
argument.
.TP
.B const char* unac_version()
Return the version number of
.B unac.
.TP
.B void unac_debug(int level)
Set the debug level of the unac library to
.B 'level'.
Possible values are: UNAC_DEBUG_NONE for no debug at all, UNAC_DEBUG_LOW
for terse human readable information, UNAC_DEBUG_HIGH for very detailed
information only usable when translating a few strings.
unac_debug_callback with anything but UNAC_DEBUG_NONE is not
thread safe.
.TP
void unac_debug_callback(int level, unac_debug_print_t function, void* data)
Set the debug level and define a printing function callback.
The
.B 'level'
is the same as in unac_debug. The
.B 'function'
is in charge of dealing with the debug messages,
presumably to print them to the user.
The
.B 'data'
is an opaque pointer that is passed along to
.B function, should it
need to manage a persistent context.
The prototype of
.B 'function'
accepts two arguments. The first
is the debug message
.I (const char*),
the second is the opaque
pointer given as
.B 'data'
argument to
.B unac_debug_callback.
If
.B 'function'
is NULL, messages are printed on the standard
error output using fprintf(stderr...).
unac_debug_callback with anything but UNAC_DEBUG_NONE is not
thread safe.
.B
.SH ERRORS
.TP
EINVAL
the requested conversion pair is not available. For instance, when
specifying the ISO-0000 charset (imaginary), it means it is not possible to
convert from ISO-0000 to UTF-16.
.SH EXAMPLES
Convert the
.B été
string into
.B ete.
.nf
.ft CW
#include <unac.h>
char* out = 0;
int out_length = 0;
if(unac_string("ISO-8859-1", "été", strlen("été"), &out, &out_length)) {
perror("unac_string");
} else {
printf("%.*s\n", out_length, out);
free(out);
}
.ft R
.fi
.SH IMPLEMENTATION NOTES
The endianess of the UTF-16 strings manipulated by
.I unac
must always be big endian. When using
.I iconv(3)
to translate strings, UTF-16BE should be used instead of UTF-16 to make sure
it is big endian (BE). On some systems where UTF-16BE is not available,
.B unac
will rely on UTF-16 and hope it is properly big endian encoded.
For more information check RFC2781 (http://www.faqs.org/rfcs/rfc2781.html: UTF-16,
an encoding of ISO 10646).
The
.I unac
library uses the Unicode database to map accented letters to their unaccented
equivalent. Mapping tables are generated from the
.I UnicodeData-3.2.0.txt
file (as found at http://www.unicode.org/Public/3.2-Update/) by the
.I builder
perl script. The
.I builder
script inserts these tables in the
.I unac.h
and
.I unac.c
files, replacing the existing ones. Looking for the
.B 'Generated by builder'
string in the
.I unac.[ch]
files allows to spot the various parts handled by the builder script.
The library data occupies 25KB where a simple minded table would
occupy around 512Kbytes. The idea used to compress the tables is that
many Unicode characters do not have unaccented equivalent. Instead of
relying on a table mapping each Unicode character to the corresponding
unaccented character, an intermediate array of pointers is created. In
the drawing below, the range of UTF-16 character is not accurate but
illustrates the method. The
.B unac_data_table
points to a set of
.B unac_dataXX
arrays. Each pointer covers a range of UTF-16 characters (4 in the example
below). When a range of character does not contain any accented character,
unac_data_table always points to the same array : unac_data0. Since there
are many characters without accents, this is enough to achieve a good
compression.
.nf
.ft CW
unac_data15 unac_data16
[ NULL, NULL, NULL, e ] <----\ /------> [ a, NULL, NULL, NULL ]
| |
| |
^ ^
|-----| |-----| |-----| |-----| |-----| |-----|
[ ... a b c d e f g h i j k é à 0 1 2 3 4 5 6 7 8 9 A... ] unac_data_table
|-----| |-----| |-----| |-----| |-----| |-----|
v v v v
| | | |
| | | |
\--------------------------------------/
|
V
[ NULL, NULL, NULL, NULL ]
unac_data0
.ft R
.fi
Beside this simple optimization, a table (unac_positions) listing the
actual position of the unaccented replacement within a block
(unac_dataXX) is necessary because they are not of fixed length. Some
characters such as
.B æ
will
be replaced by two characters
.B a
and
.B e
therefore unac_dataXX has a variable size.
The unaccented equivalent of an UTF-16 character is calculated by
applying a
.I compatibility decomposition
and then stripping all characters that belong to the
.I mark
category. For a precise definition see the Unicode-3.2 normalization
forms at http://www.unicode.org/unicode/reports/tr28/.
All original Unicode data files were taken from
http://www.unicode.org/Public and prepended with the
.B UCD Terms of Use.
.SH BUGS
The input string must not contain partially formed characters, there is
no support for this case.
UTF-16 surrogates are not handled.
Unicode may contain bugs in the decomposition of characters. When
you suspect such a bug on a given string, add a test case with the
faulty string in the
.B t_unac.in
test script in the source distribution and run
make check. It will describe, in a very verbose way, how the string was
unaccented. You may then fix the UnicodeData-3.2.0.txt file and
run make check again to make sure the problem is solved. Please
send such fixes to the author and to the Unicode consortium.
.SH SEE ALSO
unaccent(1), iconv(3)
.nf
.ft CW
http://www.unicode.org/
http://oss.software.ibm.com/icu/
http://www.gnu.org/manual/glibc-2.2.5/libc.html
.ft R
.fi
.SH AUTHOR
Loic Dachary loic@senga.org
.nf
.ft CW
http://www.senga.org/unac/
.ft R
.fi

12843
unac/unac.c Normal file

File diff suppressed because it is too large Load Diff

330
unac/unac.h Normal file
View File

@ -0,0 +1,330 @@
/*
* Copyright (C) 2000, 2001, 2002 Loic Dachary <loic@senga.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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/*
* Provides functions to strip accents from a string in all the
* charset supported by iconv(3).
*
* See the unac(3) manual page for more information.
*
*/
#ifndef _unac_h
#define _unac_h
#ifdef __cplusplus
extern "C" {
#endif
/* Generated by builder. Do not modify. Start defines */
#define UNAC_BLOCK_SHIFT 5
#define UNAC_BLOCK_MASK ((1 << UNAC_BLOCK_SHIFT) - 1)
#define UNAC_BLOCK_SIZE (1 << UNAC_BLOCK_SHIFT)
#define UNAC_BLOCK_COUNT 178
#define UNAC_INDEXES_SIZE (0x10000 >> UNAC_BLOCK_SHIFT)
/* Generated by builder. Do not modify. End defines */
/*
* Return the unaccented equivalent of the UTF-16 character <c>
* in the pointer <p>. The length of the unsigned short array pointed
* by <p> is returned in the <l> argument.
* The C++ prototype of this macro would be:
*
* void unac_char(const unsigned short c, unsigned short*& p, int& l)
*
* See unac(3) in IMPLEMENTATION NOTES for more information about the
* tables (unac_data_table, unac_positions) layout.
*/
#define unac_char_utf16(c,p,l) \
{ \
unsigned short index = unac_indexes[(c) >> UNAC_BLOCK_SHIFT]; \
unsigned char position = (c) & UNAC_BLOCK_MASK; \
(p) = &(unac_data_table[index][unac_positions[index][position]]); \
(l) = unac_positions[index][position + 1] - unac_positions[index][position]; \
if((l) == 1 && *(p) == 0xFFFF) { \
(p) = 0; \
(l) = 0; \
} \
}
/*
* Return the unaccented equivalent of the UTF-16 string <in> of
* length <in_length> in the pointer <out>. The length of the UTF-16
* string returned in <out> is stored in <out_length>. If the pointer
* *out is null, a new string is allocated using malloc(3). If the
* pointer *out is not null, the available length must also be given
* in the *out_length argument. The pointer passed to *out must have
* been allocated by malloc(3) and may be reallocated by realloc(3) if
* needs be. It is the responsibility of the caller to free the
* pointer returned in *out. The return value is 0 on success and -1
* on error, in which case the errno variable is set to the
* corresponding error code.
*/
int unac_string_utf16(const char* in, size_t in_length,
char** out, size_t* out_length);
/*
* The semantic of this function is stricly equal to the function
* unac_string_utf16. The <charset> argument applies to the content of the
* input string. It is converted to UTF-16 using iconv(3) before calling
* the unac_string function and the result is converted from UTF-16 to
* the specified <charset> before returning it in the <out> pointer.
* For efficiency purpose it is recommended that the caller uses
* unac_string and iconv(3) to save buffer allocations overhead.
* The return value is 0 on success and -1 on error, in which case
* the errno variable is set to the corresponding error code.
*/
int unac_string(const char* charset,
const char* in, size_t in_length,
char** out, size_t* out_length);
/*
* Return unac version number.
*/
const char* unac_version(void);
#define UNAC_DEBUG_NONE 0x00
#define UNAC_DEBUG_LOW 0x01
#define UNAC_DEBUG_HIGH 0x02
#ifdef HAVE_VSNPRINTF
#define UNAC_DEBUG_AVAILABLE 1
/*
* Set the unac debug level. <l> is one of:
* UNAC_DEBUG_NONE for no debug messages at all
* UNAC_DEBUG_LOW for minimal information
* UNAC_DEBUG_HIGH for extremely verbose information,
* only usable when translating a few short strings.
*
* unac_debug with anything but UNAC_DEBUG_NONE is not
* thread safe.
*/
#define unac_debug(l) unac_debug_callback((l), 0, (void*)0);
/*
* Set the debug level and define a printing function callback.
* The <level> debug level is the same as in unac_debug. The
* <function> is in charge of dealing with the debug messages,
* presumably to print them to the user. The <data> is an opaque
* pointer that is passed along to <function>, should it
* need to manage a persistent context.
*
* The prototype of <function> allows two arguments. The first
* is the debug message (const char*), the second is the opaque
* pointer given as <data> argument to unac_debug_callback.
*
* If <function> is NULL, messages are printed on the standard
* error output using fprintf(stderr...).
*
* unac_debug_callback with anything but UNAC_DEBUG_NONE is not
* thread safe.
*
*/
typedef void (*unac_debug_print_t)(const char* message, void* data);
void unac_debug_callback(int level, unac_debug_print_t function, void* data);
#endif /* HAVE_VSNPRINTF */
/* Generated by builder. Do not modify. Start declarations */
extern unsigned short unac_indexes[UNAC_INDEXES_SIZE];
extern unsigned char unac_positions[UNAC_BLOCK_COUNT][UNAC_BLOCK_SIZE + 1];
extern unsigned short* unac_data_table[UNAC_BLOCK_COUNT];
extern unsigned short unac_data0[];
extern unsigned short unac_data1[];
extern unsigned short unac_data2[];
extern unsigned short unac_data3[];
extern unsigned short unac_data4[];
extern unsigned short unac_data5[];
extern unsigned short unac_data6[];
extern unsigned short unac_data7[];
extern unsigned short unac_data8[];
extern unsigned short unac_data9[];
extern unsigned short unac_data10[];
extern unsigned short unac_data11[];
extern unsigned short unac_data12[];
extern unsigned short unac_data13[];
extern unsigned short unac_data14[];
extern unsigned short unac_data15[];
extern unsigned short unac_data16[];
extern unsigned short unac_data17[];
extern unsigned short unac_data18[];
extern unsigned short unac_data19[];
extern unsigned short unac_data20[];
extern unsigned short unac_data21[];
extern unsigned short unac_data22[];
extern unsigned short unac_data23[];
extern unsigned short unac_data24[];
extern unsigned short unac_data25[];
extern unsigned short unac_data26[];
extern unsigned short unac_data27[];
extern unsigned short unac_data28[];
extern unsigned short unac_data29[];
extern unsigned short unac_data30[];
extern unsigned short unac_data31[];
extern unsigned short unac_data32[];
extern unsigned short unac_data33[];
extern unsigned short unac_data34[];
extern unsigned short unac_data35[];
extern unsigned short unac_data36[];
extern unsigned short unac_data37[];
extern unsigned short unac_data38[];
extern unsigned short unac_data39[];
extern unsigned short unac_data40[];
extern unsigned short unac_data41[];
extern unsigned short unac_data42[];
extern unsigned short unac_data43[];
extern unsigned short unac_data44[];
extern unsigned short unac_data45[];
extern unsigned short unac_data46[];
extern unsigned short unac_data47[];
extern unsigned short unac_data48[];
extern unsigned short unac_data49[];
extern unsigned short unac_data50[];
extern unsigned short unac_data51[];
extern unsigned short unac_data52[];
extern unsigned short unac_data53[];
extern unsigned short unac_data54[];
extern unsigned short unac_data55[];
extern unsigned short unac_data56[];
extern unsigned short unac_data57[];
extern unsigned short unac_data58[];
extern unsigned short unac_data59[];
extern unsigned short unac_data60[];
extern unsigned short unac_data61[];
extern unsigned short unac_data62[];
extern unsigned short unac_data63[];
extern unsigned short unac_data64[];
extern unsigned short unac_data65[];
extern unsigned short unac_data66[];
extern unsigned short unac_data67[];
extern unsigned short unac_data68[];
extern unsigned short unac_data69[];
extern unsigned short unac_data70[];
extern unsigned short unac_data71[];
extern unsigned short unac_data72[];
extern unsigned short unac_data73[];
extern unsigned short unac_data74[];
extern unsigned short unac_data75[];
extern unsigned short unac_data76[];
extern unsigned short unac_data77[];
extern unsigned short unac_data78[];
extern unsigned short unac_data79[];
extern unsigned short unac_data80[];
extern unsigned short unac_data81[];
extern unsigned short unac_data82[];
extern unsigned short unac_data83[];
extern unsigned short unac_data84[];
extern unsigned short unac_data85[];
extern unsigned short unac_data86[];
extern unsigned short unac_data87[];
extern unsigned short unac_data88[];
extern unsigned short unac_data89[];
extern unsigned short unac_data90[];
extern unsigned short unac_data91[];
extern unsigned short unac_data92[];
extern unsigned short unac_data93[];
extern unsigned short unac_data94[];
extern unsigned short unac_data95[];
extern unsigned short unac_data96[];
extern unsigned short unac_data97[];
extern unsigned short unac_data98[];
extern unsigned short unac_data99[];
extern unsigned short unac_data100[];
extern unsigned short unac_data101[];
extern unsigned short unac_data102[];
extern unsigned short unac_data103[];
extern unsigned short unac_data104[];
extern unsigned short unac_data105[];
extern unsigned short unac_data106[];
extern unsigned short unac_data107[];
extern unsigned short unac_data108[];
extern unsigned short unac_data109[];
extern unsigned short unac_data110[];
extern unsigned short unac_data111[];
extern unsigned short unac_data112[];
extern unsigned short unac_data113[];
extern unsigned short unac_data114[];
extern unsigned short unac_data115[];
extern unsigned short unac_data116[];
extern unsigned short unac_data117[];
extern unsigned short unac_data118[];
extern unsigned short unac_data119[];
extern unsigned short unac_data120[];
extern unsigned short unac_data121[];
extern unsigned short unac_data122[];
extern unsigned short unac_data123[];
extern unsigned short unac_data124[];
extern unsigned short unac_data125[];
extern unsigned short unac_data126[];
extern unsigned short unac_data127[];
extern unsigned short unac_data128[];
extern unsigned short unac_data129[];
extern unsigned short unac_data130[];
extern unsigned short unac_data131[];
extern unsigned short unac_data132[];
extern unsigned short unac_data133[];
extern unsigned short unac_data134[];
extern unsigned short unac_data135[];
extern unsigned short unac_data136[];
extern unsigned short unac_data137[];
extern unsigned short unac_data138[];
extern unsigned short unac_data139[];
extern unsigned short unac_data140[];
extern unsigned short unac_data141[];
extern unsigned short unac_data142[];
extern unsigned short unac_data143[];
extern unsigned short unac_data144[];
extern unsigned short unac_data145[];
extern unsigned short unac_data146[];
extern unsigned short unac_data147[];
extern unsigned short unac_data148[];
extern unsigned short unac_data149[];
extern unsigned short unac_data150[];
extern unsigned short unac_data151[];
extern unsigned short unac_data152[];
extern unsigned short unac_data153[];
extern unsigned short unac_data154[];
extern unsigned short unac_data155[];
extern unsigned short unac_data156[];
extern unsigned short unac_data157[];
extern unsigned short unac_data158[];
extern unsigned short unac_data159[];
extern unsigned short unac_data160[];
extern unsigned short unac_data161[];
extern unsigned short unac_data162[];
extern unsigned short unac_data163[];
extern unsigned short unac_data164[];
extern unsigned short unac_data165[];
extern unsigned short unac_data166[];
extern unsigned short unac_data167[];
extern unsigned short unac_data168[];
extern unsigned short unac_data169[];
extern unsigned short unac_data170[];
extern unsigned short unac_data171[];
extern unsigned short unac_data172[];
extern unsigned short unac_data173[];
extern unsigned short unac_data174[];
extern unsigned short unac_data175[];
extern unsigned short unac_data176[];
extern unsigned short unac_data177[];
/* Generated by builder. Do not modify. End declarations */
#ifdef __cplusplus
}
#endif
#endif /* _unac_h */

13
unac/unac.pc.in Normal file
View File

@ -0,0 +1,13 @@
#
# pkg-config(1) specification file for http://www.senga.org/unac/
#
prefix=@prefix@
exec_prefix=@prefix@
libdir=@libdir@
includedir=@includedir@
Name: unac
Description: A C programmer's library that removes accents from a string.
Version: @VERSION@
Libs: -L${libdir} -lunac
Cflags: -I${includedir}

50
unac/unac.spec.in Normal file
View File

@ -0,0 +1,50 @@
Summary: A C library and a command that remove accents.
Name: unac
Version: @VERSION@
Release: 1
License: GPL
Vendor: Senga
Group: Development/Libraries
Source: http://www.senga.org/download/unac/unac-%{version}.tar.gz
Prefix: %{_prefix}
BuildRoot: %{_tmppath}/%{name}-root
%description
unac is a C library and command that remove accents from a string.
For instance the string été will become ete. It provides a command
line interface that removes accents from a string given in argument
(unaccent command). In the library function and the command, the
charset of the input string is specified as an argument. The input
string is converted to UTF-16 using iconv(3), accents are stripped and
the result is converted back to the original charset. The iconv --list
command on GNU/Linux will show all charset supported.
%prep
%setup -q
%build
%configure
make
%install
make DESTDIR=$RPM_BUILD_ROOT install
%clean
rm -rf ${RPM_BUILD_ROOT}
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%files
%defattr(-,root,root)
%doc ChangeLog README
%{_bindir}/*
%{_libdir}/*
%{_includedir}/*
%{_mandir}/man*/*
%changelog
* Fri Sep 21 2000 Loic Dachary <loic@senga.org>
- Create

115
unac/unaccent.1 Normal file
View File

@ -0,0 +1,115 @@
'''
''' Copyright (C) 2000, 2001, 2002 Loic Dachary <loic@senga.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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
'''
.TH unaccent 1 local
.SH NAME
unaccent \- remove accents from input stream or a string
.SH SYNOPSIS
unaccent [--debug_low] [--debug_high] [-h] charset [string] [expected]
.SH DESCRIPTION
With a single argument,
.I unaccent
reads data from stdin, replaces accented letters by their unaccented
equivalent and writes the result on stdout.
If the second argument
.B ('string')
is provided
.I unaccent
transforms it by replacing accented letters by their unaccented
equivalent. The
result is printed on the standard output.
The charset of the input
string or the data read from stdin is specified by the
.B 'charset'
argument (ISO-8859-15 for instance). The output is printed using the same charset.
.P
If the
.B 'expected'
argument is provided, the output string is compared to it. If they
are not equal
.I unaccent
exits on error.
.P
.I unaccent
relies on the
.B iconv(3)
library to convert from the specified charset to UTF-16BE (or UTF-16
if UTF-16BE is not available). You should check the manual pages for
available charsets. On GNU/Linux the command
.nf
.ft CW
iconv -l
.ft R
.fi
shows all available charsets.
.SH OPTIONS
.TP
.B --debug_low
Prints human readable information about the unaccentuation process. See
.B unac(3)
for more information.
.TP
.B --debug_high
Prints very detailed information about the unaccentuation process.
See
.B unac(3)
for more information.
.TP
.B --help -h
Prints a short usage and exits.
.SH EXAMPLES
Remove accents from the string
.B été
and check that the result is
.B ete.
.nf
.ft CW
unaccent ISO-8859-1 été ete
.ft R
.fi
.P
Remove accents from file
.B myfile
and put the result in file
.B myfile.unaccent
.nf
.ft CW
unaccent ISO-8859-1 < myfile > myfile.unaccent
.ft R
.fi
.SH SEE ALSO
unac(3), iconv(3)
.SH AUTHOR
Loic Dachary loic@senga.org
.nf
.ft CW
http://www.senga.org/unac/
.ft R
.fi

137
unac/unaccent.c Normal file
View File

@ -0,0 +1,137 @@
/*
* Copyright (C) 2000, 2001 Loic Dachary
*
* 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.
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif /* HAVE_CONFIG_H */
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <getopt.h>
#include "unac.h"
static int usage(const char* message)
{
fprintf(stderr,
"%s"
"usage: unaccent [--debug_low] [--debug_high] [--help|-h]\n"
"\t\t<charset> [<string>] [<expected>]\n"
"\tVersion "UNAC_VERSION"\n"
"\tReads input from stdin and remove accents from each line,\n"
"\tassuming it is encoded in <charset> (iconv -l shows a list of\n"
"\tall available charsets).\n"
"\tIf <string> is provided, remove accents from <string>.\n"
"\tIf <expected> is provided, compare the result and exit on error\n"
"\tif not equal. \n"
"\tThe unaccented result is always output on stdout.\n",
message);
exit(1);
}
int main(int argc, char** argv) {
int c;
static int debug_level = UNAC_DEBUG_NONE;
while (1) {
int option_index = 0;
static struct option long_options[] = {
{"debug_low", no_argument, &debug_level, UNAC_DEBUG_LOW},
{"debug_high", no_argument, &debug_level, UNAC_DEBUG_HIGH},
{"help", no_argument, 0, 0},
{0, 0, 0, 0}
};
c = getopt_long (argc, argv, "h",
long_options, &option_index);
if (c == -1)
break;
switch (c) {
case 0:
break;
case '?':
break;
default:
usage("");
break;
}
}
#ifdef UNAC_DEBUG_AVAILABLE
unac_debug(debug_level);
#else /* UNAC_DEBUG_AVAILABLE */
if(debug_level > UNAC_DEBUG_NONE)
fprintf(stderr, "debug is not available, means vsnprintf was not found by configure\n");
#endif /* UNAC_DEBUG_AVAILABLE */
if(optind >= argc)
usage("missing <charset>\n");
else {
const char* charset = argv[optind++];
char* unaccented = 0;
int unaccented_length = 0;
if(optind >= argc) {
#define BUFFER_SIZE 10240
char buffer[BUFFER_SIZE];
while(fgets(buffer, BUFFER_SIZE, stdin)) {
if(unac_string(charset, buffer, strlen(buffer), &unaccented, &unaccented_length) < 0) {
fprintf(stderr, "unac_string attempt to unaccent %s with charset %s failed: ", buffer, charset);
perror("");
exit(1);
}
printf("%.*s", unaccented_length, unaccented);
}
} else {
const char* string = argv[optind++];
if(unac_string(charset, string, strlen(string), &unaccented, &unaccented_length) < 0) {
fprintf(stderr, "unac_string attempt to unaccent %s with charset %s failed: ", string, charset);
perror("");
exit(1);
}
if(debug_level > UNAC_DEBUG_NONE)
fprintf(stderr, "unaccented version is");
printf("%.*s\n", unaccented_length, unaccented);
if(optind < argc) {
const char* expected = argv[optind++];
if(unaccented_length != strlen(expected) ||
!memcpy(unaccented, expected, unaccented_length)) {
if(debug_level > UNAC_DEBUG_NONE)
fprintf(stderr, "attempt to unaccent %s with charset %s does not match expected string %s\n", string, charset, expected);
free(unaccented);
return 1;
}
}
}
free(unaccented);
}
return 0;
}

53
unac/unactest.c Normal file
View File

@ -0,0 +1,53 @@
/*
* Copyright (C) 2000, 2001, 2002 Loic Dachary <loic@senga.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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/*
* Generate a machine readable file mapping each UTF-16 character to
* its unaccented equivalent using the libunac library. The output may
* then be compared with the output of builder -reference. Both must be
* equal (ignoring space differences).
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "unac.h"
int main() {
unsigned int c;
unsigned short* p;
int l;
(void)unac_version();
for(c = 0; c <= 0xFFFF; c++) {
unac_char_utf16(c, p, l);
printf("%04X", c);
if(l == 0) {
printf("\n");
} else {
int i;
printf(" => ");
for(i = 0; i < l; i++) {
printf("%04X ", p[i]);
}
printf("\n");
}
}
return 0;
}

497
unac/unactest1.c Normal file
View File

@ -0,0 +1,497 @@
/*
* Copyright (C) 2000, 2001, 2002 Loic Dachary <loic@senga.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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/*
* Run unac_string on an input large enough to trigger re-allocation.
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "unac.h"
static char* longstr_expected = "
Senga - Catalog software
senga.org
December 28, 2000
January 27, 2000
Catalog-1.02
is available.
The dmoz loading process has been dramatically simplified. It is
now only available as a command. No more fancy web interface that
confuses everyone. In addition the convert_dmoz script now generates
text files that can be directly loaded into Catalog instead of the
intermediate XML file. The whole loading process now takes from
one to two hours depending on your machine. It took around 10 hours
with the previous version.
The -exclude option was added to convert_dmoz to get rid of
a whole branch of the catalog at load time. Typical usage would
be convert_dmoz -exclude '^/Adult' -what content content.rdf.gz.
A lot more sanity checks and repair have been added to deal with
duplicates, category id conflicts and the like.
Hopefully this new method will also be more understandable and
generate less traffic on the mailing list. There is room for
improvements and contributors are welcome.
A new set of software is available in the
download directory under the RedHat-6.1 section. These
are the most up to date versions on which Catalog depends. Although the
binaries depend on RedHat-6.1 the perl modules are source and can be
used on any platform.
September 7, 1999
Catalog-1.01
is available.
This is a maintainance release.
Various bug fixes. All easy
to fix bugs have been fixed. Take a look at Bug Track to see what hasn't been fixed.
The _PATHTEXT_ and _PATHFILE_
tags syntax has been extended to specify a range of path component.
Graham Barr added a recursive
template feature for a catalog root page. This allows to show sub-categories
of the root categories in the root page of a catalog.
Don't hesitate to submit bugs
or ideas to bug track. Hopefully the next version of Catalog will have
a fast full text indexing mechanism and I'll be able to implement new
functionalities.
Have fun !
July 3, 1999
Catalog-1.00
is available.
This release includes PHP3
code to display a catalog. The author is Weston Bustraan (weston@infinityteldata.net).
The main motivation to jump directly to version 1.00 is to avoid version
number problems on CPAN.
July 2, 1999
Catalog-0.19
is available.
This is a minor release. The
most noticeable addition is the new search mechanism.
Searching : two search modes
are now available. AltaVista simple syntax and AltaVista advanced syntax.
Both use the Text-Query and Text-Query-SQL perl modules.
Dmoz loading is much more
fault tolerant. In addition it can handle compressed versions of content.rdf
and structure.rdf. The comments are now stored in text fields instead
of char(255).
The template system was
extended with the pre_fill and post_fill parameters.
Searching associated to
a catalog dumped to static pages is now possible using the 'static'
mode.
Fixed two security weakness
in confedit and recursive cgi handling.
Many sql queries have been
optimized.
The configuration was changed
a bit to fix bugs and to isolate database dependencies.
The tests were updated to
isolate database dependencies.
Fixed numerous minor bugs,
check ChangeLog if you're interested in details.
Many thanks to Tim Bunce for
his numerous contributions and ideas. He is the architect of the Text-Query
and Text-Query-SQL modules, Eric Bohlman and Loic Dachary did the programming.
Thanks to Eric Bohlman for
his help on the Text-Query module. He was very busy but managed to spend
the time needed to release it.
There is not yet anything usable
for full text indexing but we keep working on it. The storage management
is now handled by the reiserfs file system thanks to Hans Reiser who is
working full time on this. Loic Dachary does his best to get something
working, if you're interested go to http://www.senga.org/mifluz/.
For some mysterious reason
CPAN lost track of Catalog name. In order to install catalog you should
use perl -MCPAN -e 'install Catalog::db'. Weird but temporary.
Have fun !
The Senga Team
Ecila
100 Av. du General Leclerc
93 500 Pantin
Tel: 33 1 56 96 09 80
Fax: 33 1 56 96 09 81
WEB: http://www.senga.org/
Mail: senga@senga.org
[
Catalog |
webbase |
mifluz |
unac |
Search-Mifluz |
Text-Query |
uri |
Statistics |
News
]
";
static char* longstr = "
Senga - Catalog software
 
senga.org
 
December 28, 2000
January 27, 2000
Catalog-1.02
is available.
The dmoz loading process has been dramatically simplified. It is
now only available as a command. No more fancy web interface that
confuses everyone. In addition the convert_dmoz script now generates
text files that can be directly loaded into Catalog instead of the
intermediate XML file. The whole loading process now takes from
one to two hours depending on your machine. It took around 10 hours
with the previous version.
The -exclude option was added to convert_dmoz to get rid of
a whole branch of the catalog at load time. Typical usage would
be convert_dmoz -exclude '^/Adult' -what content content.rdf.gz.
A lot more sanity checks and repair have been added to deal with
duplicates, category id conflicts and the like.
Hopefully this new method will also be more understandable and
generate less traffic on the mailing list. There is room for
improvements and contributors are welcome.
A new set of software is available in the
download directory under the RedHat-6.1 section. These
are the most up to date versions on which Catalog depends. Although the
binaries depend on RedHat-6.1 the perl modules are source and can be
used on any platform.
September 7, 1999
Catalog-1.01
is available.
This is a maintainance release.
Various bug fixes. All easy
to fix bugs have been fixed. Take a look at Bug Track to see what hasn't been fixed.
The _PATHTEXT_ and _PATHFILE_
tags syntax has been extended to specify a range of path component.
Graham Barr added a recursive
template feature for a catalog root page. This allows to show sub-categories
of the root categories in the root page of a catalog.
Don't hesitate to submit bugs
or ideas to bug track. Hopefully the next version of Catalog will have
a fast full text indexing mechanism and I'll be able to implement new
functionalities.
Have fun !
July 3, 1999
Catalog-1.00
is available.
This release includes PHP3
code to display a catalog. The author is Weston Bustraan (weston@infinityteldata.net).
The main motivation to jump directly to version 1.00 is to avoid version
number problems on CPAN.
July 2, 1999
Catalog-0.19
is available.
This is a minor release. The
most noticeable addition is the new search mechanism.
Searching : two search modes
are now available. AltaVista simple syntax and AltaVista advanced syntax.
Both use the Text-Query and Text-Query-SQL perl modules.
Dmoz loading is much more
fault tolerant. In addition it can handle compressed versions of content.rdf
and structure.rdf. The comments are now stored in text fields instead
of char(255).
The template system was
extended with the pre_fill and post_fill parameters.
Searching associated to
a catalog dumped to static pages is now possible using the 'static'
mode.
Fixed two security weakness
in confedit and recursive cgi handling.
Many sql queries have been
optimized.
The configuration was changed
a bit to fix bugs and to isolate database dependencies.
The tests were updated to
isolate database dependencies.
Fixed numerous minor bugs,
check ChangeLog if you're interested in details.
Many thanks to Tim Bunce for
his numerous contributions and ideas. He is the architect of the Text-Query
and Text-Query-SQL modules, Eric Bohlman and Loic Dachary did the programming.
Thanks to Eric Bohlman for
his help on the Text-Query module. He was very busy but managed to spend
the time needed to release it.
There is not yet anything usable
for full text indexing but we keep working on it. The storage management
is now handled by the reiserfs file system thanks to Hans Reiser who is
working full time on this. Loic Dachary does his best to get something
working, if you're interested go to http://www.senga.org/mifluz/.
For some mysterious reason
CPAN lost track of Catalog name. In order to install catalog you should
use perl -MCPAN -e 'install Catalog::db'. Weird but temporary.
Have fun !
The Senga Team
Ecila
100 Av. du Général Leclerc
93 500 Pantin
Tel: 33 1 56 96 09 80
Fax: 33 1 56 96 09 81
WEB: http://www.senga.org/
Mail: senga@senga.org
 
[
Catalog |
webbase |
mifluz |
unac |
Search-Mifluz |
Text-Query |
uri |
Statistics |
News
]
";
int main() {
int i;
char* out = 0;
size_t out_length = 0;
{
if(unac_string("ISO-8859-1", "été", 3, &out, &out_length) < 0) {
perror("unac été");
exit(1);
}
if(out_length != 3) {
fprintf(stderr, "out_length == %d instead of 3\n", (int)out_length);
exit(1);
}
if(memcmp("ete", out, out_length)) {
fprintf(stderr, "out == %.*s instead of ete\n", (int)out_length, out);
exit(1);
}
}
{
char tmp[10];
sprintf(tmp, "%c", 0xBC);
if(unac_string("ISO-8859-1", tmp, 1, &out, &out_length) < 0) {
perror("unac 0xBC (1/4)");
exit(1);
}
if(out_length != 3) {
fprintf(stderr, "out_length == %d instead of 3\n", (int)out_length);
exit(1);
}
if(memcmp("1 4", out, out_length)) {
fprintf(stderr, "out == %.*s instead of '1 4'\n", (int)out_length, out);
exit(1);
}
}
for(i = 0; i < 3; i++) {
int longstr_length = strlen(longstr);
if(unac_string("ISO-8859-1", longstr, longstr_length, &out, &out_length) == -1) {
perror("unac_string longstr failed");
exit(1);
}
if(out_length != longstr_length) {
fprintf(stderr, "out_length == %d instead of %d\n", (int)out_length, longstr_length);
exit(1);
}
if(memcmp(longstr_expected, out, out_length)) {
fprintf(stderr, "out == %.*s instead of ete\n", (int)out_length, out);
exit(1);
}
}
free(out);
return 0;
}