mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-08-12 12:15:14 +00:00
Compare commits
75
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9e42f7b625 | ||
|
|
f87fc33f87 | ||
|
|
7ba81a101f | ||
|
|
9190f3e726 | ||
|
|
330de47708 | ||
|
|
bb84601097 | ||
|
|
9a96ccfa20 | ||
|
|
6051d37287 | ||
|
|
2aec1bc1de | ||
|
|
c6e1f6235a | ||
|
|
ab6fbb02ad | ||
|
|
f2632e420f | ||
|
|
19f01e885f | ||
|
|
6792619fa8 | ||
|
|
645ff8cdee | ||
|
|
a726df0b44 | ||
|
|
ce209526ed | ||
|
|
b94bf14aac | ||
|
|
2a4426474d | ||
|
|
9022c575cc | ||
|
|
dae9263b7b | ||
|
|
cdd11a9322 | ||
|
|
da7ab9b7b0 | ||
|
|
0899b02570 | ||
|
|
0f23d6d25b | ||
|
|
47cef7a2ff | ||
|
|
7972022dac | ||
|
|
ea4f4c4c1b | ||
|
|
d97207ad77 | ||
|
|
3068221b53 | ||
|
|
6f0d1fd89d | ||
|
|
6526f6dbf7 | ||
|
|
817e461c23 | ||
|
|
c4e3dae3ac | ||
|
|
8cedc168fa | ||
|
|
3b14996787 | ||
|
|
041cad1677 | ||
|
|
31478b7ab7 | ||
|
|
e957bbb7d4 | ||
|
|
b5f513ef2c | ||
|
|
3afa674b1d | ||
|
|
ac481f3b08 | ||
|
|
010c94a243 | ||
|
|
d37a7c45b3 | ||
|
|
d63e24071f | ||
|
|
afd36419df | ||
|
|
6918b5fcc9 | ||
|
|
38e616f0f5 | ||
|
|
db433e9db8 | ||
|
|
870f12c270 | ||
|
|
e0a53a7f4a | ||
|
|
27c1ceb8da | ||
|
|
8f5d3a2dd5 | ||
|
|
adfd774c80 | ||
|
|
057194c61e | ||
|
|
a6f622cd50 | ||
|
|
2b8ce46775 | ||
|
|
19553c4e06 | ||
|
|
b1722803ec | ||
|
|
6f5e0eea04 | ||
|
|
e4ad4676be | ||
|
|
7b50efe542 | ||
|
|
cf90ca5d46 | ||
|
|
e373aad966 | ||
|
|
3e4c37cf7b | ||
|
|
dfaa776005 | ||
|
|
aecd294cb0 | ||
|
|
52eddd8c33 | ||
|
|
60403d1bc1 | ||
|
|
dd9f12de60 | ||
|
|
6085f203e1 | ||
|
|
7a360eeaed | ||
|
|
af550e2927 | ||
|
|
78632bbcdc | ||
|
|
483c899a17 |
@@ -9,5 +9,4 @@ patches
|
||||
*.patch *.log log patches applied
|
||||
*.prj
|
||||
releases
|
||||
*.flc
|
||||
autom4te.cache
|
||||
|
||||
@@ -0,0 +1,319 @@
|
||||
Notes on the Free Translation Project
|
||||
*************************************
|
||||
|
||||
Free software is going international! The Free Translation Project
|
||||
is a way to get maintainers of free software, translators, and users all
|
||||
together, so that will gradually become able to speak many languages.
|
||||
A few packages already provide translations for their messages.
|
||||
|
||||
If you found this `ABOUT-NLS' file inside a distribution, you may
|
||||
assume that the distributed package does use GNU `gettext' internally,
|
||||
itself available at your nearest GNU archive site. But you do _not_
|
||||
need to install GNU `gettext' prior to configuring, installing or using
|
||||
this package with messages translated.
|
||||
|
||||
Installers will find here some useful hints. These notes also
|
||||
explain how users should proceed for getting the programs to use the
|
||||
available translations. They tell how people wanting to contribute and
|
||||
work at translations should contact the appropriate team.
|
||||
|
||||
When reporting bugs in the `intl/' directory or bugs which may be
|
||||
related to internationalization, you should tell about the version of
|
||||
`gettext' which is used. The information can be found in the
|
||||
`intl/VERSION' file, in internationalized packages.
|
||||
|
||||
Quick configuration advice
|
||||
==========================
|
||||
|
||||
If you want to exploit the full power of internationalization, you
|
||||
should configure it using
|
||||
|
||||
./configure --with-included-gettext
|
||||
|
||||
to force usage of internationalizing routines provided within this
|
||||
package, despite the existence of internationalizing capabilities in the
|
||||
operating system where this package is being installed. So far, only
|
||||
the `gettext' implementation in the GNU C library version 2 provides as
|
||||
many features (such as locale alias, message inheritance, automatic
|
||||
charset conversion or plural form handling) as the implementation here.
|
||||
It is also not possible to offer this additional functionality on top
|
||||
of a `catgets' implementation. Future versions of GNU `gettext' will
|
||||
very likely convey even more functionality. So it might be a good idea
|
||||
to change to GNU `gettext' as soon as possible.
|
||||
|
||||
So you need _not_ provide this option if you are using GNU libc 2 or
|
||||
you have installed a recent copy of the GNU gettext package with the
|
||||
included `libintl'.
|
||||
|
||||
INSTALL Matters
|
||||
===============
|
||||
|
||||
Some packages are "localizable" when properly installed; the
|
||||
programs they contain can be made to speak your own native language.
|
||||
Most such packages use GNU `gettext'. Other packages have their own
|
||||
ways to internationalization, predating GNU `gettext'.
|
||||
|
||||
By default, this package will be installed to allow translation of
|
||||
messages. It will automatically detect whether the system already
|
||||
provides the GNU `gettext' functions. If not, the GNU `gettext' own
|
||||
library will be used. This library is wholly contained within this
|
||||
package, usually in the `intl/' subdirectory, so prior installation of
|
||||
the GNU `gettext' package is _not_ required. Installers may use
|
||||
special options at configuration time for changing the default
|
||||
behaviour. The commands:
|
||||
|
||||
./configure --with-included-gettext
|
||||
./configure --disable-nls
|
||||
|
||||
will respectively bypass any pre-existing `gettext' to use the
|
||||
internationalizing routines provided within this package, or else,
|
||||
_totally_ disable translation of messages.
|
||||
|
||||
When you already have GNU `gettext' installed on your system and run
|
||||
configure without an option for your new package, `configure' will
|
||||
probably detect the previously built and installed `libintl.a' file and
|
||||
will decide to use this. This might be not what is desirable. You
|
||||
should use the more recent version of the GNU `gettext' library. I.e.
|
||||
if the file `intl/VERSION' shows that the library which comes with this
|
||||
package is more recent, you should use
|
||||
|
||||
./configure --with-included-gettext
|
||||
|
||||
to prevent auto-detection.
|
||||
|
||||
The configuration process will not test for the `catgets' function
|
||||
and therefore it will not be used. The reason is that even an
|
||||
emulation of `gettext' on top of `catgets' could not provide all the
|
||||
extensions of the GNU `gettext' library.
|
||||
|
||||
Internationalized packages have usually many `po/LL.po' files, where
|
||||
LL gives an ISO 639 two-letter code identifying the language. Unless
|
||||
translations have been forbidden at `configure' time by using the
|
||||
`--disable-nls' switch, all available translations are installed
|
||||
together with the package. However, the environment variable `LINGUAS'
|
||||
may be set, prior to configuration, to limit the installed set.
|
||||
`LINGUAS' should then contain a space separated list of two-letter
|
||||
codes, stating which languages are allowed.
|
||||
|
||||
Using This Package
|
||||
==================
|
||||
|
||||
As a user, if your language has been installed for this package, you
|
||||
only have to set the `LANG' environment variable to the appropriate
|
||||
`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code,
|
||||
and `CC' is an ISO 3166 two-letter country code. For example, let's
|
||||
suppose that you speak German and live in Germany. At the shell
|
||||
prompt, merely execute `setenv LANG de_DE' (in `csh'),
|
||||
`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
|
||||
This can be done from your `.login' or `.profile' file, once and for
|
||||
all.
|
||||
|
||||
You might think that the country code specification is redundant.
|
||||
But in fact, some languages have dialects in different countries. For
|
||||
example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The
|
||||
country code serves to distinguish the dialects.
|
||||
|
||||
Not all programs have translations for all languages. By default, an
|
||||
English message is shown in place of a nonexistent translation. If you
|
||||
understand other languages, you can set up a priority list of languages.
|
||||
This is done through a different environment variable, called
|
||||
`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG'
|
||||
for the purpose of message handling, but you still need to have `LANG'
|
||||
set to the primary language; this is required by other parts of the
|
||||
system libraries. For example, some Swedish users who would rather
|
||||
read translations in German than English for when Swedish is not
|
||||
available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
|
||||
|
||||
In the `LANGUAGE' environment variable, but not in the `LANG'
|
||||
environment variable, `LL_CC' combinations can be abbreviated as `LL'
|
||||
to denote the language's main dialect. For example, `de' is equivalent
|
||||
to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
|
||||
(Portuguese as spoken in Portugal) in this context.
|
||||
|
||||
Translating Teams
|
||||
=================
|
||||
|
||||
For the Free Translation Project to be a success, we need interested
|
||||
people who like their own language and write it well, and who are also
|
||||
able to synergize with other translators speaking the same language.
|
||||
Each translation team has its own mailing list. The up-to-date list of
|
||||
teams can be found at the Free Translation Project's homepage,
|
||||
`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
|
||||
area.
|
||||
|
||||
If you'd like to volunteer to _work_ at translating messages, you
|
||||
should become a member of the translating team for your own language.
|
||||
The subscribing address is _not_ the same as the list itself, it has
|
||||
`-request' appended. For example, speakers of Swedish can send a
|
||||
message to `[email protected]', having this message body:
|
||||
|
||||
subscribe
|
||||
|
||||
Keep in mind that team members are expected to participate
|
||||
_actively_ in translations, or at solving translational difficulties,
|
||||
rather than merely lurking around. If your team does not exist yet and
|
||||
you want to start one, or if you are unsure about what to do or how to
|
||||
get started, please write to `[email protected]' to reach the
|
||||
coordinator for all translator teams.
|
||||
|
||||
The English team is special. It works at improving and uniformizing
|
||||
the terminology in use. Proven linguistic skill are praised more than
|
||||
programming skill, here.
|
||||
|
||||
Available Packages
|
||||
==================
|
||||
|
||||
Languages are not equally supported in all packages. The following
|
||||
matrix shows the current state of internationalization, as of July
|
||||
2001. The matrix shows, in regard of each package, for which languages
|
||||
PO files have been submitted to translation coordination, with a
|
||||
translation percentage of at least 50%.
|
||||
|
||||
Ready PO files bg cs da de el en eo es et fi fr gl he hr id it
|
||||
+-------------------------------------------------+
|
||||
a2ps | [] [] |
|
||||
bash | [] [] [] [] |
|
||||
bfd | |
|
||||
binutils | |
|
||||
bison | [] [] [] [] |
|
||||
clisp | [] [] [] [] |
|
||||
cpio | [] [] [] [] [] |
|
||||
diffutils | [] [] [] [] [] [] [] |
|
||||
enscript | [] [] |
|
||||
error | [] [] |
|
||||
fetchmail | |
|
||||
fileutils | [] [] [] [] [] [] [] |
|
||||
findutils | [] [] [] [] [] [] [] [] |
|
||||
flex | [] [] [] |
|
||||
freetype | |
|
||||
gas | |
|
||||
gawk | [] |
|
||||
gcal | |
|
||||
gcc | |
|
||||
gettext | [] [] [] [] [] [] [] [] [] |
|
||||
gnupg | [] [] [] [] [] [] |
|
||||
gprof | |
|
||||
grep | [] [] [] [] [] [] [] |
|
||||
hello | [] [] [] [] [] [] [] [] [] [] |
|
||||
id-utils | [] [] [] |
|
||||
indent | [] [] [] [] [] |
|
||||
jpilot | [] |
|
||||
kbd | |
|
||||
ld | |
|
||||
libc | [] [] [] [] [] [] [] [] |
|
||||
lilypond | |
|
||||
lynx | [] [] [] |
|
||||
m4 | [] [] [] [] [] [] [] |
|
||||
make | [] [] [] [] [] |
|
||||
nano | [] [] |
|
||||
opcodes | |
|
||||
parted | [] [] |
|
||||
ptx | [] [] [] [] [] [] [] |
|
||||
python | |
|
||||
recode | [] [] [] [] [] [] [] [] [] |
|
||||
sed | [] [] [] [] [] [] [] [] [] [] |
|
||||
sh-utils | [] [] [] [] [] [] [] [] [] |
|
||||
sharutils | [] [] [] [] [] [] [] |
|
||||
soundtracker | [] |
|
||||
sp | |
|
||||
tar | [] [] [] [] [] [] [] [] |
|
||||
texinfo | [] [] [] [] [] |
|
||||
textutils | [] [] [] [] [] [] [] |
|
||||
util-linux | [] [] |
|
||||
wdiff | [] [] |
|
||||
wget | [] [] [] [] [] [] [] [] [] |
|
||||
+-------------------------------------------------+
|
||||
bg cs da de el en eo es et fi fr gl he hr id it
|
||||
0 13 23 30 11 1 8 21 13 1 29 22 3 0 8 10
|
||||
|
||||
ja ko lv nl no pl pt pt_BR ru sk sl sv tr uk zh
|
||||
+-------------------------------------------------+
|
||||
a2ps | [] [] [] | 5
|
||||
bash | | 4
|
||||
bfd | | 0
|
||||
binutils | | 0
|
||||
bison | [] [] [] | 7
|
||||
clisp | [] | 5
|
||||
cpio | [] [] [] [] [] | 10
|
||||
diffutils | [] [] [] | 10
|
||||
enscript | [] [] [] | 5
|
||||
error | [] | 3
|
||||
fetchmail | | 0
|
||||
fileutils | [] [] [] [] [] [] [] [] [] [] | 17
|
||||
findutils | [] [] [] [] [] [] [] [] | 16
|
||||
flex | [] [] [] | 6
|
||||
freetype | | 0
|
||||
gas | | 0
|
||||
gawk | [] | 2
|
||||
gcal | | 0
|
||||
gcc | | 0
|
||||
gettext | [] [] [] [] [] [] [] [] [] | 18
|
||||
gnupg | [] [] [] [] | 10
|
||||
gprof | | 0
|
||||
grep | [] [] [] | 10
|
||||
hello | [] [] [] [] [] [] [] [] [] [] [] | 21
|
||||
id-utils | [] [] [] | 6
|
||||
indent | [] [] [] [] [] [] [] | 12
|
||||
jpilot | | 1
|
||||
kbd | [] | 1
|
||||
ld | | 0
|
||||
libc | [] [] [] [] [] [] [] [] [] | 17
|
||||
lilypond | [] [] | 2
|
||||
lynx | [] [] [] [] [] | 8
|
||||
m4 | [] [] [] [] [] | 12
|
||||
make | [] [] [] [] [] [] [] | 12
|
||||
nano | [] | 3
|
||||
opcodes | | 0
|
||||
parted | [] [] [] | 5
|
||||
ptx | [] [] [] [] [] [] [] | 14
|
||||
python | | 0
|
||||
recode | [] [] [] [] | 13
|
||||
sed | [] [] [] [] [] [] [] [] | 18
|
||||
sh-utils | [] [] [] [] [] [] [] [] [] [] [] | 20
|
||||
sharutils | [] [] [] [] | 11
|
||||
soundtracker | | 1
|
||||
sp | | 0
|
||||
tar | [] [] [] [] [] [] [] [] [] | 17
|
||||
texinfo | [] [] | 7
|
||||
textutils | [] [] [] [] [] [] [] [] | 15
|
||||
util-linux | [] [] | 4
|
||||
wdiff | [] [] [] | 5
|
||||
wget | [] [] [] [] [] [] [] | 16
|
||||
+-------------------------------------------------+
|
||||
31 teams ja ko lv nl no pl pt pt_BR ru sk sl sv tr uk zh
|
||||
51 domains 17 9 1 23 6 17 1 13 26 9 11 20 19 2 2 369
|
||||
|
||||
Some counters in the preceding matrix are higher than the number of
|
||||
visible blocks let us expect. This is because a few extra PO files are
|
||||
used for implementing regional variants of languages, or language
|
||||
dialects.
|
||||
|
||||
For a PO file in the matrix above to be effective, the package to
|
||||
which it applies should also have been internationalized and
|
||||
distributed as such by its maintainer. There might be an observable
|
||||
lag between the mere existence a PO file and its wide availability in a
|
||||
distribution.
|
||||
|
||||
If July 2001 seems to be old, you may fetch a more recent copy of
|
||||
this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date
|
||||
matrix with full percentage details can be found at
|
||||
`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
|
||||
|
||||
Using `gettext' in new packages
|
||||
===============================
|
||||
|
||||
If you are writing a freely available program and want to
|
||||
internationalize it you are welcome to use GNU `gettext' in your
|
||||
package. Of course the GNU General Public License applies to your
|
||||
sources from then on if you include `gettext' directly in your
|
||||
distribution but since you are writing free software anyway this is no
|
||||
restriction.
|
||||
|
||||
Once the sources are changed appropriately and the setup can handle
|
||||
to use of `gettext' the only thing missing are the translations. The
|
||||
Free Translation Project is also available for packages which are not
|
||||
developed inside the GNU project. Therefore the information given above
|
||||
applies also for every other Free Software Project. Contact
|
||||
`[email protected]' to make the `.pot' files available to
|
||||
the translation teams.
|
||||
|
||||
@@ -1,92 +1,8 @@
|
||||
2001-10-04 Akim Demaille <[email protected]>
|
||||
|
||||
Merge in the branch 1.29.
|
||||
|
||||
* src/reader.c (packsymbols): Use a temporary obstack for
|
||||
`%%tokendef', since output_stack is already used elsewhere.
|
||||
|
||||
2001-10-02 Akim Demaille <[email protected]>
|
||||
|
||||
Bump 1.29d.
|
||||
|
||||
2001-10-02 Akim Demaille <[email protected]>
|
||||
|
||||
Version 1.29c.
|
||||
|
||||
2001-10-02 Akim Demaille <[email protected]>
|
||||
|
||||
* tests/regression.at (Invalid CPP headers): New.
|
||||
From Alexander Belopolsky.
|
||||
* src/files.c (compute_header_macro): Map non alnum chars to `_'.
|
||||
|
||||
2001-10-02 Akim Demaille <[email protected]>
|
||||
|
||||
* tests/regression.at (Invalid input): New.
|
||||
* src/lex.c (lex): Be sure to set `token_buffer' in any case.
|
||||
Reported by Shura.
|
||||
|
||||
2001-10-02 Akim Demaille <[email protected]>
|
||||
|
||||
* tests/calc.at: Now that --debug works, the tests must be adjusted.
|
||||
|
||||
2001-10-02 Akim Demaille <[email protected]>
|
||||
|
||||
* src/output.c (output_parser): Assert `skeleton'.
|
||||
* src/files.c (skeleton_find): Look harder for skeletons on DOSish
|
||||
systems.
|
||||
From Shura.
|
||||
|
||||
2001-10-01 Marc Autret <[email protected]>
|
||||
|
||||
* src/lex.h: Echo modifications.
|
||||
* src/lex.c (unlex): Parameter is now token_t.
|
||||
From Hans Aberg.
|
||||
|
||||
2001-10-01 Marc Autret <[email protected]>
|
||||
|
||||
* src/main.c: Include lex.h.
|
||||
From Hans Aberg.
|
||||
|
||||
2001-09-29 Akim Demaille <[email protected]>
|
||||
|
||||
* src/getargs.c (longopts): `--debug' is `-t', not `-d'.
|
||||
|
||||
2001-09-28 Akim Demaille <[email protected]>
|
||||
|
||||
* tests/testsuite.at: Update to newer Autotest.
|
||||
* tests/Makefile.am (EXTRA_DIST): bison is not to be shipped.
|
||||
|
||||
2001-09-27 Akim Demaille <[email protected]>
|
||||
|
||||
Position independent wrapper.
|
||||
|
||||
* tests/bison: Remove.
|
||||
* tests/bison.in: New.
|
||||
* configure.in: Adjust.
|
||||
|
||||
2001-09-27 Paul Eggert <[email protected]>
|
||||
|
||||
Port quotearg fixes from tar 1.13.24.
|
||||
|
||||
* lib/quotearg.c: BSD/OS 4.1 wchar.h requires FILE and struct
|
||||
tm to be declared.
|
||||
(HAVE_MBSINIT): Undef if !HAVE_MBRTOWC.
|
||||
(mbsinit): Define to 1 if !defined mbsinit && !HAVE_MBSINIT.
|
||||
|
||||
* m4/Makefile.am (EXTRA_DIST): Add mbrtowc.m4.
|
||||
* m4/mbrtowc.m4: New file.
|
||||
* m4/prereq.m4 (jm_PREREQ_QUOTEARG): Check for mbsinit and stddef.h.
|
||||
Use jm_FUNC_MBRTOWC instead of AC_CHECK_FUNCS(mbrtowc).
|
||||
|
||||
2001-09-27 Akim Demaille <[email protected]>
|
||||
|
||||
Bump to 1.29c.
|
||||
|
||||
2001-09-27 Akim Demaille <[email protected]>
|
||||
2001-09-27 Akim Demaille <[email protected]>
|
||||
|
||||
Version 1.29b.
|
||||
|
||||
2001-09-25 Akim Demaille <[email protected]>
|
||||
2001-09-25 Akim Demaille <[email protected]>
|
||||
|
||||
* src/system.h: Include `xalloc.h'.
|
||||
Remove it from the C files.
|
||||
@@ -96,7 +12,7 @@
|
||||
(lex_free): New.
|
||||
* src/main.c (main): Use it.
|
||||
|
||||
2001-09-24 Marc Autret <[email protected]>
|
||||
2001-09-24 Marc Autret <[email protected]>
|
||||
|
||||
* src/vcg.c (open_edge, close_edge, open_node, close_node): Change
|
||||
to output informations in fout (FILE*).
|
||||
@@ -110,12 +26,11 @@
|
||||
(open_files): Remove graph_obstack initialization.
|
||||
(output_files): Remove graph_obstack saving.
|
||||
|
||||
2001-09-24 Marc Autret <[email protected]>
|
||||
2001-09-24 Marc Autret <[email protected]>
|
||||
|
||||
* src/files.c (compute_output_file_names): Fix.
|
||||
|
||||
2001-09-24 Marc Autret <[email protected]>,
|
||||
Akim Demaille <[email protected]>
|
||||
2001-09-24 Marc Autret <[email protected]>, Akim Demaille <[email protected]>
|
||||
|
||||
* src/reader.c (reader): Remove call to free_symtab ().
|
||||
* src/main.c (main): Call it here.
|
||||
@@ -130,28 +45,28 @@
|
||||
(output_files): Adjust.
|
||||
* src/main.c (main): Adjust.
|
||||
|
||||
2001-09-23 Marc Autret <[email protected]>
|
||||
2001-09-23 Marc Autret <[email protected]>
|
||||
|
||||
* src/files.c (compute_header_macro): Computes header macro name
|
||||
from spec_defines_file when given.
|
||||
|
||||
2001-09-23 Marc Autret <[email protected]>
|
||||
2001-09-23 Marc Autret <[email protected]>
|
||||
|
||||
* src/files.c (output_files): Add default extensions.
|
||||
|
||||
2001-09-22 Akim Demaille <[email protected]>
|
||||
2001-09-22 Akim Demaille <[email protected]>
|
||||
|
||||
* src/conflicts.c (finalize_conflicts): Rename as...
|
||||
(free_conflicts): this.
|
||||
|
||||
2001-09-22 Akim Demaille <[email protected]>
|
||||
2001-09-22 Akim Demaille <[email protected]>
|
||||
|
||||
* src/gram.c (gram_free): Rename back as...
|
||||
(dummy): this.
|
||||
(output_token_translations): Free `token_translations'.
|
||||
* src/symtab.c (free_symtab): Free the tag field.
|
||||
|
||||
2001-09-22 Akim Demaille <[email protected]>
|
||||
2001-09-22 Akim Demaille <[email protected]>
|
||||
|
||||
Remove `translations' as it is always set to true.
|
||||
|
||||
@@ -164,14 +79,14 @@
|
||||
(dummy): Rename as...
|
||||
(gram_free): this.
|
||||
|
||||
2001-09-22 Akim Demaille <[email protected]>
|
||||
2001-09-22 Akim Demaille <[email protected]>
|
||||
|
||||
* configure.in: Invoke AM_LIB_DMALLOC.
|
||||
* src/system.h: Use dmalloc.
|
||||
* src/LR0.c: Be sure to have pointers initialized to NULL.
|
||||
(allocate_itemsets): Allocate kernel_items only if needed.
|
||||
|
||||
2001-09-22 Akim Demaille <[email protected]>
|
||||
2001-09-22 Akim Demaille <[email protected]>
|
||||
|
||||
* configure.in: Bump to 1.29b.
|
||||
* tests/Makefile.am (DISTCLEANFILES): Add package.m4.
|
||||
@@ -179,7 +94,7 @@
|
||||
need xmalloc.c in calc.y.
|
||||
From Pascal Bart.
|
||||
|
||||
2001-09-21 Akim Demaille <[email protected]>
|
||||
2001-09-21 Akim Demaille <[email protected]>
|
||||
|
||||
Version 1.29a.
|
||||
* Makefile.maint, config/config.guess, config/config.sub,
|
||||
@@ -188,12 +103,12 @@
|
||||
upon package.m4.
|
||||
* configure.in (ALL_LINGUAS): Add `tr'.
|
||||
|
||||
2001-09-21 Akim Demaille <[email protected]>
|
||||
2001-09-21 Akim Demaille <[email protected]>
|
||||
|
||||
* tests/Makefile.am (package.m4): Move to...
|
||||
($(srcdir)/$(TESTSUITE)): here.
|
||||
|
||||
2001-09-20 Akim Demaille <[email protected]>
|
||||
2001-09-20 Akim Demaille <[email protected]>
|
||||
|
||||
* src/complain.c: No longer try to be standalone: use system.h.
|
||||
Don't assume __STDC__ is defined to 1. Just test if it is defined.
|
||||
@@ -202,7 +117,7 @@
|
||||
Remove the unused variable `n'.
|
||||
From Albert Chin-A-Young.
|
||||
|
||||
2001-09-18 Marc Autret <[email protected]>
|
||||
2001-09-18 Marc Autret <[email protected]>
|
||||
|
||||
* doc/bison.1: Update.
|
||||
* doc/bison.texinfo (Bison Options): Update --defines and --graph
|
||||
@@ -210,32 +125,32 @@
|
||||
(Option Cross Key): Update.
|
||||
Add --graph.
|
||||
|
||||
2001-09-18 Marc Autret <[email protected]>
|
||||
2001-09-18 Marc Autret <[email protected]>
|
||||
|
||||
* tests/regression.at: New test (comment in %union).
|
||||
|
||||
2001-09-18 Marc Autret <[email protected]>
|
||||
2001-09-18 Marc Autret <[email protected]>
|
||||
|
||||
* src/reader.c (parse_union_decl): Do not output '/'. Let copy_comment
|
||||
do that.
|
||||
Reported by Keith Browne.
|
||||
|
||||
2001-09-18 Marc Autret <[email protected]>
|
||||
2001-09-18 Marc Autret <[email protected]>
|
||||
|
||||
* tests/output.at: Add tests for --defines and --graph.
|
||||
|
||||
2001-09-18 Marc Autret <[email protected]>
|
||||
2001-09-18 Marc Autret <[email protected]>
|
||||
|
||||
* tests/output.at: Removes tests of %{header,src}_extension features.
|
||||
|
||||
2001-09-18 Akim Demaille <[email protected]>
|
||||
2001-09-18 Akim Demaille <[email protected]>
|
||||
|
||||
* tests/Makefile.am (package.m4): New.
|
||||
* tests/calc.at (_AT_CHECK_CALC): Just run `calc input'.
|
||||
(_AT_CHECK_CALC_ERROR): Likewise.
|
||||
Factor the `, ' part of verbose error messages.
|
||||
|
||||
2001-09-18 Marc Autret <[email protected]>
|
||||
2001-09-18 Marc Autret <[email protected]>
|
||||
|
||||
* src/getargs.c (longopts): Declare --defines and --graph as options
|
||||
with optional arguments.
|
||||
@@ -244,7 +159,7 @@
|
||||
(output_files): Update.
|
||||
Remove CPP-outed code.
|
||||
|
||||
2001-09-18 Marc Autret <[email protected]>
|
||||
2001-09-18 Marc Autret <[email protected]>
|
||||
|
||||
Turn off %{source,header}_extension feature.
|
||||
|
||||
@@ -259,20 +174,19 @@
|
||||
* src/lex.c (percent_table): Remove {header,source}_extension entries.
|
||||
* src/lex.h (token_t): Remove tok_hdrext and tok_srcext.
|
||||
|
||||
2001-09-10 Akim Demaille <[email protected]>
|
||||
2001-09-10 Akim Demaille <[email protected]>
|
||||
|
||||
* tests/output.at (AT_CHECK_BISON_FLAGS, AT_CHECK_BISON_PERCENT):
|
||||
(AT_CHECK_BISON_PERCENT_FLAGS): Merge into...
|
||||
(AT_CHECK_OUTPUT): this.
|
||||
Merely check ls' exit status, its output is useless.
|
||||
|
||||
2001-09-10 Akim Demaille <[email protected]>
|
||||
2001-09-10 Akim Demaille <[email protected]>
|
||||
|
||||
* tests/calc.at: Use m4_match.
|
||||
(_AT_DATA_CALC_Y): Check `yyin != NULL', not `stdin != NULL'.
|
||||
|
||||
2001-09-10 Marc Autret <[email protected]>,
|
||||
Akim Demaille <[email protected]>
|
||||
2001-09-10 Marc Autret <[email protected]>, Akim Demaille <[email protected]>
|
||||
|
||||
* src/vcg.h (graph_s): color, textcolor, bordercolor are now
|
||||
enum color_e.
|
||||
@@ -288,15 +202,15 @@
|
||||
part.
|
||||
(unlexed): Is a token_t.
|
||||
|
||||
2001-09-10 Akim Demaille <[email protected]>
|
||||
2001-09-10 Akim Demaille <[email protected]>
|
||||
|
||||
* configure.in: Bump to 1.29a.
|
||||
|
||||
2001-09-07 Akim Demaille <[email protected]>
|
||||
2001-09-07 Akim Demaille <[email protected]>
|
||||
|
||||
Version 1.29.
|
||||
|
||||
2001-08-30 Akim Demaille <[email protected]>
|
||||
2001-08-30 Akim Demaille <[email protected]>
|
||||
|
||||
* tests/atgeneral.m4, tests/atconfig.in, tests/suite.at: Remove.
|
||||
* m4/atconfig.m4: Remove.
|
||||
@@ -307,61 +221,61 @@
|
||||
* tests/calc.at (_AT_CHECK_CALC, _AT_CHECK_CALC_ERROR): Use an
|
||||
`input' file instead of echo.
|
||||
|
||||
2001-08-29 Akim Demaille <[email protected]>
|
||||
2001-08-29 Akim Demaille <[email protected]>
|
||||
|
||||
Bump to 1.28e.
|
||||
|
||||
2001-08-29 Akim Demaille <[email protected]>
|
||||
2001-08-29 Akim Demaille <[email protected]>
|
||||
|
||||
Version 1.28d.
|
||||
|
||||
2001-08-29 Paul Eggert <[email protected]>
|
||||
2001-08-29 Paul Eggert <[email protected]>
|
||||
|
||||
* src/bison.simple (yyparse): Don't take the address of an
|
||||
item before the start of an array, as that doesn't conform to
|
||||
the C Standard.
|
||||
|
||||
2001-08-29 Robert Anisko <[email protected]>
|
||||
2001-08-29 Robert Anisko <[email protected]>
|
||||
|
||||
* doc/bison.texinfo (Location Tracking Calc): New node.
|
||||
|
||||
2001-08-29 Paul Eggert <[email protected]>
|
||||
2001-08-29 Paul Eggert <[email protected]>
|
||||
|
||||
* src/output.c (output): Do not define const, as this now
|
||||
causes more problems than it cures.
|
||||
|
||||
2001-08-29 Akim Demaille <[email protected]>
|
||||
2001-08-29 Akim Demaille <[email protected]>
|
||||
|
||||
* doc/bison.texinfo: Modernize `@node' and `@top' use: just name
|
||||
the nodes.
|
||||
Be sure to tag the `detailmenu'.
|
||||
|
||||
2001-08-29 Akim Demaille <[email protected]>
|
||||
2001-08-29 Akim Demaille <[email protected]>
|
||||
|
||||
* Makefile.maint (do-po-update): Wget refuses to overwrite files:
|
||||
download in a tmp dir.
|
||||
|
||||
2001-08-28 Marc Autret <[email protected]>
|
||||
2001-08-28 Marc Autret <[email protected]>
|
||||
|
||||
* config/depcomp: New file.
|
||||
|
||||
2001-08-28 Marc Autret <[email protected]>
|
||||
2001-08-28 Marc Autret <[email protected]>
|
||||
|
||||
* doc/bison.1 (mandoc): Adjust.
|
||||
From Juan Manuel Guerrero.
|
||||
|
||||
2001-08-28 Marc Autret <[email protected]>
|
||||
2001-08-28 Marc Autret <[email protected]>
|
||||
|
||||
* src/print_graph.c (print_state): Fix.
|
||||
|
||||
2001-08-27 Marc Autret <[email protected]>
|
||||
2001-08-27 Marc Autret <[email protected]>
|
||||
|
||||
* src/vcg.h (classname_s, infoname_s, node_s): Constify the
|
||||
char * members.
|
||||
Echo modifications to the functions prototypes.
|
||||
* src/vcg.c (add_classname, add_infoname): Adjust arguments.
|
||||
|
||||
2001-08-27 Marc Autret <[email protected]>
|
||||
2001-08-27 Marc Autret <[email protected]>
|
||||
|
||||
* src/vcg.c: Include `xalloc.h'.
|
||||
(add_colorentry): New.
|
||||
@@ -369,22 +283,22 @@
|
||||
(add_infoname): New.
|
||||
* src/vcg.h: Add new prototypes.
|
||||
|
||||
2001-08-27 Akim Demaille <[email protected]>
|
||||
2001-08-27 Akim Demaille <[email protected]>
|
||||
|
||||
* Makefile.maint: Sync. again with CVS Autoconf.
|
||||
|
||||
2001-08-27 Akim Demaille <[email protected]>
|
||||
2001-08-27 Akim Demaille <[email protected]>
|
||||
|
||||
* Makefile.maint: Formatting changes.
|
||||
(po-update, cvs-update, update): New targets.
|
||||
(AMTAR): Remove.
|
||||
|
||||
2001-08-27 Akim Demaille <[email protected]>
|
||||
2001-08-27 Akim Demaille <[email protected]>
|
||||
|
||||
* Makefile.am (AUTOMAKE_OPTIONS): 1.5.
|
||||
* Makefile.maint: Sync. with CVS Autoconf.
|
||||
|
||||
2001-08-27 Marc Autret <[email protected]>
|
||||
2001-08-27 Marc Autret <[email protected]>
|
||||
|
||||
* src/vcg.h (struct infoname_s): New.
|
||||
(struct colorentry_s): New.
|
||||
@@ -399,35 +313,35 @@
|
||||
Add output of `infoname'.
|
||||
Add output of `colorentry'.
|
||||
|
||||
2001-08-27 Marc Autret <[email protected]>
|
||||
2001-08-27 Marc Autret <[email protected]>
|
||||
|
||||
* src/reader.c (parse_dquoted_param): Rename variable `index' to `i'.
|
||||
This one shadowed a global parameter.
|
||||
|
||||
2001-08-24 Marc Autret <[email protected]>
|
||||
2001-08-24 Marc Autret <[email protected]>
|
||||
|
||||
* src/print_graph.c (node_output_size): Declared POSIX `size_t' type,
|
||||
instead of `unsigned'.
|
||||
(print_state): Do not call obstack_object_size () in obstack_grow ()
|
||||
to avoid macro variables shadowing.
|
||||
|
||||
2001-08-23 Marc Autret <[email protected]>
|
||||
2001-08-23 Marc Autret <[email protected]>
|
||||
|
||||
* src/lex.c (percent_table): Typo: s/naem/name/.
|
||||
Add graph option.
|
||||
Normalize new options declarations.
|
||||
|
||||
2001-08-20 Pascal Bart <[email protected]>
|
||||
2001-08-20 Pascal Bart <[email protected]>
|
||||
|
||||
* tests/suite.at: Exercise %header_extension and %source_extension.
|
||||
|
||||
2001-08-16 Marc Autret <[email protected]>
|
||||
2001-08-16 Marc Autret <[email protected]>
|
||||
|
||||
* src/reader.c (parse_dquoted_param): New.
|
||||
(parse_header_extension_decl): Use it.
|
||||
(parse_source_extension_decl): Likewise.
|
||||
|
||||
2001-08-16 Marc Autret <[email protected]>
|
||||
2001-08-16 Marc Autret <[email protected]>
|
||||
|
||||
* src/vcg.c: Remove includes of `complain.h' and `xalloc.h'.
|
||||
(get_xxxx_str): Use assert () instead of complain ().
|
||||
@@ -436,378 +350,16 @@
|
||||
Echo modifications on calls.
|
||||
(output_graph): Fix.
|
||||
|
||||
2001-08-16 Marc Autret <[email protected]>
|
||||
2001-08-16 Marc Autret <[email protected]>
|
||||
|
||||
* src/getargs.c (usage): Update with ``-g, --graph''.
|
||||
|
||||
2001-08-16 Marc Autret <[email protected]>
|
||||
2001-08-16 Marc Autret <[email protected]>
|
||||
|
||||
* doc/bison.texinfo (Bison Options): Add items `-g', `--graph'.
|
||||
(Option Cross Key): Likewise.
|
||||
* doc/bison.1: Update.
|
||||
|
||||
2001-09-25 Pascal Bart <[email protected]>
|
||||
|
||||
* src/output.c (output_master_parser): Don't finish action_obstack.
|
||||
(output_parser): Don't care about the muscle action, here.
|
||||
(prepare): Copy the action_obstack in the action muscle.
|
||||
(output): Free action_obstack.
|
||||
|
||||
2001-09-23 Pascal Bart <[email protected]>
|
||||
|
||||
* src/reader.c (parse_union_decl): Add new obstack union_obstack. Which
|
||||
will contain `%union' declaration.
|
||||
(parse_union_decl): Delete #line directive output.
|
||||
(parse_union_decl): Substitute /attrs_obstack/union_obstack for all
|
||||
informations about %union.
|
||||
(parse_union_decl): Copy the union_obstack in the muscle stype.
|
||||
* src/bison.simple: Add new #line directive.
|
||||
Add typdef %%stype YYSTYPE.
|
||||
|
||||
2001-09-23 Pascal Bart <[email protected]>
|
||||
|
||||
* src/bison.simple: Add new `#line' directive.
|
||||
|
||||
2001-09-22 Pascal Bart <[email protected]>
|
||||
|
||||
* src/bison.simple: New `#line' directive.
|
||||
* src/output.c (output_parser): Support new dynamic muscle input_line.
|
||||
|
||||
2001-09-22 Marc Autret <[email protected]>
|
||||
|
||||
* src/output.c (output_master_parser): New.
|
||||
(output_parser): Be more re-entrant.
|
||||
|
||||
2001-09-21 Marc Autret <[email protected]>
|
||||
|
||||
* src/reader.c (copy_definition, parse_union_decl): Update and use
|
||||
`linef' muscle.
|
||||
(copy_action): Likewise.
|
||||
Use obstack_1grow ().
|
||||
* src/muscle_tab.c (muscle_init): Add muscle `linef'.
|
||||
|
||||
2001-09-21 Marc Autret <[email protected]>
|
||||
|
||||
* src/options.c (option_table): Adjust.
|
||||
* src/lex.c (parse_percent_token): Fix.
|
||||
|
||||
2001-09-20 Pascal Bart <[email protected]>
|
||||
|
||||
* src/options.c (symtab.h): Include it, need by lex.h.
|
||||
|
||||
2001-09-20 Pascal Bart <[email protected]>
|
||||
|
||||
* src/lex.c (parse_percent_token): Change type of variable `tx', which
|
||||
is now an option_table_struct*.
|
||||
(option_strcmp): New function option_strcmp.
|
||||
(parse_percent_token): Call option_strcmp.
|
||||
* src/getargs.c (xalloc.h, options.h): Include it.
|
||||
(getargs): Call create_long_option_table.
|
||||
(getargs): Free longopts at the end of the function.
|
||||
(shortopts): Move in options.c.
|
||||
* src/options.c (create_long_option_table): New function. Convert
|
||||
information from option_table to option structure.
|
||||
* src/reader.c (options.h): Include it.
|
||||
|
||||
* src/Makefile.am: Adjust.
|
||||
* src/options.c (option_table): Create from longopts and percent_table.
|
||||
* src/getargs.c (longopts): Delete.
|
||||
* src/lex.c (struct percent_table_struct): Delete.
|
||||
(percent_table): Delete.
|
||||
(options.h): Include it.
|
||||
* src/options.c: Create.
|
||||
* src/options.h: Create.
|
||||
Declare enum opt_access_e.
|
||||
Define struct option_table_struct.
|
||||
|
||||
2001-09-20 Marc Autret <[email protected]>
|
||||
|
||||
* doc/bison.texinfo: Adjust terminologies about prologue and epilogue
|
||||
sections of Bison.
|
||||
|
||||
2001-09-19 Pascal Bart <[email protected]>
|
||||
|
||||
* src/bison.simple: s/%%filename/%%skeleton.
|
||||
* src/muscle_tab.c (getargs.h): Include it.
|
||||
(muscle_init): Insert new muscle skeleton.
|
||||
|
||||
2001-09-18 Pascal Bart <[email protected]>
|
||||
|
||||
* src/output.c (output_parser): Delete unused variable actions_dumped.
|
||||
|
||||
2001-09-07 Pascal Bart <[email protected]>
|
||||
|
||||
* src/output.c (output): Delete call to reader_output_yylsp.
|
||||
* src/reader.c (reader): Likewise.
|
||||
* src/reader.h: Delete declaration of reader_output_yylsp.
|
||||
|
||||
2001-09-02 Marc Autret <[email protected]>
|
||||
|
||||
* src/reader.c: Include muscle_tab.h.
|
||||
(parse_union_decl): Update.
|
||||
(parse_macro_decl): Rename parse_muscle_decl.
|
||||
Update to use renamed functions and variable.
|
||||
(read_declarations, copy_action, read_additionnal_code, : Updated
|
||||
with correct variables and functions names.
|
||||
(packsymbols, reader): Likewise.
|
||||
|
||||
* src/reader.h (muscle_obstack): Extern declaration update.
|
||||
|
||||
* src/output.c: Include muscle_tab.h
|
||||
In all functions using macro_insert, change by using muscle_insert ().
|
||||
(macro_obstack): Rename muscle_obstack.
|
||||
Echo modifications in the whole file.
|
||||
(MACRO_INSERT_INT): Rename MUSCLE_INSERT_INT.
|
||||
(MACRO_INSERT_STRING): Rename MUSCLE_INSERT_STRING.
|
||||
(MACRO_INSERT_PREFIX): Rename MUSCLE_INSERT_PREFIX.
|
||||
|
||||
* src/muscle_tab.h: Update double inclusion macros.
|
||||
(macro_entry_s): Rename muscle_entry_s.
|
||||
Update prototypes.
|
||||
|
||||
* src/muscle_tab.c: Include muscle_tab.h.
|
||||
Rename macro_tabble to muscle_table.
|
||||
(mhash1, mhash2, mcmp): Use muscle_entry.
|
||||
(macro_init): Rename muscle_init. Update.
|
||||
(macro_insert): Rename muscle_insert. Update.
|
||||
(macro_find): Rename muscle_find. Update.
|
||||
|
||||
* src/main.c: Include muscle_tab.h.
|
||||
(main): Call muscle_init ().
|
||||
* src/Makefile.am (bison_SOURCES): Echo modifications.
|
||||
|
||||
2001-09-02 Marc Autret <[email protected]>
|
||||
|
||||
Now the files macro_tab.[ch] are named muscle_tab.[ch].
|
||||
|
||||
* src/muscle_tab.c, src/muscle_tab.h: Add files.
|
||||
|
||||
2001-09-02 Marc Autret <[email protected]>
|
||||
|
||||
* src/macrotab.c, src/macrotab.h: Remove.
|
||||
|
||||
2001-09-01 Pascal Bart <[email protected]>
|
||||
|
||||
* src/reader.c (copy_guard): Use muscle to specify the `#line'
|
||||
filename.
|
||||
|
||||
2001-09-01 Marc Autret <[email protected]>
|
||||
|
||||
* tests/calc.at (exp): Now, YYERROR_VERBOSE need to be set
|
||||
to an explicit value to activate the feature. We do it here.
|
||||
|
||||
2001-08-31 Pascal Bart <[email protected]>
|
||||
|
||||
* src/output.c (prepare): Delete the `filename' muscule insertion.
|
||||
* src/reader.c (copy_action): Use `filename' muscule with `#line'.
|
||||
(parse_union_decl): Likewise.
|
||||
* src/macrotab.c (macro_init): Initialize filename by infile.
|
||||
|
||||
2001-08-31 Marc Autret <[email protected]>
|
||||
|
||||
* src/bison.simple (YYLSP_NEEDED): New definition.
|
||||
* src/output.c (prepare): Add macro insertion of `locations_flag'
|
||||
|
||||
2001-08-31 Pascal Bart <[email protected]>
|
||||
|
||||
* src/output.c (prepare): Delete insertion of previous muscles,
|
||||
and insert the `prefix' muscles.
|
||||
* src/macrotab.c (macro_init): Likewise.
|
||||
(macro_init): Initialization prefix directive by `yy'.
|
||||
* src/bison.simple: Substitute all %%yylex, %%yychar, %%yylval,
|
||||
%%yydebug, %%yyerror, %%yynerrs and %%yyparse by yylex, yychar,
|
||||
yylval, yydebug, yyerror, yynerrs and yyparse.
|
||||
New directive `#define' to substitute yydebug, ... with option
|
||||
name_prefix.
|
||||
|
||||
2001-08-31 Pascal Bart <[email protected]>
|
||||
|
||||
* src/main.c (main): Standardize.
|
||||
* src/output.c (output_table_data, output_parser): Likewise.
|
||||
* src/macrotab.h, src/macrotab.c, src/bison.simple: Likewise.
|
||||
|
||||
2001-08-31 Pascal Bart <[email protected]>, Marc Autret <[email protected]>
|
||||
|
||||
* src/reader.c (read_additionnal_code): Rename %%user_code to
|
||||
%%epilogue.
|
||||
* src/output.c (output): Rename %%declarations to %%prologue.
|
||||
* src/bison.simple: Echo modifications.
|
||||
|
||||
2001-08-31 Marc Autret <[email protected]>
|
||||
|
||||
* src/reader.c (readgram): CleanUp.
|
||||
(output_token_defines): Likewise.
|
||||
(packsymbols): Likewise.
|
||||
(reader): Likewise.
|
||||
* src/output.c (output): CPP-out useless code.
|
||||
|
||||
2001-08-31 Pascal Bart <[email protected]>
|
||||
|
||||
* src/reader.c (reader): Delete obsolete call to function
|
||||
output_trailers and output_headers.
|
||||
* src/output.h: Remove obsolete functions prototypes of output_headers
|
||||
and output_trailers.
|
||||
|
||||
2001-08-30 Pascal Bart <[email protected]>
|
||||
|
||||
* src/main.c: Include macrotab.h.
|
||||
* src/macrotab.h (macro_entry_s): Constify fields.
|
||||
Adjust functions prototypes.
|
||||
* src/macrotab.c (macro_insert): Constify key and value.
|
||||
(macro_find): Constify key.
|
||||
(macro_insert): Include 'xalloc.h'
|
||||
(macro_insert): Use XMALLOC.
|
||||
(macro_find): Constify return value.
|
||||
* src/output.c (output_table_data): Rename table to table_data.
|
||||
(output_parser): Constify macro_key, macro_value.
|
||||
|
||||
2001-08-30 Marc Autret <[email protected]>
|
||||
|
||||
* src/reader.c (parse_skel_decl): New.
|
||||
(read_declarations): Add case `tok_skel', call parse_skel_decl ().
|
||||
* src/lex.h (token_t): New token `tok_skel'.
|
||||
* src/lex.c (percent_table): Add skeleton option entry.
|
||||
Standardize.
|
||||
|
||||
2001-08-29 Marc Autret <[email protected]>
|
||||
|
||||
* src/bison.simple: Add %%user_code directive at the end.
|
||||
* src/reader.c (read_additionnal_code): New.
|
||||
(reader): Use it.
|
||||
* src/output.c (output_program): Remove.
|
||||
(output): Update.
|
||||
|
||||
2001-08-28 Marc Autret <[email protected]>
|
||||
|
||||
* src/output.c (output_actions): Clean up.
|
||||
(output_gram): CPP-out useless code.
|
||||
* src/reader.c (reader): Clean up, CPP-out useless code.
|
||||
|
||||
2001-08-28 Pascal Bart <[email protected]>
|
||||
|
||||
* src/output.c (output): Copy attrs_obstack in the '%%definitions'
|
||||
directive.
|
||||
* src/bison.simple: Add `%%definitions'.
|
||||
|
||||
2001-08-28 Marc Autret <[email protected]>
|
||||
|
||||
* config/depcomp: New file.
|
||||
|
||||
2001-08-27 Paul Eggert <[email protected]>
|
||||
|
||||
* src/bison.simple (yyparse): Don't take the address of an
|
||||
item before the start of an array, as that doesn't conform to
|
||||
the C Standard.
|
||||
|
||||
2001-08-27 Robert Anisko <[email protected]>
|
||||
|
||||
* src/output.c (output): Remove the initialization of the macro
|
||||
obstack. It was done too late here.
|
||||
|
||||
* src/reader.c (parse_macro_decl): Fix. Use of the macro obstack was
|
||||
completely wrong.
|
||||
(reader): Initialize the macro obstack here, since we need it to grow
|
||||
'%define' directives.
|
||||
|
||||
* src/reader.h: Declare the macro obstack as extern.
|
||||
|
||||
2001-08-27 Robert Anisko <[email protected]>
|
||||
|
||||
* src/output.c (output_parser): Fix. Store single '%' characters in
|
||||
the output obstack instead of throwing them away.
|
||||
|
||||
2001-08-27 Akim Demaille <[email protected]>
|
||||
|
||||
* Makefile.am (AUTOMAKE_OPTIONS): 1.5.
|
||||
|
||||
2001-08-25 Robert Anisko <[email protected]>
|
||||
|
||||
* lib/Makefile.am: Adjust.
|
||||
|
||||
2001-08-25 Robert Anisko <[email protected]>
|
||||
|
||||
* src/bison.simple: Update and add '%%' directives.
|
||||
|
||||
2001-08-25 Robert Anisko <[email protected]>
|
||||
|
||||
* src/reader.c (reader): Remove calls to 'output_headers' and
|
||||
'output_trailers'. Remove some C output.
|
||||
(readgram): Disable a piece of code that was writing a default
|
||||
definition for 'YYSTYPE'.
|
||||
(reader_output_yylsp): Remove.
|
||||
(packsymbols): Output token defintions to a macro.
|
||||
(copy_definition): Disable C output.
|
||||
|
||||
* src/reader.c (parse_macro_decl): New function used to parse macro
|
||||
declarations.
|
||||
(copy_string2): Put the body of copy_string into this new function.
|
||||
Add a parameter to let the caller choose whether he wants to copy the
|
||||
string delimiters or not.
|
||||
(copy_string): Be a simple call to copy_string2 with the last argument
|
||||
bound to true.
|
||||
(read_declarations): Add case for macro definition.
|
||||
(copy_identifier): New.
|
||||
(parse_macro_decl): Read macro identifiers using copy_identifier
|
||||
rather than lex.
|
||||
|
||||
2001-08-25 Robert Anisko <[email protected]>
|
||||
|
||||
* src/output.c (prepare): Add prefixed names.
|
||||
(output_parser): Output semantic actions.
|
||||
(output_parser): Fix bug on '%%line' directives.
|
||||
|
||||
* src/output.c (output_headers): Remove. The C code printed by this
|
||||
function should now be in the skeletons.
|
||||
(output_trailers): Remove.
|
||||
(output): Disable call to 'reader_output_yylsp'.
|
||||
(output_rule_data): Do not output tables to the table obstack.
|
||||
|
||||
* src/output.c: Remove some C dedicated output.
|
||||
Improve the use of macro and output obstacks.
|
||||
(output_defines): Remove.
|
||||
|
||||
* src/output.c (output_token_translations): Associate 'translate'
|
||||
table with a macro. No output to the table obstack.
|
||||
(output_gram): Same for 'rhs' and 'prhs'.
|
||||
(output_stos): Same for 'stos'.
|
||||
(output_rule_data): Same for 'r1' and 'r2'.
|
||||
(token_actions): Same for 'defact'.
|
||||
(goto_actions): Same for 'defgoto'.
|
||||
(output_base): Same for 'pact' and 'pgoto'.
|
||||
(output_table): Same for 'table'.
|
||||
(output_check): Same for 'check'.
|
||||
|
||||
* src/output.c (output_table_data): New function.
|
||||
(output_short_table): Remove.
|
||||
(output_short_or_char_table): Remove.
|
||||
|
||||
* src/output.c (output_parser): Replace most of the skeleton copy code
|
||||
with something new. Skeletons are now processed character by character
|
||||
rather than line by line, and Bison looks for '%%' macros. This is the
|
||||
first step in making Bison's output process (a lot) more flexible.
|
||||
(output_parser): Use the macro table.
|
||||
|
||||
2001-08-25 Robert Anisko <[email protected]>
|
||||
|
||||
* src/main.c (main): Initialize the macro table.
|
||||
|
||||
2001-08-25 Robert Anisko <[email protected]>
|
||||
|
||||
* src/lex.c (percent_table): Add tok_define.
|
||||
* src/lex.h: Add tok_define.
|
||||
|
||||
2001-08-25 Robert Anisko <[email protected]>
|
||||
|
||||
* src/macrotab.c: New file.
|
||||
* src/macrotab.h: New file.
|
||||
* src/Makefile.am: Update.
|
||||
|
||||
2001-08-25 Robert Anisko <[email protected]>
|
||||
|
||||
* lib/hash.c: New file.
|
||||
* lib/hash.h: New file.
|
||||
* lib/Makefile.am: Update.
|
||||
|
||||
2001-08-15 Akim Demaille <[email protected]>
|
||||
|
||||
Version 1.28c.
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
## Process this file with automake to produce Makefile.in -*-Makefile-*-
|
||||
AUTOMAKE_OPTIONS = 1.5 check-news readme-alpha dist-bzip2
|
||||
AUTOMAKE_OPTIONS = 1.5 check-news readme-alpha
|
||||
|
||||
ACLOCAL_AMFLAGS = -I m4
|
||||
|
||||
|
||||
+453
@@ -0,0 +1,453 @@
|
||||
# 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@
|
||||
|
||||
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@
|
||||
AWK = @AWK@
|
||||
BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
|
||||
CATALOGS = @CATALOGS@
|
||||
CATOBJEXT = @CATOBJEXT@
|
||||
CC = @CC@
|
||||
CPP = @CPP@
|
||||
DATADIRNAME = @DATADIRNAME@
|
||||
DEPDIR = @DEPDIR@
|
||||
EXEEXT = @EXEEXT@
|
||||
GENCAT = @GENCAT@
|
||||
GLIBC21 = @GLIBC21@
|
||||
GMOFILES = @GMOFILES@
|
||||
GMSGFMT = @GMSGFMT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
INSTOBJEXT = @INSTOBJEXT@
|
||||
INTLBISON = @INTLBISON@
|
||||
INTLLIBS = @INTLLIBS@
|
||||
INTLOBJS = @INTLOBJS@
|
||||
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
|
||||
LIBICONV = @LIBICONV@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
M4 = @M4@
|
||||
MKINSTALLDIRS = @MKINSTALLDIRS@
|
||||
MSGFMT = @MSGFMT@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
POFILES = @POFILES@
|
||||
POSUB = @POSUB@
|
||||
RANLIB = @RANLIB@
|
||||
U = @U@
|
||||
USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
|
||||
USE_NLS = @USE_NLS@
|
||||
VERSION = @VERSION@
|
||||
WARNING_CFLAGS = @WARNING_CFLAGS@
|
||||
am__include = @am__include@
|
||||
am__quote = @am__quote@
|
||||
install_sh = @install_sh@
|
||||
|
||||
AUTOMAKE_OPTIONS = 1.5 check-news readme-alpha
|
||||
|
||||
ACLOCAL_AMFLAGS = -I m4
|
||||
|
||||
SUBDIRS = config intl po lib src doc m4 tests
|
||||
|
||||
EXTRA_DIST = REFERENCES configure.bat OChangeLog Makefile.maint GNUmakefile
|
||||
|
||||
DISTCLEANFILES = intl/libintl.h
|
||||
|
||||
move_if_change = $(srcdir)/config/move-if-change
|
||||
prev_version_file = $(srcdir)/config/prev-version.txt
|
||||
release_archive_dir = releases
|
||||
|
||||
# Uploading betas.
|
||||
hosts = alpha
|
||||
alpha_host = alpha.gnu.org
|
||||
alpha_url_dir = gnu/bison
|
||||
|
||||
# Files to update automatically.
|
||||
wget_files = $(srcdir)/config/config.guess $(srcdir)/config/config.sub \
|
||||
$(srcdir)/config/texinfo.tex
|
||||
|
||||
|
||||
cvs_files = $(srcdir)/config/missing
|
||||
subdir = .
|
||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
|
||||
CONFIG_HEADER = config.h
|
||||
CONFIG_CLEAN_FILES = intl/Makefile
|
||||
DIST_SOURCES =
|
||||
|
||||
RECURSIVE_TARGETS = info-recursive dvi-recursive install-info-recursive \
|
||||
uninstall-info-recursive all-recursive install-data-recursive \
|
||||
install-exec-recursive installdirs-recursive install-recursive \
|
||||
uninstall-recursive check-recursive installcheck-recursive
|
||||
DIST_COMMON = README ./stamp-h.in ABOUT-NLS AUTHORS COPYING ChangeLog \
|
||||
INSTALL Makefile.am Makefile.in NEWS README-alpha THANKS \
|
||||
aclocal.m4 config.hin configure configure.in
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
all: config.h
|
||||
$(MAKE) $(AM_MAKEFLAGS) all-recursive
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu Makefile
|
||||
Makefile: $(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: $(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
|
||||
cd $(srcdir) && $(AUTOCONF)
|
||||
|
||||
$(ACLOCAL_M4): configure.in m4/c-bs-a.m4 m4/codeset.m4 m4/dmalloc.m4 m4/error.m4 m4/gettext.m4 m4/glibc21.m4 m4/iconv.m4 m4/isc-posix.m4 m4/lcmessage.m4 m4/m4.m4 m4/malloc.m4 m4/mbstate_t.m4 m4/prereq.m4 m4/progtest.m4 m4/realloc.m4 m4/strerror_r.m4 m4/warning.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.hin $(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:config.hin \
|
||||
$(SHELL) ./config.status
|
||||
@mv stamp-hT stamp-h
|
||||
$(srcdir)/config.hin: $(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.in $(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
|
||||
intl/Makefile: $(top_builddir)/config.status $(top_srcdir)/intl/Makefile.in
|
||||
cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= CONFIG_LINKS= $(SHELL) ./config.status
|
||||
uninstall-info-am:
|
||||
|
||||
# This directory's subdirectories are mostly independent; you can cd
|
||||
# into them and run `make' without going through this Makefile.
|
||||
# To change the values of `make' variables: instead of editing Makefiles,
|
||||
# (1) if the variable is set in `config.status', edit `config.status'
|
||||
# (which will cause the Makefiles to be regenerated when you run `make');
|
||||
# (2) otherwise, pass the desired values on the `make' command line.
|
||||
$(RECURSIVE_TARGETS):
|
||||
@set fnord $(MAKEFLAGS); amf=$$2; \
|
||||
dot_seen=no; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
dot_seen=yes; \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done; \
|
||||
if test "$$dot_seen" = "no"; then \
|
||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
||||
fi; test -z "$$fail"
|
||||
|
||||
mostlyclean-recursive clean-recursive distclean-recursive \
|
||||
maintainer-clean-recursive:
|
||||
@set fnord $(MAKEFLAGS); amf=$$2; \
|
||||
dot_seen=no; \
|
||||
case "$@" in \
|
||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
||||
*) list='$(SUBDIRS)' ;; \
|
||||
esac; \
|
||||
rev=''; for subdir in $$list; do \
|
||||
if test "$$subdir" = "."; then :; else \
|
||||
rev="$$subdir $$rev"; \
|
||||
fi; \
|
||||
done; \
|
||||
rev="$$rev ."; \
|
||||
target=`echo $@ | sed s/-recursive//`; \
|
||||
for subdir in $$rev; do \
|
||||
echo "Making $$target in $$subdir"; \
|
||||
if test "$$subdir" = "."; then \
|
||||
local_target="$$target-am"; \
|
||||
else \
|
||||
local_target="$$target"; \
|
||||
fi; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
||||
|| case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
|
||||
done && test -z "$$fail"
|
||||
tags-recursive:
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
|
||||
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: tags-recursive $(HEADERS) $(SOURCES) config.hin $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
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.hin$$unique$(LISP)$$tags" \
|
||||
|| etags $(ETAGS_ARGS) $$tags config.hin $$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
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
top_distdir = .
|
||||
# Avoid unsightly `./'.
|
||||
distdir = $(PACKAGE)-$(VERSION)
|
||||
|
||||
GZIP_ENV = --best
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@if sed 15q $(srcdir)/NEWS | fgrep -e "$(VERSION)" >/dev/null; \
|
||||
then :; else \
|
||||
echo "NEWS not updated; not releasing" 1>&2; \
|
||||
exit 1; \
|
||||
fi
|
||||
-chmod -R a+w $(distdir) >/dev/null 2>&1; rm -rf $(distdir)
|
||||
mkdir $(distdir)
|
||||
$(mkinstalldirs) $(distdir)/intl $(distdir)/po
|
||||
@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
|
||||
for subdir in $(SUBDIRS); do \
|
||||
if test "$$subdir" = .; then :; else \
|
||||
test -d $(distdir)/$$subdir \
|
||||
|| mkdir $(distdir)/$$subdir \
|
||||
|| exit 1; \
|
||||
(cd $$subdir && \
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="$(top_distdir)" \
|
||||
distdir=../$(distdir)/$$subdir \
|
||||
distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
done
|
||||
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
|
||||
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
|
||||
|| chmod -R a+r $(distdir)
|
||||
dist: 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 \
|
||||
--with-included-gettext \
|
||||
&& $(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
|
||||
check: check-recursive
|
||||
all-am: Makefile config.h
|
||||
installdirs: installdirs-recursive
|
||||
installdirs-am:
|
||||
|
||||
install: install-recursive
|
||||
install-exec: install-exec-recursive
|
||||
install-data: install-data-recursive
|
||||
uninstall: uninstall-recursive
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-recursive
|
||||
install-strip:
|
||||
$(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."
|
||||
clean: clean-recursive
|
||||
|
||||
clean-am: clean-generic 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-recursive
|
||||
-rm -f config.status config.cache config.log
|
||||
distclean-am: clean-am distclean-generic distclean-hdr distclean-tags
|
||||
|
||||
dvi: dvi-recursive
|
||||
|
||||
dvi-am:
|
||||
|
||||
info: info-recursive
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-recursive
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-recursive
|
||||
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-recursive
|
||||
|
||||
mostlyclean-am: mostlyclean-generic
|
||||
|
||||
uninstall-am: uninstall-info-am
|
||||
|
||||
uninstall-info: uninstall-info-recursive
|
||||
|
||||
.PHONY: $(RECURSIVE_TARGETS) GTAGS all all-am check check-am clean \
|
||||
clean-generic clean-recursive dist dist-all distcheck distclean \
|
||||
distclean-generic distclean-hdr distclean-recursive \
|
||||
distclean-tags distdir dvi dvi-am dvi-recursive info info-am \
|
||||
info-recursive install install-am install-data install-data-am \
|
||||
install-data-recursive install-exec install-exec-am \
|
||||
install-exec-recursive install-info install-info-am \
|
||||
install-info-recursive install-man install-recursive \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
installdirs-am installdirs-recursive maintainer-clean \
|
||||
maintainer-clean-generic maintainer-clean-recursive mostlyclean \
|
||||
mostlyclean-generic mostlyclean-recursive tags tags-recursive \
|
||||
uninstall uninstall-am uninstall-info-am \
|
||||
uninstall-info-recursive uninstall-recursive
|
||||
|
||||
# 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:
|
||||
@@ -1,7 +1,7 @@
|
||||
Bison News
|
||||
----------
|
||||
|
||||
Changes in version 1.29d:
|
||||
Changes in version 1.29b:
|
||||
|
||||
* `--defines' and `--graph' have now an optionnal argument which is the
|
||||
output file name. `-d' and `-g' do not change, they do not take any
|
||||
@@ -16,10 +16,7 @@ Changes in version 1.29d:
|
||||
|
||||
Changes in version 1.29:
|
||||
|
||||
* The output file does not define const, as this caused problems when used
|
||||
with common autoconfiguration schemes. If you still use ancient compilers
|
||||
that lack const, compile with the equivalent of the C compiler option
|
||||
`-Dconst='. autoconf's AC_C_CONST macro provides one way to do this.
|
||||
* Output file does not redefine const; that is now config.h's job.
|
||||
|
||||
* Added `-g' and `--graph'.
|
||||
|
||||
|
||||
@@ -1,27 +1,25 @@
|
||||
Bison was originally written by Robert Corbett. It would not be what
|
||||
it is today without the invaluable help of these people:
|
||||
|
||||
Akim Demaille [email protected]
|
||||
Akim Demaille [email protected]
|
||||
Albert Chin-A-Young [email protected]
|
||||
Alexander Belopolsky [email protected]
|
||||
Daniel Hagerty hag@gnu.org
|
||||
David J. MacKenzie [email protected]
|
||||
Fabrice Bauzac [email protected]
|
||||
Hans Aberg [email protected]
|
||||
Jesse Thilo jthilo@gnu.org
|
||||
Jim Meyering [email protected]
|
||||
Juan Manuel Guerrero [email protected]
|
||||
Keith Browne [email protected]
|
||||
Laurent Mascherpa [email protected]
|
||||
Daniel Hagerty [email protected]
|
||||
David J. MacKenzie djm@gnu.org
|
||||
Fabrice Bauzac [email protected]
|
||||
Hans Aberg [email protected]
|
||||
Jesse Thilo [email protected]
|
||||
Jim Meyering meyering@gnu.org
|
||||
Juan Manuel Guerrero [email protected]
|
||||
Keith Browne [email protected]
|
||||
Laurent Mascherpa [email protected]
|
||||
Marc Autret [email protected]
|
||||
Neil Booth [email protected]
|
||||
Noah Friedman [email protected]
|
||||
Neil Booth [email protected]
|
||||
Noah Friedman [email protected]
|
||||
Pascal Bart [email protected]
|
||||
Paul Eggert [email protected]
|
||||
Piotr Gackiewicz [email protected]
|
||||
Richard Stallman [email protected]
|
||||
Paul Eggert [email protected]
|
||||
Piotr Gackiewicz [email protected]
|
||||
Richard Stallman [email protected]
|
||||
Robert Anisko [email protected]
|
||||
Shura [email protected]
|
||||
|
||||
Many people are not named here because we lost track of them. We
|
||||
thank them! Please, help us keeping this list up to date.
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
-*- outline -*-
|
||||
|
||||
* src/reader.c
|
||||
Complete parse_skel_decl () with parse_dquoted_param (). []
|
||||
Check and cleanup for CPP-out code. []
|
||||
|
||||
* src/output.c
|
||||
Synchronize `#line' directive with user file. [ok]
|
||||
|
||||
Cleanup dirty CPP-out code. []
|
||||
** Output sub-skeleton files. []
|
||||
Useful for %no_parser. []
|
||||
*** New skeleton. []
|
||||
|
||||
* src/getargs.c src/lex.c
|
||||
Synchronize percent and command line options. [ok]
|
||||
|
||||
* src/macrotab.[ch]
|
||||
Removing warnings when compiling. (gcc-warnings). [ok]
|
||||
|
||||
* src/print_graph.c
|
||||
Find the best graph parameters. []
|
||||
|
||||
* doc/bison.texinfo
|
||||
Echo modifications of prologue and epilogue. []
|
||||
Add informations about YYERROR_VERBOSE. []
|
||||
Add explainations about skeleton muscles. []
|
||||
Add explainations about %skeleton. []
|
||||
Vendored
+1515
File diff suppressed because it is too large
Load Diff
+289
@@ -0,0 +1,289 @@
|
||||
/* config.hin. Generated from configure.in by autoheader. */
|
||||
|
||||
/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
|
||||
systems. This function is required for `alloca.c' support on those systems.
|
||||
*/
|
||||
#undef CRAY_STACKSEG_END
|
||||
|
||||
/* Define if using `alloca.c'. */
|
||||
#undef C_ALLOCA
|
||||
|
||||
/* Define to 1 if translation of program messages to the user's native
|
||||
language is requested. */
|
||||
#undef ENABLE_NLS
|
||||
|
||||
/* Define if you have `alloca', as a function or macro. */
|
||||
#undef HAVE_ALLOCA
|
||||
|
||||
/* Define if you have <alloca.h> and it should be used (not on Ultrix). */
|
||||
#undef HAVE_ALLOCA_H
|
||||
|
||||
/* Define if you have the <argz.h> header file. */
|
||||
#undef HAVE_ARGZ_H
|
||||
|
||||
/* Define if you have the <ctype.h> header file. */
|
||||
#undef HAVE_CTYPE_H
|
||||
|
||||
/* Define if backslash-a works in C strings. */
|
||||
#undef HAVE_C_BACKSLASH_A
|
||||
|
||||
/* Define if you have the `dcgettext' function. */
|
||||
#undef HAVE_DCGETTEXT
|
||||
|
||||
/* Define to 1 if you have the declaration of `memchr', and to 0 if you don't.
|
||||
*/
|
||||
#undef HAVE_DECL_MEMCHR
|
||||
|
||||
/* Define to 1 if you have the declaration of `stpcpy', and to 0 if you don't.
|
||||
*/
|
||||
#undef HAVE_DECL_STPCPY
|
||||
|
||||
/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you
|
||||
don't. */
|
||||
#undef HAVE_DECL_STRERROR_R
|
||||
|
||||
/* Define to 1 if you have the declaration of `strndup', and to 0 if you
|
||||
don't. */
|
||||
#undef HAVE_DECL_STRNDUP
|
||||
|
||||
/* Define to 1 if you have the declaration of `strnlen', and to 0 if you
|
||||
don't. */
|
||||
#undef HAVE_DECL_STRNLEN
|
||||
|
||||
/* Define if the malloc check has been performed. */
|
||||
#undef HAVE_DONE_WORKING_MALLOC_CHECK
|
||||
|
||||
/* Define if the realloc check has been performed. */
|
||||
#undef HAVE_DONE_WORKING_REALLOC_CHECK
|
||||
|
||||
/* Define if you have the `doprnt' function. */
|
||||
#undef HAVE_DOPRNT
|
||||
|
||||
/* Define if you have the `feof_unlocked' function. */
|
||||
#undef HAVE_FEOF_UNLOCKED
|
||||
|
||||
/* Define if you have the `fgets_unlocked' function. */
|
||||
#undef HAVE_FGETS_UNLOCKED
|
||||
|
||||
/* Define if you have the `getcwd' function. */
|
||||
#undef HAVE_GETCWD
|
||||
|
||||
/* Define if you have the `getegid' function. */
|
||||
#undef HAVE_GETEGID
|
||||
|
||||
/* Define if you have the `geteuid' function. */
|
||||
#undef HAVE_GETEUID
|
||||
|
||||
/* Define if you have the `getgid' function. */
|
||||
#undef HAVE_GETGID
|
||||
|
||||
/* Define if you have the `getpagesize' function. */
|
||||
#undef HAVE_GETPAGESIZE
|
||||
|
||||
/* Define if the GNU gettext() function is already present or preinstalled. */
|
||||
#undef HAVE_GETTEXT
|
||||
|
||||
/* Define if you have the `getuid' function. */
|
||||
#undef HAVE_GETUID
|
||||
|
||||
/* Define if you have the iconv() function. */
|
||||
#undef HAVE_ICONV
|
||||
|
||||
/* Define if you have the <inttypes.h> header file. */
|
||||
#undef HAVE_INTTYPES_H
|
||||
|
||||
/* Define if you have the `isascii' function. */
|
||||
#undef HAVE_ISASCII
|
||||
|
||||
/* Define if you have the `iswprint' function. */
|
||||
#undef HAVE_ISWPRINT
|
||||
|
||||
/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
|
||||
#undef HAVE_LANGINFO_CODESET
|
||||
|
||||
/* Define if your <locale.h> file defines LC_MESSAGES. */
|
||||
#undef HAVE_LC_MESSAGES
|
||||
|
||||
/* Define if you have the <limits.h> header file. */
|
||||
#undef HAVE_LIMITS_H
|
||||
|
||||
/* Define if you have the <locale.h> header file. */
|
||||
#undef HAVE_LOCALE_H
|
||||
|
||||
/* Define if you have the <malloc.h> header file. */
|
||||
#undef HAVE_MALLOC_H
|
||||
|
||||
/* Define if you have the `mbrtowc' function. */
|
||||
#undef HAVE_MBRTOWC
|
||||
|
||||
/* Define if you have the `memchr' function. */
|
||||
#undef HAVE_MEMCHR
|
||||
|
||||
/* Define if you have the <memory.h> header file. */
|
||||
#undef HAVE_MEMORY_H
|
||||
|
||||
/* Define if you have the `mempcpy' function. */
|
||||
#undef HAVE_MEMPCPY
|
||||
|
||||
/* Define if you have the `mkstemp' function. */
|
||||
#undef HAVE_MKSTEMP
|
||||
|
||||
/* Define if you have a working `mmap' system call. */
|
||||
#undef HAVE_MMAP
|
||||
|
||||
/* Define if you have the `munmap' function. */
|
||||
#undef HAVE_MUNMAP
|
||||
|
||||
/* Define if you have the <nl_types.h> header file. */
|
||||
#undef HAVE_NL_TYPES_H
|
||||
|
||||
/* Define if you have the `putenv' function. */
|
||||
#undef HAVE_PUTENV
|
||||
|
||||
/* Define if you have the `setenv' function. */
|
||||
#undef HAVE_SETENV
|
||||
|
||||
/* Define if you have the `setlocale' function. */
|
||||
#undef HAVE_SETLOCALE
|
||||
|
||||
/* Define if you have the <stddef.h> header file. */
|
||||
#undef HAVE_STDDEF_H
|
||||
|
||||
/* Define if you have the <stdint.h> header file. */
|
||||
#undef HAVE_STDINT_H
|
||||
|
||||
/* Define if you have the <stdlib.h> header file. */
|
||||
#undef HAVE_STDLIB_H
|
||||
|
||||
/* Define if you have the `stpcpy' function. */
|
||||
#undef HAVE_STPCPY
|
||||
|
||||
/* Define if you have the `strcasecmp' function. */
|
||||
#undef HAVE_STRCASECMP
|
||||
|
||||
/* Define if you have the `strchr' function. */
|
||||
#undef HAVE_STRCHR
|
||||
|
||||
/* Define if you have the `strdup' function. */
|
||||
#undef HAVE_STRDUP
|
||||
|
||||
/* Define if you have the `strerror' function. */
|
||||
#undef HAVE_STRERROR
|
||||
|
||||
/* Define if you have the `strerror_r' function. */
|
||||
#undef HAVE_STRERROR_R
|
||||
|
||||
/* Define if you have the <strings.h> header file. */
|
||||
#undef HAVE_STRINGS_H
|
||||
|
||||
/* Define if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
/* Define if you have the `strndup' function. */
|
||||
#undef HAVE_STRNDUP
|
||||
|
||||
/* Define if you have the `strnlen' function. */
|
||||
#undef HAVE_STRNLEN
|
||||
|
||||
/* Define if you have the `strspn' function. */
|
||||
#undef HAVE_STRSPN
|
||||
|
||||
/* Define if you have the `strtoul' function. */
|
||||
#undef HAVE_STRTOUL
|
||||
|
||||
/* Define if you have the <sys/param.h> header file. */
|
||||
#undef HAVE_SYS_PARAM_H
|
||||
|
||||
/* Define if you have the <sys/stat.h> header file. */
|
||||
#undef HAVE_SYS_STAT_H
|
||||
|
||||
/* Define if you have the <sys/types.h> header file. */
|
||||
#undef HAVE_SYS_TYPES_H
|
||||
|
||||
/* Define if you have the `tsearch' function. */
|
||||
#undef HAVE_TSEARCH
|
||||
|
||||
/* Define if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* Define if you have the `vprintf' function. */
|
||||
#undef HAVE_VPRINTF
|
||||
|
||||
/* Define if you have the <wchar.h> header file. */
|
||||
#undef HAVE_WCHAR_H
|
||||
|
||||
/* Define if you have the <wctype.h> header file. */
|
||||
#undef HAVE_WCTYPE_H
|
||||
|
||||
/* Define to 1 if `strerror_r' returns a string. */
|
||||
#undef HAVE_WORKING_STRERROR_R
|
||||
|
||||
/* Define if you have the `__argz_count' function. */
|
||||
#undef HAVE___ARGZ_COUNT
|
||||
|
||||
/* Define if you have the `__argz_next' function. */
|
||||
#undef HAVE___ARGZ_NEXT
|
||||
|
||||
/* Define if you have the `__argz_stringify' function. */
|
||||
#undef HAVE___ARGZ_STRINGIFY
|
||||
|
||||
/* Define as const if the declaration of iconv() needs const. */
|
||||
#undef ICONV_CONST
|
||||
|
||||
/* Name of package */
|
||||
#undef PACKAGE
|
||||
|
||||
/* Define if compiler has function prototypes */
|
||||
#undef PROTOTYPES
|
||||
|
||||
/* If using the C implementation of alloca, define if you know the
|
||||
direction of stack growth for your system; otherwise it will be
|
||||
automatically deduced at run-time.
|
||||
STACK_DIRECTION > 0 => grows toward higher addresses
|
||||
STACK_DIRECTION < 0 => grows toward lower addresses
|
||||
STACK_DIRECTION = 0 => direction of growth unknown */
|
||||
#undef STACK_DIRECTION
|
||||
|
||||
/* Define if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Version number of package */
|
||||
#undef VERSION
|
||||
|
||||
/* Define if using the dmalloc debugging malloc package */
|
||||
#undef WITH_DMALLOC
|
||||
|
||||
/* Define to 1 for GNU C library extensions. */
|
||||
#undef _GNU_SOURCE
|
||||
|
||||
/* Define if on MINIX. */
|
||||
#undef _MINIX
|
||||
|
||||
/* Define if the system does not provide POSIX.1 features except with this
|
||||
defined. */
|
||||
#undef _POSIX_1_SOURCE
|
||||
|
||||
/* Define if you need to in order for `stat' and other things to work. */
|
||||
#undef _POSIX_SOURCE
|
||||
|
||||
/* Define to empty if `const' does not conform to ANSI C. */
|
||||
#undef const
|
||||
|
||||
/* Define as `__inline' if that's what the C compiler calls it, or to nothing
|
||||
if it is not supported. */
|
||||
#undef inline
|
||||
|
||||
/* Define to rpl_malloc if the replacement function should be used. */
|
||||
#undef malloc
|
||||
|
||||
/* Define to a type if <wchar.h> does not define. */
|
||||
#undef mbstate_t
|
||||
|
||||
/* Define to `long' if <sys/types.h> does not define. */
|
||||
#undef off_t
|
||||
|
||||
/* Define to rpl_realloc if the replacement function should be used. */
|
||||
#undef realloc
|
||||
|
||||
/* Define to `unsigned' if <sys/types.h> does not define. */
|
||||
#undef size_t
|
||||
@@ -0,0 +1,218 @@
|
||||
# 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@
|
||||
|
||||
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@
|
||||
AWK = @AWK@
|
||||
BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
|
||||
CATALOGS = @CATALOGS@
|
||||
CATOBJEXT = @CATOBJEXT@
|
||||
CC = @CC@
|
||||
CPP = @CPP@
|
||||
DATADIRNAME = @DATADIRNAME@
|
||||
DEPDIR = @DEPDIR@
|
||||
EXEEXT = @EXEEXT@
|
||||
GENCAT = @GENCAT@
|
||||
GLIBC21 = @GLIBC21@
|
||||
GMOFILES = @GMOFILES@
|
||||
GMSGFMT = @GMSGFMT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
INSTOBJEXT = @INSTOBJEXT@
|
||||
INTLBISON = @INTLBISON@
|
||||
INTLLIBS = @INTLLIBS@
|
||||
INTLOBJS = @INTLOBJS@
|
||||
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
|
||||
LIBICONV = @LIBICONV@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
M4 = @M4@
|
||||
MKINSTALLDIRS = @MKINSTALLDIRS@
|
||||
MSGFMT = @MSGFMT@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
POFILES = @POFILES@
|
||||
POSUB = @POSUB@
|
||||
RANLIB = @RANLIB@
|
||||
U = @U@
|
||||
USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
|
||||
USE_NLS = @USE_NLS@
|
||||
VERSION = @VERSION@
|
||||
WARNING_CFLAGS = @WARNING_CFLAGS@
|
||||
am__include = @am__include@
|
||||
am__quote = @am__quote@
|
||||
install_sh = @install_sh@
|
||||
|
||||
EXTRA_DIST = move-if-change prev-version.txt
|
||||
subdir = config
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
DIST_SOURCES =
|
||||
DIST_COMMON = Makefile.am Makefile.in config.guess config.sub depcomp \
|
||||
install-sh mdate-sh missing mkinstalldirs texinfo.tex
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu config/Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) && \
|
||||
CONFIG_HEADERS= CONFIG_LINKS= \
|
||||
CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
|
||||
uninstall-info-am:
|
||||
tags: TAGS
|
||||
TAGS:
|
||||
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
top_distdir = ..
|
||||
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@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
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile
|
||||
|
||||
installdirs:
|
||||
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(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]*
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
|
||||
distclean-am: clean-am distclean-generic
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-generic
|
||||
|
||||
uninstall-am: uninstall-info-am
|
||||
|
||||
.PHONY: all all-am check check-am clean clean-generic distclean \
|
||||
distclean-generic distdir dvi dvi-am info info-am install \
|
||||
install-am install-data install-data-am install-exec \
|
||||
install-exec-am install-info install-info-am install-man \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
maintainer-clean maintainer-clean-generic mostlyclean \
|
||||
mostlyclean-generic uninstall uninstall-am uninstall-info-am
|
||||
|
||||
# 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:
|
||||
+1309
File diff suppressed because it is too large
Load Diff
+1412
File diff suppressed because it is too large
Load Diff
Executable
+336
@@ -0,0 +1,336 @@
|
||||
#! /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 <[email protected]>, 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.4 - GNU automake"
|
||||
;;
|
||||
|
||||
-*)
|
||||
echo 1>&2 "$0: Unknown \`$1' option"
|
||||
echo 1>&2 "Try \`$0 --help' for more information"
|
||||
exit 1
|
||||
;;
|
||||
|
||||
aclocal)
|
||||
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||
# We have it, but it failed.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
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)
|
||||
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||
# We have it, but it failed.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
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)
|
||||
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||
# We have it, but it failed.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
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)
|
||||
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||
# We have it, but it failed.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
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
|
||||
;;
|
||||
|
||||
autom4te)
|
||||
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||
# We have it, but it failed.
|
||||
exit 1
|
||||
fi
|
||||
|
||||
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.
|
||||
You can get \`$1Help2man' as part of \`Autoconf' from any GNU
|
||||
archive site."
|
||||
|
||||
file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
|
||||
test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
|
||||
if test -f "$file"; then
|
||||
touch $file
|
||||
else
|
||||
test -z "$file" || exec >$file
|
||||
echo "#! /bin/sh"
|
||||
echo "# Created by GNU Automake missing as a replacement of"
|
||||
echo "# $ $@"
|
||||
echo "exit 0"
|
||||
chmod +x $file
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
bison|yacc)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' 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)
|
||||
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||
# We have it, 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 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
|
||||
Executable
+40
@@ -0,0 +1,40 @@
|
||||
#! /bin/sh
|
||||
# mkinstalldirs --- make directory hierarchy
|
||||
# Author: Noah Friedman <[email protected]>
|
||||
# Created: 1993-05-16
|
||||
# Public domain
|
||||
|
||||
# $Id$
|
||||
|
||||
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 +1 @@
|
||||
1.29c
|
||||
1.29a
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+2
-3
@@ -18,15 +18,14 @@
|
||||
# We need a recent Autoconf to run a recent Autotest.
|
||||
AC_PREREQ(2.52e)
|
||||
|
||||
AC_INIT([GNU Bison], [1.29d], [[email protected]])
|
||||
AC_INIT([GNU Bison], [1.29b], [[email protected]])
|
||||
AC_CONFIG_AUX_DIR(config)
|
||||
|
||||
AM_INIT_AUTOMAKE([bison], [1.29d])
|
||||
AM_INIT_AUTOMAKE([bison], [1.29b])
|
||||
AM_CONFIG_HEADER(config.h:config.hin)
|
||||
|
||||
# Initialize the test suite.
|
||||
AC_CONFIG_TESTDIR(tests)
|
||||
AC_CONFIG_FILES([tests/bison], [chmod +x tests/bison])
|
||||
|
||||
# Checks for programs.
|
||||
AC_PROG_CC
|
||||
|
||||
+398
@@ -0,0 +1,398 @@
|
||||
# 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@
|
||||
|
||||
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@
|
||||
AWK = @AWK@
|
||||
BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
|
||||
CATALOGS = @CATALOGS@
|
||||
CATOBJEXT = @CATOBJEXT@
|
||||
CC = @CC@
|
||||
CPP = @CPP@
|
||||
DATADIRNAME = @DATADIRNAME@
|
||||
DEPDIR = @DEPDIR@
|
||||
EXEEXT = @EXEEXT@
|
||||
GENCAT = @GENCAT@
|
||||
GLIBC21 = @GLIBC21@
|
||||
GMOFILES = @GMOFILES@
|
||||
GMSGFMT = @GMSGFMT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
INSTOBJEXT = @INSTOBJEXT@
|
||||
INTLBISON = @INTLBISON@
|
||||
INTLLIBS = @INTLLIBS@
|
||||
INTLOBJS = @INTLOBJS@
|
||||
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
|
||||
LIBICONV = @LIBICONV@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
M4 = @M4@
|
||||
MKINSTALLDIRS = @MKINSTALLDIRS@
|
||||
MSGFMT = @MSGFMT@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
POFILES = @POFILES@
|
||||
POSUB = @POSUB@
|
||||
RANLIB = @RANLIB@
|
||||
U = @U@
|
||||
USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
|
||||
USE_NLS = @USE_NLS@
|
||||
VERSION = @VERSION@
|
||||
WARNING_CFLAGS = @WARNING_CFLAGS@
|
||||
am__include = @am__include@
|
||||
am__quote = @am__quote@
|
||||
install_sh = @install_sh@
|
||||
|
||||
AUTOMAKE_OPTIONS = 1.4
|
||||
|
||||
info_TEXINFOS = bison.texinfo
|
||||
man_MANS = bison.1
|
||||
bison_TEXINFOS = gpl.texi fdl.texi
|
||||
|
||||
EXTRA_DIST = FAQ bison.1 bison.rnh refcard.tex
|
||||
|
||||
CLEANFILES = refcard.dvi refcard.log refcard.ps
|
||||
subdir = doc
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
DIST_SOURCES =
|
||||
TEXINFO_TEX = $(top_srcdir)/config/texinfo.tex
|
||||
INFO_DEPS = bison.info
|
||||
DVIS = bison.dvi
|
||||
TEXINFOS = bison.texinfo
|
||||
|
||||
NROFF = nroff
|
||||
MANS = $(man_MANS)
|
||||
DIST_COMMON = $(bison_TEXINFOS) Makefile.am Makefile.in stamp-vti \
|
||||
version.texi
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .dvi .info .ps .texinfo
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu doc/Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) && \
|
||||
CONFIG_HEADERS= CONFIG_LINKS= \
|
||||
CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
|
||||
|
||||
$(srcdir)/version.texi: $(srcdir)/stamp-vti
|
||||
@:
|
||||
$(srcdir)/stamp-vti: bison.texinfo $(top_srcdir)/configure.in
|
||||
@(set `$(SHELL) $(top_srcdir)/config/mdate-sh $(srcdir)/bison.texinfo`; \
|
||||
echo "@set UPDATED $$1 $$2 $$3"; \
|
||||
echo "@set UPDATED-MONTH $$2 $$3"; \
|
||||
echo "@set EDITION $(VERSION)"; \
|
||||
echo "@set VERSION $(VERSION)") > vti.tmp
|
||||
@cmp -s vti.tmp $(srcdir)/version.texi \
|
||||
|| (echo "Updating $(srcdir)/version.texi"; \
|
||||
cp vti.tmp $(srcdir)/version.texi)
|
||||
-@rm -f vti.tmp
|
||||
@cp $(srcdir)/version.texi $@
|
||||
|
||||
mostlyclean-vti:
|
||||
-rm -f vti.tmp
|
||||
|
||||
maintainer-clean-vti:
|
||||
-rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi
|
||||
|
||||
bison.info: bison.texinfo $(srcdir)/version.texi $(bison_TEXINFOS)
|
||||
bison.dvi: bison.texinfo $(srcdir)/version.texi $(bison_TEXINFOS)
|
||||
|
||||
.texinfo.info:
|
||||
@cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9]
|
||||
cd $(srcdir) \
|
||||
&& $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) \
|
||||
`echo $< | sed 's,.*/,,'`
|
||||
|
||||
.texinfo.dvi:
|
||||
TEXINPUTS=$(top_srcdir)/config:$$TEXINPUTS \
|
||||
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
|
||||
$(TEXI2DVI) $<
|
||||
|
||||
.texinfo:
|
||||
@cd $(srcdir) && rm -f $@ $@-[0-9] $@-[0-9][0-9]
|
||||
cd $(srcdir) \
|
||||
&& $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) \
|
||||
`echo $< | sed 's,.*/,,'`
|
||||
|
||||
MAKEINFO = @MAKEINFO@
|
||||
TEXI2DVI = texi2dvi
|
||||
DVIPS = dvips
|
||||
.dvi.ps:
|
||||
$(DVIPS) $< -o $@
|
||||
|
||||
uninstall-info-am:
|
||||
$(PRE_UNINSTALL)
|
||||
@if (install-info --version && \
|
||||
install-info --version | fgrep -i -v debian) >/dev/null 2>&1; then \
|
||||
list='$(INFO_DEPS)'; \
|
||||
for file in $$list; do \
|
||||
echo " install-info --info-dir=$(DESTDIR)$(infodir) --remove $(DESTDIR)$(infodir)/$$file"; \
|
||||
install-info --info-dir=$(DESTDIR)$(infodir) --remove $(DESTDIR)$(infodir)/$$file; \
|
||||
done; \
|
||||
else :; fi
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(INFO_DEPS)'; \
|
||||
for file in $$list; do \
|
||||
(if cd $(DESTDIR)$(infodir); then \
|
||||
echo " rm -f $$file $$file-[0-9] $$file-[0-9][0-9])"; \
|
||||
rm -f $$file $$file-[0-9] $$file-[0-9][0-9]; \
|
||||
else :; fi); \
|
||||
done
|
||||
|
||||
dist-info: $(INFO_DEPS)
|
||||
list='$(INFO_DEPS)'; \
|
||||
for base in $$list; do \
|
||||
d=$(srcdir); \
|
||||
for file in `CDPATH=: && cd $$d && eval echo $$base*`; do \
|
||||
test -f $(distdir)/$$file \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file; \
|
||||
done; \
|
||||
done
|
||||
|
||||
mostlyclean-aminfo:
|
||||
-rm -f bison.aux bison.cp bison.cps bison.dvi bison.fn bison.ky bison.log \
|
||||
bison.pg bison.ps bison.toc bison.tp bison.vr
|
||||
|
||||
maintainer-clean-aminfo:
|
||||
cd $(srcdir) && \
|
||||
for i in $(INFO_DEPS); do \
|
||||
rm -f $$i; \
|
||||
if test "`echo $$i-[0-9]*`" != "$$i-[0-9]*"; then \
|
||||
rm -f $$i-[0-9]*; \
|
||||
fi; \
|
||||
done
|
||||
|
||||
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
|
||||
tags: TAGS
|
||||
TAGS:
|
||||
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
top_distdir = ..
|
||||
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@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
|
||||
$(MAKE) $(AM_MAKEFLAGS) \
|
||||
top_distdir="${top_distdir}" distdir="$(distdir)" \
|
||||
dist-info
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(INFO_DEPS) $(MANS)
|
||||
|
||||
installdirs:
|
||||
$(mkinstalldirs) $(DESTDIR)$(infodir) $(DESTDIR)$(man1dir)
|
||||
|
||||
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:
|
||||
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
||||
|
||||
distclean-generic:
|
||||
-rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]*
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
|
||||
distclean-am: clean-am distclean-generic
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am: $(DVIS)
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am: $(INFO_DEPS)
|
||||
|
||||
install-data-am: install-info-am install-man
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-info-am: $(INFO_DEPS)
|
||||
@$(NORMAL_INSTALL)
|
||||
$(mkinstalldirs) $(DESTDIR)$(infodir)
|
||||
@list='$(INFO_DEPS)'; \
|
||||
for file in $$list; do \
|
||||
d=$(srcdir); \
|
||||
for ifile in `CDPATH=: && cd $$d && echo $$file $$file-[0-9] $$file-[0-9][0-9]`; do \
|
||||
if test -f $$d/$$ifile; then \
|
||||
echo " $(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile"; \
|
||||
$(INSTALL_DATA) $$d/$$ifile $(DESTDIR)$(infodir)/$$ifile; \
|
||||
else : ; fi; \
|
||||
done; \
|
||||
done
|
||||
@$(POST_INSTALL)
|
||||
@if (install-info --version && \
|
||||
install-info --version | fgrep -i -v debian) >/dev/null 2>&1; then \
|
||||
list='$(INFO_DEPS)'; \
|
||||
for file in $$list; do \
|
||||
echo " install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file";\
|
||||
install-info --info-dir=$(DESTDIR)$(infodir) $(DESTDIR)$(infodir)/$$file || :;\
|
||||
done; \
|
||||
else : ; fi
|
||||
install-man: install-man1
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
|
||||
maintainer-clean-am: distclean-am maintainer-clean-aminfo \
|
||||
maintainer-clean-generic maintainer-clean-vti
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-aminfo mostlyclean-generic mostlyclean-vti
|
||||
|
||||
uninstall-am: uninstall-info-am uninstall-man
|
||||
|
||||
uninstall-man: uninstall-man1
|
||||
|
||||
.PHONY: all all-am check check-am clean clean-generic dist-info \
|
||||
distclean distclean-generic distdir dvi dvi-am info info-am \
|
||||
install install-am install-data install-data-am install-exec \
|
||||
install-exec-am install-info install-info-am install-man \
|
||||
install-man1 install-strip installcheck installcheck-am \
|
||||
installdirs maintainer-clean maintainer-clean-aminfo \
|
||||
maintainer-clean-generic maintainer-clean-vti mostlyclean \
|
||||
mostlyclean-aminfo mostlyclean-generic mostlyclean-vti \
|
||||
uninstall uninstall-am uninstall-info-am uninstall-man \
|
||||
uninstall-man1
|
||||
|
||||
|
||||
refcard.dvi: refcard.tex
|
||||
tex refcard.tex
|
||||
|
||||
refcard.ps: refcard.dvi
|
||||
# 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:
|
||||
+145
@@ -0,0 +1,145 @@
|
||||
Ceci est le fichier Info bison.info, produit par Makeinfo version 4.0b
|
||||
à partir bison.texinfo.
|
||||
|
||||
START-INFO-DIR-ENTRY
|
||||
* bison: (bison). GNU Project parser generator (yacc replacement).
|
||||
END-INFO-DIR-ENTRY
|
||||
|
||||
This file documents the Bison parser generator.
|
||||
|
||||
Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1995, 1998, 1999,
|
||||
2000, 2001 Free Software Foundation, Inc.
|
||||
|
||||
Permission is granted to make and distribute verbatim copies of this
|
||||
manual provided the copyright notice and this permission notice are
|
||||
preserved on all copies.
|
||||
|
||||
Permission is granted to copy and distribute modified versions of
|
||||
this manual under the conditions for verbatim copying, provided also
|
||||
that the sections entitled "GNU General Public License" and "Conditions
|
||||
for Using Bison" are included exactly as in the original, and provided
|
||||
that the entire resulting derived work is distributed under the terms
|
||||
of a permission notice identical to this one.
|
||||
|
||||
Permission is granted to copy and distribute translations of this
|
||||
manual into another language, under the above conditions for modified
|
||||
versions, except that the sections entitled "GNU General Public
|
||||
License", "Conditions for Using Bison" and this permission notice may be
|
||||
included in translations approved by the Free Software Foundation
|
||||
instead of in the original English.
|
||||
|
||||
|
||||
Indirect:
|
||||
bison.info-1: 1313
|
||||
bison.info-2: 50691
|
||||
bison.info-3: 100581
|
||||
bison.info-4: 150131
|
||||
bison.info-5: 197908
|
||||
|
||||
Tag Table:
|
||||
(Indirect)
|
||||
Node: Top1313
|
||||
Node: Introduction8969
|
||||
Node: Conditions10244
|
||||
Node: Copying11708
|
||||
Node: Concepts30911
|
||||
Node: Language and Grammar31990
|
||||
Node: Grammar in Bison37006
|
||||
Node: Semantic Values38930
|
||||
Node: Semantic Actions41031
|
||||
Node: Locations Overview42220
|
||||
Node: Bison Parser43667
|
||||
Node: Stages45979
|
||||
Node: Grammar Layout47262
|
||||
Node: Examples48519
|
||||
Node: RPN Calc49717
|
||||
Node: Rpcalc Decls50691
|
||||
Node: Rpcalc Rules52278
|
||||
Node: Rpcalc Input54078
|
||||
Node: Rpcalc Line55539
|
||||
Node: Rpcalc Expr56654
|
||||
Node: Rpcalc Lexer58599
|
||||
Node: Rpcalc Main61171
|
||||
Node: Rpcalc Error61569
|
||||
Node: Rpcalc Gen62577
|
||||
Node: Rpcalc Compile63726
|
||||
Node: Infix Calc64601
|
||||
Node: Simple Error Recovery67308
|
||||
Node: Location Tracking Calc69197
|
||||
Node: Ltcalc Decls69927
|
||||
Node: Ltcalc Rules70836
|
||||
Node: Ltcalc Lexer72897
|
||||
Node: Multi-function Calc75235
|
||||
Node: Mfcalc Decl76802
|
||||
Node: Mfcalc Rules78825
|
||||
Node: Mfcalc Symtab80205
|
||||
Node: Exercises86578
|
||||
Node: Grammar File87084
|
||||
Node: Grammar Outline87932
|
||||
Node: C Declarations88666
|
||||
Node: Bison Declarations89246
|
||||
Node: Grammar Rules89658
|
||||
Node: C Code90118
|
||||
Node: Symbols91048
|
||||
Node: Rules96129
|
||||
Node: Recursion97768
|
||||
Node: Semantics99487
|
||||
Node: Value Type100581
|
||||
Node: Multiple Types101253
|
||||
Node: Actions102270
|
||||
Node: Action Types105055
|
||||
Node: Mid-Rule Actions106358
|
||||
Node: Locations111928
|
||||
Node: Location Type112576
|
||||
Node: Actions and Locations113134
|
||||
Node: Location Default Action115290
|
||||
Node: Declarations116753
|
||||
Node: Token Decl118072
|
||||
Node: Precedence Decl120085
|
||||
Node: Union Decl121636
|
||||
Node: Type Decl122480
|
||||
Node: Expect Decl123386
|
||||
Node: Start Decl124932
|
||||
Node: Pure Decl125310
|
||||
Node: Decl Summary126987
|
||||
Node: Multiple Parsers132370
|
||||
Node: Interface133864
|
||||
Node: Parser Function134736
|
||||
Node: Lexical135571
|
||||
Node: Calling Convention136977
|
||||
Node: Token Values139748
|
||||
Node: Token Positions140897
|
||||
Node: Pure Calling141782
|
||||
Node: Error Reporting144714
|
||||
Node: Action Features146836
|
||||
Node: Algorithm150131
|
||||
Node: Look-Ahead152424
|
||||
Node: Shift/Reduce154556
|
||||
Node: Precedence157468
|
||||
Node: Why Precedence158119
|
||||
Node: Using Precedence159984
|
||||
Node: Precedence Examples160952
|
||||
Node: How Precedence161653
|
||||
Node: Contextual Precedence162802
|
||||
Node: Parser States164593
|
||||
Node: Reduce/Reduce165836
|
||||
Node: Mystery Conflicts169397
|
||||
Node: Stack Overflow172783
|
||||
Node: Error Recovery174156
|
||||
Node: Context Dependency179292
|
||||
Node: Semantic Tokens180140
|
||||
Node: Lexical Tie-ins183157
|
||||
Node: Tie-in Recovery184705
|
||||
Node: Debugging186877
|
||||
Node: Invocation190178
|
||||
Node: Bison Options191430
|
||||
Node: Environment Variables195398
|
||||
Node: Option Cross Key196246
|
||||
Node: VMS Invocation197124
|
||||
Node: Table of Symbols197908
|
||||
Node: Glossary205547
|
||||
Node: Copying This Manual211851
|
||||
Node: GNU Free Documentation License212060
|
||||
Node: Index231925
|
||||
|
||||
End Tag Table
|
||||
+1076
File diff suppressed because it is too large
Load Diff
+1427
File diff suppressed because it is too large
Load Diff
+1317
File diff suppressed because it is too large
Load Diff
+1261
File diff suppressed because it is too large
Load Diff
+1036
File diff suppressed because it is too large
Load Diff
+55
-54
@@ -191,7 +191,7 @@ Examples
|
||||
|
||||
Reverse Polish Notation Calculator
|
||||
|
||||
* Decls: Rpcalc Decls. Prologue (declarations) for rpcalc.
|
||||
* Decls: Rpcalc Decls. Bison and C declarations for rpcalc.
|
||||
* Rules: Rpcalc Rules. Grammar Rules for rpcalc, with explanation.
|
||||
* Lexer: Rpcalc Lexer. The lexical analyzer.
|
||||
* Main: Rpcalc Main. The controlling function.
|
||||
@@ -229,10 +229,10 @@ Bison Grammar Files
|
||||
|
||||
Outline of a Bison Grammar
|
||||
|
||||
* Prologue:: Syntax and usage of the prologue (declarations section).
|
||||
* C Declarations:: Syntax and usage of the C declarations section.
|
||||
* Bison Declarations:: Syntax and usage of the Bison declarations section.
|
||||
* Grammar Rules:: Syntax and usage of the grammar rules section.
|
||||
* Epilogue:: Syntax and usage of the epilogue (additional code section).
|
||||
* C Code:: Syntax and usage of the additional C code section.
|
||||
|
||||
Defining Language Semantics
|
||||
|
||||
@@ -746,7 +746,7 @@ general form of a Bison grammar file is as follows:
|
||||
|
||||
@example
|
||||
%@{
|
||||
@var{Prologue (declarations)}
|
||||
@var{C declarations}
|
||||
%@}
|
||||
|
||||
@var{Bison declarations}
|
||||
@@ -754,15 +754,15 @@ general form of a Bison grammar file is as follows:
|
||||
%%
|
||||
@var{Grammar rules}
|
||||
%%
|
||||
@var{Epilogue (additional code)}
|
||||
@var{Additional C code}
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
The @samp{%%}, @samp{%@{} and @samp{%@}} are punctuation that appears
|
||||
in every Bison grammar file to separate the sections.
|
||||
|
||||
The prologue may define types and variables used in the actions. You can
|
||||
also use preprocessor commands to define macros used there, and use
|
||||
The C declarations may define types and variables used in the actions.
|
||||
You can also use preprocessor commands to define macros used there, and use
|
||||
@code{#include} to include header files that do any of these things.
|
||||
|
||||
The Bison declarations declare the names of the terminal and nonterminal
|
||||
@@ -772,10 +772,10 @@ semantic values of various symbols.
|
||||
The grammar rules define how to construct each nonterminal symbol from its
|
||||
parts.
|
||||
|
||||
The epilogue can contain any code you want to use. Often the definition of
|
||||
the lexical analyzer @code{yylex} goes here, plus subroutines called by the
|
||||
actions in the grammar rules. In a simple program, all the rest of the
|
||||
program can go here.
|
||||
The additional C code can contain any C code you want to use. Often the
|
||||
definition of the lexical analyzer @code{yylex} goes here, plus subroutines
|
||||
called by the actions in the grammar rules. In a simple program, all the
|
||||
rest of the program can go here.
|
||||
|
||||
@node Examples
|
||||
@chapter Examples
|
||||
@@ -823,7 +823,7 @@ The source code for this calculator is named @file{rpcalc.y}. The
|
||||
@samp{.y} extension is a convention used for Bison input files.
|
||||
|
||||
@menu
|
||||
* Decls: Rpcalc Decls. Prologue (declarations) for rpcalc.
|
||||
* Decls: Rpcalc Decls. Bison and C declarations for rpcalc.
|
||||
* Rules: Rpcalc Rules. Grammar Rules for rpcalc, with explanation.
|
||||
* Lexer: Rpcalc Lexer. The lexical analyzer.
|
||||
* Main: Rpcalc Main. The controlling function.
|
||||
@@ -851,7 +851,7 @@ calculator. As in C, comments are placed between @samp{/*@dots{}*/}.
|
||||
%% /* Grammar rules and actions follow */
|
||||
@end example
|
||||
|
||||
The declarations section (@pxref{Prologue, , The prologue}) contains two
|
||||
The C declarations section (@pxref{C Declarations, ,The C Declarations Section}) contains two
|
||||
preprocessor directives.
|
||||
|
||||
The @code{#define} directive defines the macro @code{YYSTYPE}, thus
|
||||
@@ -1172,8 +1172,8 @@ Before running Bison to produce a parser, we need to decide how to
|
||||
arrange all the source code in one or more source files. For such a
|
||||
simple example, the easiest thing is to put everything in one file. The
|
||||
definitions of @code{yylex}, @code{yyerror} and @code{main} go at the
|
||||
end, in the epilogue of the file
|
||||
(@pxref{Grammar Layout, ,The Overall Layout of a Bison Grammar}).
|
||||
end, in the ``additional C code'' section of the file (@pxref{Grammar
|
||||
Layout, ,The Overall Layout of a Bison Grammar}).
|
||||
|
||||
For a large project, you would probably have several source files, and use
|
||||
@code{make} to arrange to recompile them.
|
||||
@@ -1988,7 +1988,7 @@ appropriate delimiters:
|
||||
|
||||
@example
|
||||
%@{
|
||||
@var{Prologue}
|
||||
@var{C declarations}
|
||||
%@}
|
||||
|
||||
@var{Bison declarations}
|
||||
@@ -1997,25 +1997,24 @@ appropriate delimiters:
|
||||
@var{Grammar rules}
|
||||
%%
|
||||
|
||||
@var{Epilogue}
|
||||
@var{Additional C code}
|
||||
@end example
|
||||
|
||||
Comments enclosed in @samp{/* @dots{} */} may appear in any of the sections.
|
||||
|
||||
@menu
|
||||
* Prologue:: Syntax and usage of the prologue.
|
||||
* C Declarations:: Syntax and usage of the C declarations section.
|
||||
* Bison Declarations:: Syntax and usage of the Bison declarations section.
|
||||
* Grammar Rules:: Syntax and usage of the grammar rules section.
|
||||
* Epilogue:: Syntax and usage of the epilogue.
|
||||
* C Code:: Syntax and usage of the additional C code section.
|
||||
@end menu
|
||||
|
||||
@node Prologue, Bison Declarations, , Grammar Outline
|
||||
@subsection The prologue
|
||||
@cindex declarations section
|
||||
@cindex Prologue
|
||||
@cindex declarations
|
||||
@node C Declarations
|
||||
@subsection The C Declarations Section
|
||||
@cindex C declarations section
|
||||
@cindex declarations, C
|
||||
|
||||
The @var{prologue} section contains macro definitions and
|
||||
The @var{C declarations} section contains macro definitions and
|
||||
declarations of functions and variables that are used in the actions in the
|
||||
grammar rules. These are copied to the beginning of the parser file so
|
||||
that they precede the definition of @code{yyparse}. You can use
|
||||
@@ -2045,18 +2044,18 @@ There must always be at least one grammar rule, and the first
|
||||
@samp{%%} (which precedes the grammar rules) may never be omitted even
|
||||
if it is the first thing in the file.
|
||||
|
||||
@node Epilogue, , Grammar Rules, Grammar Outline
|
||||
@subsection The epilogue
|
||||
@node C Code
|
||||
@subsection The Additional C Code Section
|
||||
@cindex additional C code section
|
||||
@cindex epilogue
|
||||
@cindex C code, section for additional
|
||||
|
||||
The @var{epilogue} is copied verbatim to the end of the parser file, just as
|
||||
the @var{prologue} is copied to the beginning. This is the most convenient
|
||||
place to put anything that you want to have in the parser file but which need
|
||||
not come before the definition of @code{yyparse}. For example, the
|
||||
definitions of @code{yylex} and @code{yyerror} often go here.
|
||||
@xref{Interface, ,Parser C-Language Interface}.
|
||||
The @var{additional C code} section is copied verbatim to the end of the
|
||||
parser file, just as the @var{C declarations} section is copied to the
|
||||
beginning. This is the most convenient place to put anything that you
|
||||
want to have in the parser file but which need not come before the
|
||||
definition of @code{yyparse}. For example, the definitions of
|
||||
@code{yylex} and @code{yyerror} often go here. @xref{Interface, ,Parser
|
||||
C-Language Interface}.
|
||||
|
||||
If the last section is empty, you may omit the @samp{%%} that separates it
|
||||
from the grammar rules.
|
||||
@@ -2064,7 +2063,7 @@ from the grammar rules.
|
||||
The Bison parser itself contains many static variables whose names start
|
||||
with @samp{yy} and many macros whose names start with @samp{YY}. It is a
|
||||
good idea to avoid using any such names (except those documented in this
|
||||
manual) in the epilogue of the grammar file.
|
||||
manual) in the additional C code section of the grammar file.
|
||||
|
||||
@node Symbols
|
||||
@section Symbols, Terminal and Nonterminal
|
||||
@@ -2385,8 +2384,8 @@ specify some other type, define @code{YYSTYPE} as a macro, like this:
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
This macro definition must go in the prologue of the grammar file
|
||||
(@pxref{Grammar Outline, ,Outline of a Bison Grammar}).
|
||||
This macro definition must go in the C declarations section of the grammar
|
||||
file (@pxref{Grammar Outline, ,Outline of a Bison Grammar}).
|
||||
|
||||
@node Multiple Types
|
||||
@subsection More Than One Value Type
|
||||
@@ -3360,8 +3359,8 @@ functions that it needs to use.
|
||||
|
||||
Keep in mind that the parser uses many C identifiers starting with
|
||||
@samp{yy} and @samp{YY} for internal purposes. If you use such an
|
||||
identifier (aside from those in this manual) in an action or in epilogue
|
||||
in the grammar file, you are likely to run into trouble.
|
||||
identifier (aside from those in this manual) in an action or in additional
|
||||
C code in the grammar file, you are likely to run into trouble.
|
||||
|
||||
@menu
|
||||
* Parser Function:: How to call @code{yyparse} and what it returns.
|
||||
@@ -4805,9 +4804,10 @@ Here we assume that @code{yylex} looks at the value of @code{hexflag}; when
|
||||
it is nonzero, all integers are parsed in hexadecimal, and tokens starting
|
||||
with letters are parsed as integers if possible.
|
||||
|
||||
The declaration of @code{hexflag} shown in the prologue of the parser file
|
||||
is needed to make it accessible to the actions (@pxref{Prologue, ,The Prologue}).
|
||||
You must also write the code in @code{yylex} to obey the flag.
|
||||
The declaration of @code{hexflag} shown in the C declarations section of
|
||||
the parser file is needed to make it accessible to the actions
|
||||
(@pxref{C Declarations, ,The C Declarations Section}). You must also write the code in @code{yylex}
|
||||
to obey the flag.
|
||||
|
||||
@node Tie-in Recovery
|
||||
@section Lexical Tie-ins and Error Recovery
|
||||
@@ -4875,14 +4875,15 @@ If a Bison grammar compiles properly but doesn't do what you want when it
|
||||
runs, the @code{yydebug} parser-trace feature can help you figure out why.
|
||||
|
||||
To enable compilation of trace facilities, you must define the macro
|
||||
@code{YYDEBUG} when you compile the parser. You could use @samp{-DYYDEBUG=1}
|
||||
as a compiler option or you could put @samp{#define YYDEBUG 1} in the prologue
|
||||
of the grammar file (@pxref{Prologue, , The Prologue}). Alternatively, use the
|
||||
@samp{-t} option when you run Bison (@pxref{Invocation, ,Invoking Bison}).
|
||||
We always define @code{YYDEBUG} so that debugging is always possible.
|
||||
@code{YYDEBUG} when you compile the parser. You could use
|
||||
@samp{-DYYDEBUG=1} as a compiler option or you could put @samp{#define
|
||||
YYDEBUG 1} in the C declarations section of the grammar file
|
||||
(@pxref{C Declarations, ,The C Declarations Section}). Alternatively, use the @samp{-t} option when
|
||||
you run Bison (@pxref{Invocation, ,Invoking Bison}). We always define @code{YYDEBUG} so that
|
||||
debugging is always possible.
|
||||
|
||||
The trace facility uses @code{stderr}, so you must add
|
||||
@w{@code{#include <stdio.h>}} to the prologue unless it is already there.
|
||||
The trace facility uses @code{stderr}, so you must add @w{@code{#include
|
||||
<stdio.h>}} to the C declarations section unless it is already there.
|
||||
|
||||
Once you have compiled the program with trace facilities, the way to
|
||||
request a trace is to store a nonzero value in the variable @code{yydebug}.
|
||||
@@ -5090,7 +5091,7 @@ the grammar and the semantic value type @code{YYSTYPE}, as well as a few
|
||||
@code{extern} variable declarations. @xref{Decl Summary}.
|
||||
|
||||
@item --defines=@var{defines-file}
|
||||
The behaviour of @var{--defines} is the same than @samp{-d}. The only
|
||||
The behaviour of @var{--defines} is the same than @samp{-d}. The only
|
||||
difference is that it has an optionnal argument which is the name of
|
||||
the output filename.
|
||||
|
||||
@@ -5118,7 +5119,7 @@ Bison. If the grammar file is @file{foo.y}, the VCG output file will
|
||||
be @file{foo.vcg}.
|
||||
|
||||
@item --graph=@var{graph-file}
|
||||
The behaviour of @var{--graph} is the same than @samp{-g}. The only
|
||||
The behaviour of @var{--graph} is the same than @samp{-g}. The only
|
||||
difference is that it has an optionnal argument which is the name of
|
||||
the output graph filename.
|
||||
@end table
|
||||
@@ -5416,13 +5417,13 @@ These are the punctuation and delimiters used in Bison input:
|
||||
@table @samp
|
||||
@item %%
|
||||
Delimiter used to separate the grammar rule section from the
|
||||
Bison declarations section or the epilogue.
|
||||
Bison declarations section or the additional C code section.
|
||||
@xref{Grammar Layout, ,The Overall Layout of a Bison Grammar}.
|
||||
|
||||
@item %@{ %@}
|
||||
All code listed between @samp{%@{} and @samp{%@}} is copied directly to
|
||||
the output file uninterpreted. Such code forms the prologue of the input
|
||||
file. @xref{Grammar Outline, ,Outline of a Bison
|
||||
the output file uninterpreted. Such code forms the ``C declarations''
|
||||
section of the input file. @xref{Grammar Outline, ,Outline of a Bison
|
||||
Grammar}.
|
||||
|
||||
@item /*@dots{}*/
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
@set UPDATED 20 September 2001
|
||||
@set UPDATED-MONTH September 2001
|
||||
@set EDITION 1.29b
|
||||
@set VERSION 1.29b
|
||||
@@ -0,0 +1,4 @@
|
||||
@set UPDATED 20 September 2001
|
||||
@set UPDATED-MONTH September 2001
|
||||
@set EDITION 1.29b
|
||||
@set VERSION 1.29b
|
||||
@@ -0,0 +1,4 @@
|
||||
2001-07-24 GNU <[email protected]>
|
||||
|
||||
* Version 0.10.39 released.
|
||||
|
||||
@@ -0,0 +1,312 @@
|
||||
# Makefile for directory with message catalog handling in GNU NLS Utilities.
|
||||
# Copyright (C) 1995-1998, 2000, 2001 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.
|
||||
|
||||
PACKAGE = @PACKAGE@
|
||||
VERSION = @VERSION@
|
||||
|
||||
SHELL = /bin/sh
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
top_builddir = ..
|
||||
VPATH = @srcdir@
|
||||
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
transform = @program_transform_name@
|
||||
libdir = @libdir@
|
||||
includedir = @includedir@
|
||||
datadir = @datadir@
|
||||
localedir = $(datadir)/locale
|
||||
gettextsrcdir = $(datadir)/gettext/intl
|
||||
aliaspath = $(localedir)
|
||||
subdir = intl
|
||||
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
MKINSTALLDIRS = @MKINSTALLDIRS@
|
||||
mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac`
|
||||
|
||||
l = @INTL_LIBTOOL_SUFFIX_PREFIX@
|
||||
|
||||
AR = ar
|
||||
CC = @CC@
|
||||
LIBTOOL = @LIBTOOL@
|
||||
RANLIB = @RANLIB@
|
||||
YACC = @INTLBISON@ -y -d
|
||||
YFLAGS = --name-prefix=__gettext
|
||||
|
||||
DEFS = -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \
|
||||
-DLIBDIR=\"$(libdir)\" @DEFS@
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
CFLAGS = @CFLAGS@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
|
||||
COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
|
||||
|
||||
HEADERS = $(COMHDRS) libgnuintl.h libgettext.h loadinfo.h
|
||||
COMHDRS = gettext.h gettextP.h hash-string.h
|
||||
SOURCES = $(COMSRCS) intl-compat.c
|
||||
COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \
|
||||
finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \
|
||||
explodename.c dcigettext.c dcngettext.c dngettext.c ngettext.c plural.y \
|
||||
localcharset.c
|
||||
OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \
|
||||
finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \
|
||||
explodename.$lo dcigettext.$lo dcngettext.$lo dngettext.$lo ngettext.$lo \
|
||||
plural.$lo localcharset.$lo
|
||||
GETTOBJS = intl-compat.$lo
|
||||
DISTFILES.common = Makefile.in \
|
||||
config.charset locale.alias ref-add.sin ref-del.sin $(HEADERS) $(SOURCES)
|
||||
DISTFILES.generated = plural.c
|
||||
DISTFILES.normal = VERSION
|
||||
DISTFILES.gettext = libintl.glibc
|
||||
DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c
|
||||
|
||||
# Libtool's library version information for libintl.
|
||||
# Before making a gettext release, the gettext maintainer must change this
|
||||
# according to the libtool documentation, section "Library interface versions".
|
||||
# Maintainers of other packages that include the intl directory must *not*
|
||||
# change these values.
|
||||
LTV_CURRENT=1
|
||||
LTV_REVISION=1
|
||||
LTV_AGE=0
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .y .o .lo .sin .sed
|
||||
.c.o:
|
||||
$(COMPILE) $<
|
||||
.c.lo:
|
||||
$(LIBTOOL) --mode=compile $(COMPILE) $<
|
||||
|
||||
.y.c:
|
||||
$(YACC) $(YFLAGS) --output $@ $<
|
||||
rm -f $*.h
|
||||
|
||||
.sin.sed:
|
||||
sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $< > t-$@
|
||||
mv t-$@ $@
|
||||
|
||||
INCLUDES = -I.. -I. -I$(top_srcdir)/intl
|
||||
|
||||
all: all-@USE_INCLUDED_LIBINTL@
|
||||
all-yes: libintl.$la libintl.h charset.alias ref-add.sed ref-del.sed
|
||||
all-no: all-no-@BUILD_INCLUDED_LIBINTL@
|
||||
all-no-yes: libgnuintl.$la
|
||||
all-no-no:
|
||||
|
||||
libintl.a libgnuintl.a: $(OBJECTS)
|
||||
rm -f $@
|
||||
$(AR) cru $@ $(OBJECTS)
|
||||
$(RANLIB) $@
|
||||
|
||||
libintl.la libgnuintl.la: $(OBJECTS)
|
||||
$(LIBTOOL) --mode=link \
|
||||
$(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \
|
||||
$(OBJECTS) @LIBICONV@ \
|
||||
-version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \
|
||||
-rpath $(libdir) \
|
||||
-no-undefined
|
||||
|
||||
libintl.h: libgnuintl.h
|
||||
cp $(srcdir)/libgnuintl.h libintl.h
|
||||
|
||||
charset.alias: config.charset
|
||||
$(SHELL) $(srcdir)/config.charset '@host@' > t-$@
|
||||
mv t-$@ $@
|
||||
|
||||
check: all
|
||||
|
||||
# This installation goal is only used in GNU gettext. Packages which
|
||||
# only use the library should use install instead.
|
||||
|
||||
# We must not install the libintl.h/libintl.a files if we are on a
|
||||
# system which has the GNU gettext() function in its C library or in a
|
||||
# separate library.
|
||||
# If you want to use the one which comes with this version of the
|
||||
# package, you have to use `configure --with-included-gettext'.
|
||||
install: install-exec install-data
|
||||
install-exec: all
|
||||
if test "$(PACKAGE)" = "gettext" \
|
||||
&& test '@INTLOBJS@' = '$(GETTOBJS)'; then \
|
||||
$(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
|
||||
$(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \
|
||||
$(LIBTOOL) --mode=install \
|
||||
$(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \
|
||||
else \
|
||||
: ; \
|
||||
fi
|
||||
if test '@USE_INCLUDED_LIBINTL@' = yes; then \
|
||||
$(mkinstalldirs) $(DESTDIR)$(libdir); \
|
||||
temp=$(DESTDIR)$(libdir)/t-charset.alias; \
|
||||
dest=$(DESTDIR)$(libdir)/charset.alias; \
|
||||
if test -f $(DESTDIR)$(libdir)/charset.alias; then \
|
||||
orig=$(DESTDIR)$(libdir)/charset.alias; \
|
||||
sed -f ref-add.sed $$orig > $$temp; \
|
||||
$(INSTALL_DATA) $$temp $$dest; \
|
||||
rm -f $$temp; \
|
||||
else \
|
||||
if test @GLIBC21@ = no; then \
|
||||
orig=charset.alias; \
|
||||
sed -f ref-add.sed $$orig > $$temp; \
|
||||
$(INSTALL_DATA) $$temp $$dest; \
|
||||
rm -f $$temp; \
|
||||
fi; \
|
||||
fi; \
|
||||
$(mkinstalldirs) $(DESTDIR)$(localedir); \
|
||||
test -f $(DESTDIR)$(localedir)/locale.alias \
|
||||
&& orig=$(DESTDIR)$(localedir)/locale.alias \
|
||||
|| orig=$(srcdir)/locale.alias; \
|
||||
temp=$(DESTDIR)$(localedir)/t-locale.alias; \
|
||||
dest=$(DESTDIR)$(localedir)/locale.alias; \
|
||||
sed -f ref-add.sed $$orig > $$temp; \
|
||||
$(INSTALL_DATA) $$temp $$dest; \
|
||||
rm -f $$temp; \
|
||||
else \
|
||||
: ; \
|
||||
fi
|
||||
install-data: all
|
||||
if test "$(PACKAGE)" = "gettext"; then \
|
||||
$(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
|
||||
$(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \
|
||||
$(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \
|
||||
dists="$(DISTFILES.common)"; \
|
||||
for file in $$dists; do \
|
||||
$(INSTALL_DATA) $(srcdir)/$$file \
|
||||
$(DESTDIR)$(gettextsrcdir)/$$file; \
|
||||
done; \
|
||||
chmod a+x $(DESTDIR)$(gettextsrcdir)/config.charset; \
|
||||
dists="$(DISTFILES.generated)"; \
|
||||
for file in $$dists; do \
|
||||
if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
|
||||
$(INSTALL_DATA) $$dir/$$file \
|
||||
$(DESTDIR)$(gettextsrcdir)/$$file; \
|
||||
done; \
|
||||
dists="$(DISTFILES.obsolete)"; \
|
||||
for file in $$dists; do \
|
||||
rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
|
||||
done; \
|
||||
else \
|
||||
: ; \
|
||||
fi
|
||||
|
||||
# Define this as empty until I found a useful application.
|
||||
installcheck:
|
||||
|
||||
uninstall:
|
||||
if test "$(PACKAGE)" = "gettext" \
|
||||
&& test '@INTLOBJS@' = '$(GETTOBJS)'; then \
|
||||
rm -f $(DESTDIR)$(includedir)/libintl.h; \
|
||||
$(LIBTOOL) --mode=uninstall \
|
||||
rm -f $(DESTDIR)$(libdir)/libintl.$la; \
|
||||
else \
|
||||
: ; \
|
||||
fi
|
||||
if test '@USE_INCLUDED_LIBINTL@' = yes; then \
|
||||
if test -f $(DESTDIR)$(libdir)/charset.alias; then \
|
||||
temp=$(DESTDIR)$(libdir)/t-charset.alias; \
|
||||
dest=$(DESTDIR)$(libdir)/charset.alias; \
|
||||
sed -f ref-del.sed $$dest > $$temp; \
|
||||
if grep '^# Packages using this file: $$' $$temp > /dev/null; then \
|
||||
rm -f $$dest; \
|
||||
else \
|
||||
$(INSTALL_DATA) $$temp $$dest; \
|
||||
fi; \
|
||||
rm -f $$temp; \
|
||||
fi; \
|
||||
if test -f $(DESTDIR)$(localedir)/locale.alias; then \
|
||||
temp=$(DESTDIR)$(localedir)/t-locale.alias; \
|
||||
dest=$(DESTDIR)$(localedir)/locale.alias; \
|
||||
sed -f ref-del.sed $$dest > $$temp; \
|
||||
if grep '^# Packages using this file: $$' $$temp > /dev/null; then \
|
||||
rm -f $$dest; \
|
||||
else \
|
||||
$(INSTALL_DATA) $$temp $$dest; \
|
||||
fi; \
|
||||
rm -f $$temp; \
|
||||
fi; \
|
||||
else \
|
||||
: ; \
|
||||
fi
|
||||
if test "$(PACKAGE)" = "gettext"; then \
|
||||
for file in VERSION ChangeLog $(DISTFILES.common) $(DISTFILES.generated); do \
|
||||
rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
|
||||
done; \
|
||||
else \
|
||||
: ; \
|
||||
fi
|
||||
|
||||
info dvi:
|
||||
|
||||
$(OBJECTS): ../config.h libgnuintl.h
|
||||
bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h
|
||||
dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.h
|
||||
|
||||
tags: TAGS
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES)
|
||||
here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES)
|
||||
|
||||
id: ID
|
||||
|
||||
ID: $(HEADERS) $(SOURCES)
|
||||
here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES)
|
||||
|
||||
|
||||
mostlyclean:
|
||||
rm -f *.a *.la *.o *.lo core core.*
|
||||
rm -f libintl.h charset.alias ref-add.sed ref-del.sed
|
||||
rm -f -r .libs _libs
|
||||
|
||||
clean: mostlyclean
|
||||
|
||||
distclean: clean
|
||||
rm -f Makefile ID TAGS
|
||||
if test "$(PACKAGE)" = gettext; then \
|
||||
rm -f ChangeLog.inst $(DISTFILES.normal); \
|
||||
else \
|
||||
: ; \
|
||||
fi
|
||||
|
||||
maintainer-clean: distclean
|
||||
@echo "This command is intended for maintainers to use;"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
|
||||
|
||||
# GNU gettext needs not contain the file `VERSION' but contains some
|
||||
# other files which should not be distributed in other packages.
|
||||
distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
|
||||
dist distdir: Makefile
|
||||
if test "$(PACKAGE)" = gettext; then \
|
||||
additional="$(DISTFILES.gettext)"; \
|
||||
else \
|
||||
additional="$(DISTFILES.normal)"; \
|
||||
fi; \
|
||||
$(MAKE) $(DISTFILES.common) $(DISTFILES.generated) $$additional; \
|
||||
for file in ChangeLog $(DISTFILES.common) $(DISTFILES.generated) $$additional; do \
|
||||
if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
|
||||
ln $$dir/$$file $(distdir) 2> /dev/null \
|
||||
|| cp -p $$dir/$$file $(distdir); \
|
||||
done
|
||||
|
||||
Makefile: Makefile.in ../config.status
|
||||
cd .. \
|
||||
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make not to export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
||||
@@ -0,0 +1 @@
|
||||
GNU gettext library from gettext-0.10.39
|
||||
@@ -0,0 +1,368 @@
|
||||
/* Implementation of the bindtextdomain(3) function
|
||||
Copyright (C) 1995-1998, 2000, 2001 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. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#ifdef _LIBC
|
||||
# include <libintl.h>
|
||||
#else
|
||||
# include "libgnuintl.h"
|
||||
#endif
|
||||
#include "gettextP.h"
|
||||
|
||||
#ifdef _LIBC
|
||||
/* We have to handle multi-threaded applications. */
|
||||
# include <bits/libc-lock.h>
|
||||
#else
|
||||
/* Provide dummy implementation if this is outside glibc. */
|
||||
# define __libc_rwlock_define(CLASS, NAME)
|
||||
# define __libc_rwlock_wrlock(NAME)
|
||||
# define __libc_rwlock_unlock(NAME)
|
||||
#endif
|
||||
|
||||
/* The internal variables in the standalone libintl.a must have different
|
||||
names than the internal variables in GNU libc, otherwise programs
|
||||
using libintl.a cannot be linked statically. */
|
||||
#if !defined _LIBC
|
||||
# define _nl_default_dirname _nl_default_dirname__
|
||||
# define _nl_domain_bindings _nl_domain_bindings__
|
||||
#endif
|
||||
|
||||
/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>. */
|
||||
#ifndef offsetof
|
||||
# define offsetof(type,ident) ((size_t)&(((type*)0)->ident))
|
||||
#endif
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
/* Contains the default location of the message catalogs. */
|
||||
extern const char _nl_default_dirname[];
|
||||
|
||||
/* List with bindings of specific domains. */
|
||||
extern struct binding *_nl_domain_bindings;
|
||||
|
||||
/* Lock variable to protect the global data in the gettext implementation. */
|
||||
__libc_rwlock_define (extern, _nl_state_lock)
|
||||
|
||||
|
||||
/* Names for the libintl functions are a problem. They must not clash
|
||||
with existing names and they should follow ANSI C. But this source
|
||||
code is also used in GNU C Library where the names have a __
|
||||
prefix. So we have to make a difference here. */
|
||||
#ifdef _LIBC
|
||||
# define BINDTEXTDOMAIN __bindtextdomain
|
||||
# define BIND_TEXTDOMAIN_CODESET __bind_textdomain_codeset
|
||||
# ifndef strdup
|
||||
# define strdup(str) __strdup (str)
|
||||
# endif
|
||||
#else
|
||||
# define BINDTEXTDOMAIN bindtextdomain__
|
||||
# define BIND_TEXTDOMAIN_CODESET bind_textdomain_codeset__
|
||||
#endif
|
||||
|
||||
/* Prototypes for local functions. */
|
||||
static void set_binding_values PARAMS ((const char *domainname,
|
||||
const char **dirnamep,
|
||||
const char **codesetp));
|
||||
|
||||
/* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP
|
||||
to be used for the DOMAINNAME message catalog.
|
||||
If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not
|
||||
modified, only the current value is returned.
|
||||
If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither
|
||||
modified nor returned. */
|
||||
static void
|
||||
set_binding_values (domainname, dirnamep, codesetp)
|
||||
const char *domainname;
|
||||
const char **dirnamep;
|
||||
const char **codesetp;
|
||||
{
|
||||
struct binding *binding;
|
||||
int modified;
|
||||
|
||||
/* Some sanity checks. */
|
||||
if (domainname == NULL || domainname[0] == '\0')
|
||||
{
|
||||
if (dirnamep)
|
||||
*dirnamep = NULL;
|
||||
if (codesetp)
|
||||
*codesetp = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
__libc_rwlock_wrlock (_nl_state_lock);
|
||||
|
||||
modified = 0;
|
||||
|
||||
for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
|
||||
{
|
||||
int compare = strcmp (domainname, binding->domainname);
|
||||
if (compare == 0)
|
||||
/* We found it! */
|
||||
break;
|
||||
if (compare < 0)
|
||||
{
|
||||
/* It is not in the list. */
|
||||
binding = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (binding != NULL)
|
||||
{
|
||||
if (dirnamep)
|
||||
{
|
||||
const char *dirname = *dirnamep;
|
||||
|
||||
if (dirname == NULL)
|
||||
/* The current binding has be to returned. */
|
||||
*dirnamep = binding->dirname;
|
||||
else
|
||||
{
|
||||
/* The domain is already bound. If the new value and the old
|
||||
one are equal we simply do nothing. Otherwise replace the
|
||||
old binding. */
|
||||
char *result = binding->dirname;
|
||||
if (strcmp (dirname, result) != 0)
|
||||
{
|
||||
if (strcmp (dirname, _nl_default_dirname) == 0)
|
||||
result = (char *) _nl_default_dirname;
|
||||
else
|
||||
{
|
||||
#if defined _LIBC || defined HAVE_STRDUP
|
||||
result = strdup (dirname);
|
||||
#else
|
||||
size_t len = strlen (dirname) + 1;
|
||||
result = (char *) malloc (len);
|
||||
if (__builtin_expect (result != NULL, 1))
|
||||
memcpy (result, dirname, len);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (__builtin_expect (result != NULL, 1))
|
||||
{
|
||||
if (binding->dirname != _nl_default_dirname)
|
||||
free (binding->dirname);
|
||||
|
||||
binding->dirname = result;
|
||||
modified = 1;
|
||||
}
|
||||
}
|
||||
*dirnamep = result;
|
||||
}
|
||||
}
|
||||
|
||||
if (codesetp)
|
||||
{
|
||||
const char *codeset = *codesetp;
|
||||
|
||||
if (codeset == NULL)
|
||||
/* The current binding has be to returned. */
|
||||
*codesetp = binding->codeset;
|
||||
else
|
||||
{
|
||||
/* The domain is already bound. If the new value and the old
|
||||
one are equal we simply do nothing. Otherwise replace the
|
||||
old binding. */
|
||||
char *result = binding->codeset;
|
||||
if (result == NULL || strcmp (codeset, result) != 0)
|
||||
{
|
||||
#if defined _LIBC || defined HAVE_STRDUP
|
||||
result = strdup (codeset);
|
||||
#else
|
||||
size_t len = strlen (codeset) + 1;
|
||||
result = (char *) malloc (len);
|
||||
if (__builtin_expect (result != NULL, 1))
|
||||
memcpy (result, codeset, len);
|
||||
#endif
|
||||
|
||||
if (__builtin_expect (result != NULL, 1))
|
||||
{
|
||||
if (binding->codeset != NULL)
|
||||
free (binding->codeset);
|
||||
|
||||
binding->codeset = result;
|
||||
binding->codeset_cntr++;
|
||||
modified = 1;
|
||||
}
|
||||
}
|
||||
*codesetp = result;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ((dirnamep == NULL || *dirnamep == NULL)
|
||||
&& (codesetp == NULL || *codesetp == NULL))
|
||||
{
|
||||
/* Simply return the default values. */
|
||||
if (dirnamep)
|
||||
*dirnamep = _nl_default_dirname;
|
||||
if (codesetp)
|
||||
*codesetp = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We have to create a new binding. */
|
||||
size_t len = strlen (domainname) + 1;
|
||||
struct binding *new_binding =
|
||||
(struct binding *) malloc (offsetof (struct binding, domainname) + len);
|
||||
|
||||
if (__builtin_expect (new_binding == NULL, 0))
|
||||
goto failed;
|
||||
|
||||
memcpy (new_binding->domainname, domainname, len);
|
||||
|
||||
if (dirnamep)
|
||||
{
|
||||
const char *dirname = *dirnamep;
|
||||
|
||||
if (dirname == NULL)
|
||||
/* The default value. */
|
||||
dirname = _nl_default_dirname;
|
||||
else
|
||||
{
|
||||
if (strcmp (dirname, _nl_default_dirname) == 0)
|
||||
dirname = _nl_default_dirname;
|
||||
else
|
||||
{
|
||||
char *result;
|
||||
#if defined _LIBC || defined HAVE_STRDUP
|
||||
result = strdup (dirname);
|
||||
if (__builtin_expect (result == NULL, 0))
|
||||
goto failed_dirname;
|
||||
#else
|
||||
size_t len = strlen (dirname) + 1;
|
||||
result = (char *) malloc (len);
|
||||
if (__builtin_expect (result == NULL, 0))
|
||||
goto failed_dirname;
|
||||
memcpy (result, dirname, len);
|
||||
#endif
|
||||
dirname = result;
|
||||
}
|
||||
}
|
||||
*dirnamep = dirname;
|
||||
new_binding->dirname = (char *) dirname;
|
||||
}
|
||||
else
|
||||
/* The default value. */
|
||||
new_binding->dirname = (char *) _nl_default_dirname;
|
||||
|
||||
new_binding->codeset_cntr = 0;
|
||||
|
||||
if (codesetp)
|
||||
{
|
||||
const char *codeset = *codesetp;
|
||||
|
||||
if (codeset != NULL)
|
||||
{
|
||||
char *result;
|
||||
|
||||
#if defined _LIBC || defined HAVE_STRDUP
|
||||
result = strdup (codeset);
|
||||
if (__builtin_expect (result == NULL, 0))
|
||||
goto failed_codeset;
|
||||
#else
|
||||
size_t len = strlen (codeset) + 1;
|
||||
result = (char *) malloc (len);
|
||||
if (__builtin_expect (result == NULL, 0))
|
||||
goto failed_codeset;
|
||||
memcpy (result, codeset, len);
|
||||
#endif
|
||||
codeset = result;
|
||||
new_binding->codeset_cntr++;
|
||||
}
|
||||
*codesetp = codeset;
|
||||
new_binding->codeset = (char *) codeset;
|
||||
}
|
||||
else
|
||||
new_binding->codeset = NULL;
|
||||
|
||||
/* Now enqueue it. */
|
||||
if (_nl_domain_bindings == NULL
|
||||
|| strcmp (domainname, _nl_domain_bindings->domainname) < 0)
|
||||
{
|
||||
new_binding->next = _nl_domain_bindings;
|
||||
_nl_domain_bindings = new_binding;
|
||||
}
|
||||
else
|
||||
{
|
||||
binding = _nl_domain_bindings;
|
||||
while (binding->next != NULL
|
||||
&& strcmp (domainname, binding->next->domainname) > 0)
|
||||
binding = binding->next;
|
||||
|
||||
new_binding->next = binding->next;
|
||||
binding->next = new_binding;
|
||||
}
|
||||
|
||||
modified = 1;
|
||||
|
||||
/* Here we deal with memory allocation failures. */
|
||||
if (0)
|
||||
{
|
||||
failed_codeset:
|
||||
if (new_binding->dirname != _nl_default_dirname)
|
||||
free (new_binding->dirname);
|
||||
failed_dirname:
|
||||
free (new_binding);
|
||||
failed:
|
||||
if (dirnamep)
|
||||
*dirnamep = NULL;
|
||||
if (codesetp)
|
||||
*codesetp = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* If we modified any binding, we flush the caches. */
|
||||
if (modified)
|
||||
++_nl_msg_cat_cntr;
|
||||
|
||||
__libc_rwlock_unlock (_nl_state_lock);
|
||||
}
|
||||
|
||||
/* Specify that the DOMAINNAME message catalog will be found
|
||||
in DIRNAME rather than in the system locale data base. */
|
||||
char *
|
||||
BINDTEXTDOMAIN (domainname, dirname)
|
||||
const char *domainname;
|
||||
const char *dirname;
|
||||
{
|
||||
set_binding_values (domainname, &dirname, NULL);
|
||||
return (char *) dirname;
|
||||
}
|
||||
|
||||
/* Specify the character encoding in which the messages from the
|
||||
DOMAINNAME message catalog will be returned. */
|
||||
char *
|
||||
BIND_TEXTDOMAIN_CODESET (domainname, codeset)
|
||||
const char *domainname;
|
||||
const char *codeset;
|
||||
{
|
||||
set_binding_values (domainname, NULL, &codeset);
|
||||
return (char *) codeset;
|
||||
}
|
||||
|
||||
#ifdef _LIBC
|
||||
/* Aliases for function names in GNU C Library. */
|
||||
weak_alias (__bindtextdomain, bindtextdomain);
|
||||
weak_alias (__bind_textdomain_codeset, bind_textdomain_codeset);
|
||||
#endif
|
||||
Executable
+438
@@ -0,0 +1,438 @@
|
||||
#! /bin/sh
|
||||
# Output a system dependent table of character encoding aliases.
|
||||
#
|
||||
# Copyright (C) 2000-2001 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Library 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
|
||||
# Library General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Library 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.
|
||||
#
|
||||
# The table consists of lines of the form
|
||||
# ALIAS CANONICAL
|
||||
#
|
||||
# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)".
|
||||
# ALIAS is compared in a case sensitive way.
|
||||
#
|
||||
# CANONICAL is the GNU canonical name for this character encoding.
|
||||
# It must be an encoding supported by libiconv. Support by GNU libc is
|
||||
# also desirable. CANONICAL is case insensitive. Usually an upper case
|
||||
# MIME charset name is preferred.
|
||||
# The current list of GNU canonical charset names is as follows.
|
||||
#
|
||||
# name used by which systems a MIME name?
|
||||
# ASCII, ANSI_X3.4-1968 glibc solaris freebsd
|
||||
# ISO-8859-1 glibc aix hpux irix osf solaris freebsd yes
|
||||
# ISO-8859-2 glibc aix hpux irix osf solaris freebsd yes
|
||||
# ISO-8859-3 glibc yes
|
||||
# ISO-8859-4 osf solaris freebsd yes
|
||||
# ISO-8859-5 glibc aix hpux irix osf solaris freebsd yes
|
||||
# ISO-8859-6 glibc aix hpux solaris yes
|
||||
# ISO-8859-7 glibc aix hpux irix osf solaris yes
|
||||
# ISO-8859-8 glibc aix hpux osf solaris yes
|
||||
# ISO-8859-9 glibc aix hpux irix osf solaris yes
|
||||
# ISO-8859-13 glibc
|
||||
# ISO-8859-15 glibc aix osf solaris freebsd
|
||||
# KOI8-R glibc solaris freebsd yes
|
||||
# KOI8-U glibc freebsd yes
|
||||
# CP437 dos
|
||||
# CP775 dos
|
||||
# CP850 aix osf dos
|
||||
# CP852 dos
|
||||
# CP855 dos
|
||||
# CP856 aix
|
||||
# CP857 dos
|
||||
# CP861 dos
|
||||
# CP862 dos
|
||||
# CP864 dos
|
||||
# CP865 dos
|
||||
# CP866 freebsd dos
|
||||
# CP869 dos
|
||||
# CP874 win32 dos
|
||||
# CP922 aix
|
||||
# CP932 aix win32 dos
|
||||
# CP943 aix
|
||||
# CP949 osf win32 dos
|
||||
# CP950 win32 dos
|
||||
# CP1046 aix
|
||||
# CP1124 aix
|
||||
# CP1129 aix
|
||||
# CP1250 win32
|
||||
# CP1251 glibc win32
|
||||
# CP1252 aix win32
|
||||
# CP1253 win32
|
||||
# CP1254 win32
|
||||
# CP1255 win32
|
||||
# CP1256 win32
|
||||
# CP1257 win32
|
||||
# GB2312 glibc aix hpux irix solaris freebsd yes
|
||||
# EUC-JP glibc aix hpux irix osf solaris freebsd yes
|
||||
# EUC-KR glibc aix hpux irix osf solaris freebsd yes
|
||||
# EUC-TW glibc aix hpux irix osf solaris
|
||||
# BIG5 glibc aix hpux osf solaris freebsd yes
|
||||
# BIG5-HKSCS glibc
|
||||
# GBK aix osf win32 dos
|
||||
# GB18030 glibc
|
||||
# SHIFT_JIS hpux osf solaris freebsd yes
|
||||
# JOHAB glibc win32
|
||||
# TIS-620 glibc aix hpux osf solaris
|
||||
# VISCII glibc yes
|
||||
# HP-ROMAN8 hpux
|
||||
# HP-ARABIC8 hpux
|
||||
# HP-GREEK8 hpux
|
||||
# HP-HEBREW8 hpux
|
||||
# HP-TURKISH8 hpux
|
||||
# HP-KANA8 hpux
|
||||
# DEC-KANJI osf
|
||||
# DEC-HANYU osf
|
||||
# UTF-8 glibc aix hpux osf solaris yes
|
||||
#
|
||||
# Note: Names which are not marked as being a MIME name should not be used in
|
||||
# Internet protocols for information interchange (mail, news, etc.).
|
||||
#
|
||||
# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications
|
||||
# must understand both names and treat them as equivalent.
|
||||
#
|
||||
# The first argument passed to this file is the canonical host specification,
|
||||
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
|
||||
# or
|
||||
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
|
||||
|
||||
host="$1"
|
||||
os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'`
|
||||
echo "# This file contains a table of character encoding aliases,"
|
||||
echo "# suitable for operating system '${os}'."
|
||||
echo "# It was automatically generated from config.charset."
|
||||
# List of references, updated during installation:
|
||||
echo "# Packages using this file: "
|
||||
case "$os" in
|
||||
linux* | *-gnu*)
|
||||
# With glibc-2.1 or newer, we don't need any canonicalization,
|
||||
# because glibc has iconv and both glibc and libiconv support all
|
||||
# GNU canonical names directly. Therefore, the Makefile does not
|
||||
# need to install the alias file at all.
|
||||
# The following applies only to glibc-2.0.x and older libcs.
|
||||
echo "ISO_646.IRV:1983 ASCII"
|
||||
;;
|
||||
aix*)
|
||||
echo "ISO8859-1 ISO-8859-1"
|
||||
echo "ISO8859-2 ISO-8859-2"
|
||||
echo "ISO8859-5 ISO-8859-5"
|
||||
echo "ISO8859-6 ISO-8859-6"
|
||||
echo "ISO8859-7 ISO-8859-7"
|
||||
echo "ISO8859-8 ISO-8859-8"
|
||||
echo "ISO8859-9 ISO-8859-9"
|
||||
echo "ISO8859-15 ISO-8859-15"
|
||||
echo "IBM-850 CP850"
|
||||
echo "IBM-856 CP856"
|
||||
echo "IBM-921 ISO-8859-13"
|
||||
echo "IBM-922 CP922"
|
||||
echo "IBM-932 CP932"
|
||||
echo "IBM-943 CP943"
|
||||
echo "IBM-1046 CP1046"
|
||||
echo "IBM-1124 CP1124"
|
||||
echo "IBM-1129 CP1129"
|
||||
echo "IBM-1252 CP1252"
|
||||
echo "IBM-eucCN GB2312"
|
||||
echo "IBM-eucJP EUC-JP"
|
||||
echo "IBM-eucKR EUC-KR"
|
||||
echo "IBM-eucTW EUC-TW"
|
||||
echo "big5 BIG5"
|
||||
echo "GBK GBK"
|
||||
echo "TIS-620 TIS-620"
|
||||
echo "UTF-8 UTF-8"
|
||||
;;
|
||||
hpux*)
|
||||
echo "iso88591 ISO-8859-1"
|
||||
echo "iso88592 ISO-8859-2"
|
||||
echo "iso88595 ISO-8859-5"
|
||||
echo "iso88596 ISO-8859-6"
|
||||
echo "iso88597 ISO-8859-7"
|
||||
echo "iso88598 ISO-8859-8"
|
||||
echo "iso88599 ISO-8859-9"
|
||||
echo "iso885915 ISO-8859-15"
|
||||
echo "roman8 HP-ROMAN8"
|
||||
echo "arabic8 HP-ARABIC8"
|
||||
echo "greek8 HP-GREEK8"
|
||||
echo "hebrew8 HP-HEBREW8"
|
||||
echo "turkish8 HP-TURKISH8"
|
||||
echo "kana8 HP-KANA8"
|
||||
echo "tis620 TIS-620"
|
||||
echo "big5 BIG5"
|
||||
echo "eucJP EUC-JP"
|
||||
echo "eucKR EUC-KR"
|
||||
echo "eucTW EUC-TW"
|
||||
echo "hp15CN GB2312"
|
||||
#echo "ccdc ?" # what is this?
|
||||
echo "SJIS SHIFT_JIS"
|
||||
echo "utf8 UTF-8"
|
||||
;;
|
||||
irix*)
|
||||
echo "ISO8859-1 ISO-8859-1"
|
||||
echo "ISO8859-2 ISO-8859-2"
|
||||
echo "ISO8859-5 ISO-8859-5"
|
||||
echo "ISO8859-7 ISO-8859-7"
|
||||
echo "ISO8859-9 ISO-8859-9"
|
||||
echo "eucCN GB2312"
|
||||
echo "eucJP EUC-JP"
|
||||
echo "eucKR EUC-KR"
|
||||
echo "eucTW EUC-TW"
|
||||
;;
|
||||
osf*)
|
||||
echo "ISO8859-1 ISO-8859-1"
|
||||
echo "ISO8859-2 ISO-8859-2"
|
||||
echo "ISO8859-4 ISO-8859-4"
|
||||
echo "ISO8859-5 ISO-8859-5"
|
||||
echo "ISO8859-7 ISO-8859-7"
|
||||
echo "ISO8859-8 ISO-8859-8"
|
||||
echo "ISO8859-9 ISO-8859-9"
|
||||
echo "ISO8859-15 ISO-8859-15"
|
||||
echo "cp850 CP850"
|
||||
echo "big5 BIG5"
|
||||
echo "dechanyu DEC-HANYU"
|
||||
echo "dechanzi GB2312"
|
||||
echo "deckanji DEC-KANJI"
|
||||
echo "deckorean EUC-KR"
|
||||
echo "eucJP EUC-JP"
|
||||
echo "eucKR EUC-KR"
|
||||
echo "eucTW EUC-TW"
|
||||
echo "GBK GBK"
|
||||
echo "KSC5601 CP949"
|
||||
echo "sdeckanji EUC-JP"
|
||||
echo "SJIS SHIFT_JIS"
|
||||
echo "TACTIS TIS-620"
|
||||
echo "UTF-8 UTF-8"
|
||||
;;
|
||||
solaris*)
|
||||
echo "646 ASCII"
|
||||
echo "ISO8859-1 ISO-8859-1"
|
||||
echo "ISO8859-2 ISO-8859-2"
|
||||
echo "ISO8859-4 ISO-8859-4"
|
||||
echo "ISO8859-5 ISO-8859-5"
|
||||
echo "ISO8859-6 ISO-8859-6"
|
||||
echo "ISO8859-7 ISO-8859-7"
|
||||
echo "ISO8859-8 ISO-8859-8"
|
||||
echo "ISO8859-9 ISO-8859-9"
|
||||
echo "ISO8859-15 ISO-8859-15"
|
||||
echo "koi8-r KOI8-R"
|
||||
echo "BIG5 BIG5"
|
||||
echo "gb2312 GB2312"
|
||||
echo "cns11643 EUC-TW"
|
||||
echo "5601 EUC-KR"
|
||||
echo "eucJP EUC-JP"
|
||||
echo "PCK SHIFT_JIS"
|
||||
echo "TIS620.2533 TIS-620"
|
||||
#echo "sun_eu_greek ?" # what is this?
|
||||
echo "UTF-8 UTF-8"
|
||||
;;
|
||||
freebsd*)
|
||||
# FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
|
||||
# localcharset.c falls back to using the full locale name
|
||||
# from the environment variables.
|
||||
echo "C ASCII"
|
||||
echo "US-ASCII ASCII"
|
||||
for l in la_LN lt_LN; do
|
||||
echo "$l.ASCII ASCII"
|
||||
done
|
||||
for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
|
||||
fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \
|
||||
lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do
|
||||
echo "$l.ISO_8859-1 ISO-8859-1"
|
||||
echo "$l.DIS_8859-15 ISO-8859-15"
|
||||
done
|
||||
for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do
|
||||
echo "$l.ISO_8859-2 ISO-8859-2"
|
||||
done
|
||||
for l in la_LN lt_LT; do
|
||||
echo "$l.ISO_8859-4 ISO-8859-4"
|
||||
done
|
||||
for l in ru_RU ru_SU; do
|
||||
echo "$l.KOI8-R KOI8-R"
|
||||
echo "$l.ISO_8859-5 ISO-8859-5"
|
||||
echo "$l.CP866 CP866"
|
||||
done
|
||||
echo "uk_UA.KOI8-U KOI8-U"
|
||||
echo "zh_TW.BIG5 BIG5"
|
||||
echo "zh_TW.Big5 BIG5"
|
||||
echo "zh_CN.EUC GB2312"
|
||||
echo "ja_JP.EUC EUC-JP"
|
||||
echo "ja_JP.SJIS SHIFT_JIS"
|
||||
echo "ja_JP.Shift_JIS SHIFT_JIS"
|
||||
echo "ko_KR.EUC EUC-KR"
|
||||
;;
|
||||
beos*)
|
||||
# BeOS has a single locale, and it has UTF-8 encoding.
|
||||
echo "* UTF-8"
|
||||
;;
|
||||
msdosdjgpp*)
|
||||
# DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore
|
||||
# localcharset.c falls back to using the full locale name
|
||||
# from the environment variables.
|
||||
echo "#"
|
||||
echo "# The encodings given here may not all be correct."
|
||||
echo "# If you find that the encoding given for your language and"
|
||||
echo "# country is not the one your DOS machine actually uses, just"
|
||||
echo "# correct it in this file, and send a mail to"
|
||||
echo "# Juan Manuel Guerrero <[email protected]>"
|
||||
echo "# and Bruno Haible <[email protected]>."
|
||||
echo "#"
|
||||
echo "C ASCII"
|
||||
# ISO-8859-1 languages
|
||||
echo "ca CP850"
|
||||
echo "ca_ES CP850"
|
||||
echo "da CP865" # not CP850 ??
|
||||
echo "da_DK CP865" # not CP850 ??
|
||||
echo "de CP850"
|
||||
echo "de_AT CP850"
|
||||
echo "de_CH CP850"
|
||||
echo "de_DE CP850"
|
||||
echo "en CP850"
|
||||
echo "en_AU CP850" # not CP437 ??
|
||||
echo "en_CA CP850"
|
||||
echo "en_GB CP850"
|
||||
echo "en_NZ CP437"
|
||||
echo "en_US CP437"
|
||||
echo "en_ZA CP850" # not CP437 ??
|
||||
echo "es CP850"
|
||||
echo "es_AR CP850"
|
||||
echo "es_BO CP850"
|
||||
echo "es_CL CP850"
|
||||
echo "es_CO CP850"
|
||||
echo "es_CR CP850"
|
||||
echo "es_CU CP850"
|
||||
echo "es_DO CP850"
|
||||
echo "es_EC CP850"
|
||||
echo "es_ES CP850"
|
||||
echo "es_GT CP850"
|
||||
echo "es_HN CP850"
|
||||
echo "es_MX CP850"
|
||||
echo "es_NI CP850"
|
||||
echo "es_PA CP850"
|
||||
echo "es_PY CP850"
|
||||
echo "es_PE CP850"
|
||||
echo "es_SV CP850"
|
||||
echo "es_UY CP850"
|
||||
echo "es_VE CP850"
|
||||
echo "et CP850"
|
||||
echo "et_EE CP850"
|
||||
echo "eu CP850"
|
||||
echo "eu_ES CP850"
|
||||
echo "fi CP850"
|
||||
echo "fi_FI CP850"
|
||||
echo "fr CP850"
|
||||
echo "fr_BE CP850"
|
||||
echo "fr_CA CP850"
|
||||
echo "fr_CH CP850"
|
||||
echo "fr_FR CP850"
|
||||
echo "ga CP850"
|
||||
echo "ga_IE CP850"
|
||||
echo "gd CP850"
|
||||
echo "gd_GB CP850"
|
||||
echo "gl CP850"
|
||||
echo "gl_ES CP850"
|
||||
echo "id CP850" # not CP437 ??
|
||||
echo "id_ID CP850" # not CP437 ??
|
||||
echo "is CP861" # not CP850 ??
|
||||
echo "is_IS CP861" # not CP850 ??
|
||||
echo "it CP850"
|
||||
echo "it_CH CP850"
|
||||
echo "it_IT CP850"
|
||||
echo "lt CP775"
|
||||
echo "lt_LT CP775"
|
||||
echo "lv CP775"
|
||||
echo "lv_LV CP775"
|
||||
echo "nb CP865" # not CP850 ??
|
||||
echo "nb_NO CP865" # not CP850 ??
|
||||
echo "nl CP850"
|
||||
echo "nl_BE CP850"
|
||||
echo "nl_NL CP850"
|
||||
echo "nn CP865" # not CP850 ??
|
||||
echo "nn_NO CP865" # not CP850 ??
|
||||
echo "no CP865" # not CP850 ??
|
||||
echo "no_NO CP865" # not CP850 ??
|
||||
echo "pt CP850"
|
||||
echo "pt_BR CP850"
|
||||
echo "pt_PT CP850"
|
||||
echo "sv CP850"
|
||||
echo "sv_SE CP850"
|
||||
# ISO-8859-2 languages
|
||||
echo "cs CP852"
|
||||
echo "cs_CZ CP852"
|
||||
echo "hr CP852"
|
||||
echo "hr_HR CP852"
|
||||
echo "hu CP852"
|
||||
echo "hu_HU CP852"
|
||||
echo "pl CP852"
|
||||
echo "pl_PL CP852"
|
||||
echo "ro CP852"
|
||||
echo "ro_RO CP852"
|
||||
echo "sk CP852"
|
||||
echo "sk_SK CP852"
|
||||
echo "sl CP852"
|
||||
echo "sl_SI CP852"
|
||||
echo "sq CP852"
|
||||
echo "sq_AL CP852"
|
||||
echo "sr CP852" # CP852 or CP866 or CP855 ??
|
||||
echo "sr_YU CP852" # CP852 or CP866 or CP855 ??
|
||||
# ISO-8859-3 languages
|
||||
echo "mt CP850"
|
||||
echo "mt_MT CP850"
|
||||
# ISO-8859-5 languages
|
||||
echo "be CP866"
|
||||
echo "be_BE CP866"
|
||||
echo "bg CP866" # not CP855 ??
|
||||
echo "bg_BG CP866" # not CP855 ??
|
||||
echo "mk CP866" # not CP855 ??
|
||||
echo "mk_MK CP866" # not CP855 ??
|
||||
echo "ru KOI8-R" # not CP866 ??
|
||||
echo "ru_RU KOI8-R" # not CP866 ??
|
||||
# ISO-8859-6 languages
|
||||
echo "ar CP864"
|
||||
echo "ar_AE CP864"
|
||||
echo "ar_DZ CP864"
|
||||
echo "ar_EG CP864"
|
||||
echo "ar_IQ CP864"
|
||||
echo "ar_IR CP864"
|
||||
echo "ar_JO CP864"
|
||||
echo "ar_KW CP864"
|
||||
echo "ar_MA CP864"
|
||||
echo "ar_OM CP864"
|
||||
echo "ar_QA CP864"
|
||||
echo "ar_SA CP864"
|
||||
echo "ar_SY CP864"
|
||||
# ISO-8859-7 languages
|
||||
echo "el CP869"
|
||||
echo "el_GR CP869"
|
||||
# ISO-8859-8 languages
|
||||
echo "he CP862"
|
||||
echo "he_IL CP862"
|
||||
# ISO-8859-9 languages
|
||||
echo "tr CP857"
|
||||
echo "tr_TR CP857"
|
||||
# Japanese
|
||||
echo "ja CP932"
|
||||
echo "ja_JP CP932"
|
||||
# Chinese
|
||||
echo "zh_CN GBK"
|
||||
echo "zh_TW CP950" # not CP938 ??
|
||||
# Korean
|
||||
echo "kr CP949" # not CP934 ??
|
||||
echo "kr_KR CP949" # not CP934 ??
|
||||
# Thai
|
||||
echo "th CP874"
|
||||
echo "th_TH CP874"
|
||||
# Other
|
||||
echo "eo CP850"
|
||||
echo "eo_EO CP850"
|
||||
;;
|
||||
esac
|
||||
@@ -0,0 +1,57 @@
|
||||
/* Implementation of the dcgettext(3) function.
|
||||
Copyright (C) 1995-1999, 2000, 2001 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. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include "gettextP.h"
|
||||
#ifdef _LIBC
|
||||
# include <libintl.h>
|
||||
#else
|
||||
# include "libgnuintl.h"
|
||||
#endif
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
/* Names for the libintl functions are a problem. They must not clash
|
||||
with existing names and they should follow ANSI C. But this source
|
||||
code is also used in GNU C Library where the names have a __
|
||||
prefix. So we have to make a difference here. */
|
||||
#ifdef _LIBC
|
||||
# define DCGETTEXT __dcgettext
|
||||
# define DCIGETTEXT __dcigettext
|
||||
#else
|
||||
# define DCGETTEXT dcgettext__
|
||||
# define DCIGETTEXT dcigettext__
|
||||
#endif
|
||||
|
||||
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
|
||||
locale. */
|
||||
char *
|
||||
DCGETTEXT (domainname, msgid, category)
|
||||
const char *domainname;
|
||||
const char *msgid;
|
||||
int category;
|
||||
{
|
||||
return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category);
|
||||
}
|
||||
|
||||
#ifdef _LIBC
|
||||
/* Alias for function name in GNU C Library. */
|
||||
weak_alias (__dcgettext, dcgettext);
|
||||
#endif
|
||||
+1258
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,59 @@
|
||||
/* Implementation of the dcngettext(3) function.
|
||||
Copyright (C) 1995-1999, 2000, 2001 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. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include "gettextP.h"
|
||||
#ifdef _LIBC
|
||||
# include <libintl.h>
|
||||
#else
|
||||
# include "libgnuintl.h"
|
||||
#endif
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
/* Names for the libintl functions are a problem. They must not clash
|
||||
with existing names and they should follow ANSI C. But this source
|
||||
code is also used in GNU C Library where the names have a __
|
||||
prefix. So we have to make a difference here. */
|
||||
#ifdef _LIBC
|
||||
# define DCNGETTEXT __dcngettext
|
||||
# define DCIGETTEXT __dcigettext
|
||||
#else
|
||||
# define DCNGETTEXT dcngettext__
|
||||
# define DCIGETTEXT dcigettext__
|
||||
#endif
|
||||
|
||||
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
|
||||
locale. */
|
||||
char *
|
||||
DCNGETTEXT (domainname, msgid1, msgid2, n, category)
|
||||
const char *domainname;
|
||||
const char *msgid1;
|
||||
const char *msgid2;
|
||||
unsigned long int n;
|
||||
int category;
|
||||
{
|
||||
return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category);
|
||||
}
|
||||
|
||||
#ifdef _LIBC
|
||||
/* Alias for function name in GNU C Library. */
|
||||
weak_alias (__dcngettext, dcngettext);
|
||||
#endif
|
||||
@@ -0,0 +1,58 @@
|
||||
/* Implementation of the dgettext(3) function.
|
||||
Copyright (C) 1995-1997, 2000, 2001 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. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <locale.h>
|
||||
|
||||
#include "gettextP.h"
|
||||
#ifdef _LIBC
|
||||
# include <libintl.h>
|
||||
#else
|
||||
# include "libgnuintl.h"
|
||||
#endif
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
/* Names for the libintl functions are a problem. They must not clash
|
||||
with existing names and they should follow ANSI C. But this source
|
||||
code is also used in GNU C Library where the names have a __
|
||||
prefix. So we have to make a difference here. */
|
||||
#ifdef _LIBC
|
||||
# define DGETTEXT __dgettext
|
||||
# define DCGETTEXT __dcgettext
|
||||
#else
|
||||
# define DGETTEXT dgettext__
|
||||
# define DCGETTEXT dcgettext__
|
||||
#endif
|
||||
|
||||
/* Look up MSGID in the DOMAINNAME message catalog of the current
|
||||
LC_MESSAGES locale. */
|
||||
char *
|
||||
DGETTEXT (domainname, msgid)
|
||||
const char *domainname;
|
||||
const char *msgid;
|
||||
{
|
||||
return DCGETTEXT (domainname, msgid, LC_MESSAGES);
|
||||
}
|
||||
|
||||
#ifdef _LIBC
|
||||
/* Alias for function name in GNU C Library. */
|
||||
weak_alias (__dgettext, dgettext);
|
||||
#endif
|
||||
@@ -0,0 +1,60 @@
|
||||
/* Implementation of the dngettext(3) function.
|
||||
Copyright (C) 1995-1997, 2000, 2001 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. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <locale.h>
|
||||
|
||||
#include "gettextP.h"
|
||||
#ifdef _LIBC
|
||||
# include <libintl.h>
|
||||
#else
|
||||
# include "libgnuintl.h"
|
||||
#endif
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
/* Names for the libintl functions are a problem. They must not clash
|
||||
with existing names and they should follow ANSI C. But this source
|
||||
code is also used in GNU C Library where the names have a __
|
||||
prefix. So we have to make a difference here. */
|
||||
#ifdef _LIBC
|
||||
# define DNGETTEXT __dngettext
|
||||
# define DCNGETTEXT __dcngettext
|
||||
#else
|
||||
# define DNGETTEXT dngettext__
|
||||
# define DCNGETTEXT dcngettext__
|
||||
#endif
|
||||
|
||||
/* Look up MSGID in the DOMAINNAME message catalog of the current
|
||||
LC_MESSAGES locale and skip message according to the plural form. */
|
||||
char *
|
||||
DNGETTEXT (domainname, msgid1, msgid2, n)
|
||||
const char *domainname;
|
||||
const char *msgid1;
|
||||
const char *msgid2;
|
||||
unsigned long int n;
|
||||
{
|
||||
return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES);
|
||||
}
|
||||
|
||||
#ifdef _LIBC
|
||||
/* Alias for function name in GNU C Library. */
|
||||
weak_alias (__dngettext, dngettext);
|
||||
#endif
|
||||
@@ -0,0 +1,191 @@
|
||||
/* Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc.
|
||||
Contributed by Ulrich Drepper <[email protected]>, 1995.
|
||||
|
||||
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. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include "loadinfo.h"
|
||||
|
||||
/* On some strange systems still no definition of NULL is found. Sigh! */
|
||||
#ifndef NULL
|
||||
# if defined __STDC__ && __STDC__
|
||||
# define NULL ((void *) 0)
|
||||
# else
|
||||
# define NULL 0
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
char *
|
||||
_nl_find_language (name)
|
||||
const char *name;
|
||||
{
|
||||
while (name[0] != '\0' && name[0] != '_' && name[0] != '@'
|
||||
&& name[0] != '+' && name[0] != ',')
|
||||
++name;
|
||||
|
||||
return (char *) name;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
_nl_explode_name (name, language, modifier, territory, codeset,
|
||||
normalized_codeset, special, sponsor, revision)
|
||||
char *name;
|
||||
const char **language;
|
||||
const char **modifier;
|
||||
const char **territory;
|
||||
const char **codeset;
|
||||
const char **normalized_codeset;
|
||||
const char **special;
|
||||
const char **sponsor;
|
||||
const char **revision;
|
||||
{
|
||||
enum { undecided, xpg, cen } syntax;
|
||||
char *cp;
|
||||
int mask;
|
||||
|
||||
*modifier = NULL;
|
||||
*territory = NULL;
|
||||
*codeset = NULL;
|
||||
*normalized_codeset = NULL;
|
||||
*special = NULL;
|
||||
*sponsor = NULL;
|
||||
*revision = NULL;
|
||||
|
||||
/* Now we determine the single parts of the locale name. First
|
||||
look for the language. Termination symbols are `_' and `@' if
|
||||
we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */
|
||||
mask = 0;
|
||||
syntax = undecided;
|
||||
*language = cp = name;
|
||||
cp = _nl_find_language (*language);
|
||||
|
||||
if (*language == cp)
|
||||
/* This does not make sense: language has to be specified. Use
|
||||
this entry as it is without exploding. Perhaps it is an alias. */
|
||||
cp = strchr (*language, '\0');
|
||||
else if (cp[0] == '_')
|
||||
{
|
||||
/* Next is the territory. */
|
||||
cp[0] = '\0';
|
||||
*territory = ++cp;
|
||||
|
||||
while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@'
|
||||
&& cp[0] != '+' && cp[0] != ',' && cp[0] != '_')
|
||||
++cp;
|
||||
|
||||
mask |= TERRITORY;
|
||||
|
||||
if (cp[0] == '.')
|
||||
{
|
||||
/* Next is the codeset. */
|
||||
syntax = xpg;
|
||||
cp[0] = '\0';
|
||||
*codeset = ++cp;
|
||||
|
||||
while (cp[0] != '\0' && cp[0] != '@')
|
||||
++cp;
|
||||
|
||||
mask |= XPG_CODESET;
|
||||
|
||||
if (*codeset != cp && (*codeset)[0] != '\0')
|
||||
{
|
||||
*normalized_codeset = _nl_normalize_codeset (*codeset,
|
||||
cp - *codeset);
|
||||
if (strcmp (*codeset, *normalized_codeset) == 0)
|
||||
free ((char *) *normalized_codeset);
|
||||
else
|
||||
mask |= XPG_NORM_CODESET;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (cp[0] == '@' || (syntax != xpg && cp[0] == '+'))
|
||||
{
|
||||
/* Next is the modifier. */
|
||||
syntax = cp[0] == '@' ? xpg : cen;
|
||||
cp[0] = '\0';
|
||||
*modifier = ++cp;
|
||||
|
||||
while (syntax == cen && cp[0] != '\0' && cp[0] != '+'
|
||||
&& cp[0] != ',' && cp[0] != '_')
|
||||
++cp;
|
||||
|
||||
mask |= XPG_MODIFIER | CEN_AUDIENCE;
|
||||
}
|
||||
|
||||
if (syntax != xpg && (cp[0] == '+' || cp[0] == ',' || cp[0] == '_'))
|
||||
{
|
||||
syntax = cen;
|
||||
|
||||
if (cp[0] == '+')
|
||||
{
|
||||
/* Next is special application (CEN syntax). */
|
||||
cp[0] = '\0';
|
||||
*special = ++cp;
|
||||
|
||||
while (cp[0] != '\0' && cp[0] != ',' && cp[0] != '_')
|
||||
++cp;
|
||||
|
||||
mask |= CEN_SPECIAL;
|
||||
}
|
||||
|
||||
if (cp[0] == ',')
|
||||
{
|
||||
/* Next is sponsor (CEN syntax). */
|
||||
cp[0] = '\0';
|
||||
*sponsor = ++cp;
|
||||
|
||||
while (cp[0] != '\0' && cp[0] != '_')
|
||||
++cp;
|
||||
|
||||
mask |= CEN_SPONSOR;
|
||||
}
|
||||
|
||||
if (cp[0] == '_')
|
||||
{
|
||||
/* Next is revision (CEN syntax). */
|
||||
cp[0] = '\0';
|
||||
*revision = ++cp;
|
||||
|
||||
mask |= CEN_REVISION;
|
||||
}
|
||||
}
|
||||
|
||||
/* For CEN syntax values it might be important to have the
|
||||
separator character in the file name, not for XPG syntax. */
|
||||
if (syntax == xpg)
|
||||
{
|
||||
if (*territory != NULL && (*territory)[0] == '\0')
|
||||
mask &= ~TERRITORY;
|
||||
|
||||
if (*codeset != NULL && (*codeset)[0] == '\0')
|
||||
mask &= ~XPG_CODESET;
|
||||
|
||||
if (*modifier != NULL && (*modifier)[0] == '\0')
|
||||
mask &= ~XPG_MODIFIER;
|
||||
}
|
||||
|
||||
return mask;
|
||||
}
|
||||
@@ -0,0 +1,197 @@
|
||||
/* Handle list of needed message catalogs
|
||||
Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
|
||||
Written by Ulrich Drepper <[email protected]>, 1995.
|
||||
|
||||
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. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#if defined HAVE_UNISTD_H || defined _LIBC
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include "gettextP.h"
|
||||
#ifdef _LIBC
|
||||
# include <libintl.h>
|
||||
#else
|
||||
# include "libgnuintl.h"
|
||||
#endif
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
/* List of already loaded domains. */
|
||||
static struct loaded_l10nfile *_nl_loaded_domains;
|
||||
|
||||
|
||||
/* Return a data structure describing the message catalog described by
|
||||
the DOMAINNAME and CATEGORY parameters with respect to the currently
|
||||
established bindings. */
|
||||
struct loaded_l10nfile *
|
||||
internal_function
|
||||
_nl_find_domain (dirname, locale, domainname, domainbinding)
|
||||
const char *dirname;
|
||||
char *locale;
|
||||
const char *domainname;
|
||||
struct binding *domainbinding;
|
||||
{
|
||||
struct loaded_l10nfile *retval;
|
||||
const char *language;
|
||||
const char *modifier;
|
||||
const char *territory;
|
||||
const char *codeset;
|
||||
const char *normalized_codeset;
|
||||
const char *special;
|
||||
const char *sponsor;
|
||||
const char *revision;
|
||||
const char *alias_value;
|
||||
int mask;
|
||||
|
||||
/* LOCALE can consist of up to four recognized parts for the XPG syntax:
|
||||
|
||||
language[_territory[.codeset]][@modifier]
|
||||
|
||||
and six parts for the CEN syntax:
|
||||
|
||||
language[_territory][+audience][+special][,[sponsor][_revision]]
|
||||
|
||||
Beside the first part all of them are allowed to be missing. If
|
||||
the full specified locale is not found, the less specific one are
|
||||
looked for. The various parts will be stripped off according to
|
||||
the following order:
|
||||
(1) revision
|
||||
(2) sponsor
|
||||
(3) special
|
||||
(4) codeset
|
||||
(5) normalized codeset
|
||||
(6) territory
|
||||
(7) audience/modifier
|
||||
*/
|
||||
|
||||
/* If we have already tested for this locale entry there has to
|
||||
be one data set in the list of loaded domains. */
|
||||
retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
|
||||
strlen (dirname) + 1, 0, locale, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL, NULL, domainname, 0);
|
||||
if (retval != NULL)
|
||||
{
|
||||
/* We know something about this locale. */
|
||||
int cnt;
|
||||
|
||||
if (retval->decided == 0)
|
||||
_nl_load_domain (retval, domainbinding);
|
||||
|
||||
if (retval->data != NULL)
|
||||
return retval;
|
||||
|
||||
for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
|
||||
{
|
||||
if (retval->successor[cnt]->decided == 0)
|
||||
_nl_load_domain (retval->successor[cnt], domainbinding);
|
||||
|
||||
if (retval->successor[cnt]->data != NULL)
|
||||
break;
|
||||
}
|
||||
return cnt >= 0 ? retval : NULL;
|
||||
/* NOTREACHED */
|
||||
}
|
||||
|
||||
/* See whether the locale value is an alias. If yes its value
|
||||
*overwrites* the alias name. No test for the original value is
|
||||
done. */
|
||||
alias_value = _nl_expand_alias (locale);
|
||||
if (alias_value != NULL)
|
||||
{
|
||||
#if defined _LIBC || defined HAVE_STRDUP
|
||||
locale = strdup (alias_value);
|
||||
if (locale == NULL)
|
||||
return NULL;
|
||||
#else
|
||||
size_t len = strlen (alias_value) + 1;
|
||||
locale = (char *) malloc (len);
|
||||
if (locale == NULL)
|
||||
return NULL;
|
||||
|
||||
memcpy (locale, alias_value, len);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Now we determine the single parts of the locale name. First
|
||||
look for the language. Termination symbols are `_' and `@' if
|
||||
we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */
|
||||
mask = _nl_explode_name (locale, &language, &modifier, &territory,
|
||||
&codeset, &normalized_codeset, &special,
|
||||
&sponsor, &revision);
|
||||
|
||||
/* Create all possible locale entries which might be interested in
|
||||
generalization. */
|
||||
retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
|
||||
strlen (dirname) + 1, mask, language, territory,
|
||||
codeset, normalized_codeset, modifier, special,
|
||||
sponsor, revision, domainname, 1);
|
||||
if (retval == NULL)
|
||||
/* This means we are out of core. */
|
||||
return NULL;
|
||||
|
||||
if (retval->decided == 0)
|
||||
_nl_load_domain (retval, domainbinding);
|
||||
if (retval->data == NULL)
|
||||
{
|
||||
int cnt;
|
||||
for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
|
||||
{
|
||||
if (retval->successor[cnt]->decided == 0)
|
||||
_nl_load_domain (retval->successor[cnt], domainbinding);
|
||||
if (retval->successor[cnt]->data != NULL)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* The room for an alias was dynamically allocated. Free it now. */
|
||||
if (alias_value != NULL)
|
||||
free (locale);
|
||||
|
||||
/* The space for normalized_codeset is dynamically allocated. Free it. */
|
||||
if (mask & XPG_NORM_CODESET)
|
||||
free ((void *) normalized_codeset);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
#ifdef _LIBC
|
||||
static void __attribute__ ((unused))
|
||||
free_mem (void)
|
||||
{
|
||||
struct loaded_l10nfile *runp = _nl_loaded_domains;
|
||||
|
||||
while (runp != NULL)
|
||||
{
|
||||
struct loaded_l10nfile *here = runp;
|
||||
if (runp->data != NULL)
|
||||
_nl_unload_domain ((struct loaded_domain *) runp->data);
|
||||
runp = runp->next;
|
||||
free ((char *) here->filename);
|
||||
free (here);
|
||||
}
|
||||
}
|
||||
|
||||
text_set_element (__libc_subfreeres, free_mem);
|
||||
#endif
|
||||
@@ -0,0 +1,63 @@
|
||||
/* Implementation of gettext(3) function.
|
||||
Copyright (C) 1995, 1997, 2000, 2001 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. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#ifdef _LIBC
|
||||
# define __need_NULL
|
||||
# include <stddef.h>
|
||||
#else
|
||||
# include <stdlib.h> /* Just for NULL. */
|
||||
#endif
|
||||
|
||||
#include "gettextP.h"
|
||||
#ifdef _LIBC
|
||||
# include <libintl.h>
|
||||
#else
|
||||
# include "libgnuintl.h"
|
||||
#endif
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
/* Names for the libintl functions are a problem. They must not clash
|
||||
with existing names and they should follow ANSI C. But this source
|
||||
code is also used in GNU C Library where the names have a __
|
||||
prefix. So we have to make a difference here. */
|
||||
#ifdef _LIBC
|
||||
# define GETTEXT __gettext
|
||||
# define DCGETTEXT __dcgettext
|
||||
#else
|
||||
# define GETTEXT gettext__
|
||||
# define DCGETTEXT dcgettext__
|
||||
#endif
|
||||
|
||||
/* Look up MSGID in the current default message catalog for the current
|
||||
LC_MESSAGES locale. If not found, returns MSGID itself (the default
|
||||
text). */
|
||||
char *
|
||||
GETTEXT (msgid)
|
||||
const char *msgid;
|
||||
{
|
||||
return DCGETTEXT (NULL, msgid, LC_MESSAGES);
|
||||
}
|
||||
|
||||
#ifdef _LIBC
|
||||
/* Alias for function name in GNU C Library. */
|
||||
weak_alias (__gettext, gettext);
|
||||
#endif
|
||||
+101
@@ -0,0 +1,101 @@
|
||||
/* Description of GNU message catalog format: general file layout.
|
||||
Copyright (C) 1995, 1997, 2000, 2001 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. */
|
||||
|
||||
#ifndef _GETTEXT_H
|
||||
#define _GETTEXT_H 1
|
||||
|
||||
#if HAVE_LIMITS_H || _LIBC
|
||||
# include <limits.h>
|
||||
#endif
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
/* The magic number of the GNU message catalog format. */
|
||||
#define _MAGIC 0x950412de
|
||||
#define _MAGIC_SWAPPED 0xde120495
|
||||
|
||||
/* Revision number of the currently used .mo (binary) file format. */
|
||||
#define MO_REVISION_NUMBER 0
|
||||
|
||||
/* The following contortions are an attempt to use the C preprocessor
|
||||
to determine an unsigned integral type that is 32 bits wide. An
|
||||
alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
|
||||
as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work
|
||||
when cross-compiling. */
|
||||
|
||||
#if __STDC__
|
||||
# define UINT_MAX_32_BITS 4294967295U
|
||||
#else
|
||||
# define UINT_MAX_32_BITS 0xFFFFFFFF
|
||||
#endif
|
||||
|
||||
/* If UINT_MAX isn't defined, assume it's a 32-bit type.
|
||||
This should be valid for all systems GNU cares about because
|
||||
that doesn't include 16-bit systems, and only modern systems
|
||||
(that certainly have <limits.h>) have 64+-bit integral types. */
|
||||
|
||||
#ifndef UINT_MAX
|
||||
# define UINT_MAX UINT_MAX_32_BITS
|
||||
#endif
|
||||
|
||||
#if UINT_MAX == UINT_MAX_32_BITS
|
||||
typedef unsigned nls_uint32;
|
||||
#else
|
||||
# if USHRT_MAX == UINT_MAX_32_BITS
|
||||
typedef unsigned short nls_uint32;
|
||||
# else
|
||||
# if ULONG_MAX == UINT_MAX_32_BITS
|
||||
typedef unsigned long nls_uint32;
|
||||
# else
|
||||
/* The following line is intended to throw an error. Using #error is
|
||||
not portable enough. */
|
||||
"Cannot determine unsigned 32-bit data type."
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
|
||||
/* Header for binary .mo file format. */
|
||||
struct mo_file_header
|
||||
{
|
||||
/* The magic number. */
|
||||
nls_uint32 magic;
|
||||
/* The revision number of the file format. */
|
||||
nls_uint32 revision;
|
||||
/* The number of strings pairs. */
|
||||
nls_uint32 nstrings;
|
||||
/* Offset of table with start offsets of original strings. */
|
||||
nls_uint32 orig_tab_offset;
|
||||
/* Offset of table with start offsets of translation strings. */
|
||||
nls_uint32 trans_tab_offset;
|
||||
/* Size of hashing table. */
|
||||
nls_uint32 hash_tab_size;
|
||||
/* Offset of first hashing entry. */
|
||||
nls_uint32 hash_tab_offset;
|
||||
};
|
||||
|
||||
struct string_desc
|
||||
{
|
||||
/* Length of addressed string. */
|
||||
nls_uint32 length;
|
||||
/* Offset of string in file. */
|
||||
nls_uint32 offset;
|
||||
};
|
||||
|
||||
/* @@ begin of epilog @@ */
|
||||
|
||||
#endif /* gettext.h */
|
||||
+251
@@ -0,0 +1,251 @@
|
||||
/* Header describing internals of libintl library.
|
||||
Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
|
||||
Written by Ulrich Drepper <[email protected]>, 1995.
|
||||
|
||||
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. */
|
||||
|
||||
#ifndef _GETTEXTP_H
|
||||
#define _GETTEXTP_H
|
||||
|
||||
#include <stddef.h> /* Get size_t. */
|
||||
|
||||
#ifdef _LIBC
|
||||
# include "../iconv/gconv_int.h"
|
||||
#else
|
||||
# if HAVE_ICONV
|
||||
# include <iconv.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include "loadinfo.h"
|
||||
|
||||
#include "gettext.h" /* Get nls_uint32. */
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
#ifndef PARAMS
|
||||
# if __STDC__
|
||||
# define PARAMS(args) args
|
||||
# else
|
||||
# define PARAMS(args) ()
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef internal_function
|
||||
# define internal_function
|
||||
#endif
|
||||
|
||||
/* Tell the compiler when a conditional or integer expression is
|
||||
almost always true or almost always false. */
|
||||
#ifndef HAVE_BUILTIN_EXPECT
|
||||
# define __builtin_expect(expr, val) (expr)
|
||||
#endif
|
||||
|
||||
#ifndef W
|
||||
# define W(flag, data) ((flag) ? SWAP (data) : (data))
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef _LIBC
|
||||
# include <byteswap.h>
|
||||
# define SWAP(i) bswap_32 (i)
|
||||
#else
|
||||
static inline nls_uint32
|
||||
SWAP (i)
|
||||
nls_uint32 i;
|
||||
{
|
||||
return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/* This is the representation of the expressions to determine the
|
||||
plural form. */
|
||||
struct expression
|
||||
{
|
||||
int nargs; /* Number of arguments. */
|
||||
enum operator
|
||||
{
|
||||
/* Without arguments: */
|
||||
var, /* The variable "n". */
|
||||
num, /* Decimal number. */
|
||||
/* Unary operators: */
|
||||
lnot, /* Logical NOT. */
|
||||
/* Binary operators: */
|
||||
mult, /* Multiplication. */
|
||||
divide, /* Division. */
|
||||
module, /* Module operation. */
|
||||
plus, /* Addition. */
|
||||
minus, /* Subtraction. */
|
||||
less_than, /* Comparison. */
|
||||
greater_than, /* Comparison. */
|
||||
less_or_equal, /* Comparison. */
|
||||
greater_or_equal, /* Comparison. */
|
||||
equal, /* Comparision for equality. */
|
||||
not_equal, /* Comparision for inequality. */
|
||||
land, /* Logical AND. */
|
||||
lor, /* Logical OR. */
|
||||
/* Ternary operators: */
|
||||
qmop /* Question mark operator. */
|
||||
} operation;
|
||||
union
|
||||
{
|
||||
unsigned long int num; /* Number value for `num'. */
|
||||
struct expression *args[3]; /* Up to three arguments. */
|
||||
} val;
|
||||
};
|
||||
|
||||
/* This is the data structure to pass information to the parser and get
|
||||
the result in a thread-safe way. */
|
||||
struct parse_args
|
||||
{
|
||||
const char *cp;
|
||||
struct expression *res;
|
||||
};
|
||||
|
||||
|
||||
/* The representation of an opened message catalog. */
|
||||
struct loaded_domain
|
||||
{
|
||||
const char *data;
|
||||
int use_mmap;
|
||||
size_t mmap_size;
|
||||
int must_swap;
|
||||
nls_uint32 nstrings;
|
||||
struct string_desc *orig_tab;
|
||||
struct string_desc *trans_tab;
|
||||
nls_uint32 hash_size;
|
||||
nls_uint32 *hash_tab;
|
||||
int codeset_cntr;
|
||||
#ifdef _LIBC
|
||||
__gconv_t conv;
|
||||
#else
|
||||
# if HAVE_ICONV
|
||||
iconv_t conv;
|
||||
# endif
|
||||
#endif
|
||||
char **conv_tab;
|
||||
|
||||
struct expression *plural;
|
||||
unsigned long int nplurals;
|
||||
};
|
||||
|
||||
/* We want to allocate a string at the end of the struct. But ISO C
|
||||
doesn't allow zero sized arrays. */
|
||||
#ifdef __GNUC__
|
||||
# define ZERO 0
|
||||
#else
|
||||
# define ZERO 1
|
||||
#endif
|
||||
|
||||
/* A set of settings bound to a message domain. Used to store settings
|
||||
from bindtextdomain() and bind_textdomain_codeset(). */
|
||||
struct binding
|
||||
{
|
||||
struct binding *next;
|
||||
char *dirname;
|
||||
int codeset_cntr; /* Incremented each time codeset changes. */
|
||||
char *codeset;
|
||||
char domainname[ZERO];
|
||||
};
|
||||
|
||||
/* A counter which is incremented each time some previous translations
|
||||
become invalid.
|
||||
This variable is part of the external ABI of the GNU libintl. */
|
||||
extern int _nl_msg_cat_cntr;
|
||||
|
||||
struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname,
|
||||
char *__locale,
|
||||
const char *__domainname,
|
||||
struct binding *__domainbinding))
|
||||
internal_function;
|
||||
void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain,
|
||||
struct binding *__domainbinding))
|
||||
internal_function;
|
||||
void _nl_unload_domain PARAMS ((struct loaded_domain *__domain))
|
||||
internal_function;
|
||||
const char *_nl_init_domain_conv PARAMS ((struct loaded_l10nfile *__domain_file,
|
||||
struct loaded_domain *__domain,
|
||||
struct binding *__domainbinding))
|
||||
internal_function;
|
||||
void _nl_free_domain_conv PARAMS ((struct loaded_domain *__domain))
|
||||
internal_function;
|
||||
|
||||
char *_nl_find_msg PARAMS ((struct loaded_l10nfile *domain_file,
|
||||
struct binding *domainbinding,
|
||||
const char *msgid, size_t *lengthp))
|
||||
internal_function;
|
||||
|
||||
#ifdef _LIBC
|
||||
extern char *__gettext PARAMS ((const char *__msgid));
|
||||
extern char *__dgettext PARAMS ((const char *__domainname,
|
||||
const char *__msgid));
|
||||
extern char *__dcgettext PARAMS ((const char *__domainname,
|
||||
const char *__msgid, int __category));
|
||||
extern char *__ngettext PARAMS ((const char *__msgid1, const char *__msgid2,
|
||||
unsigned long int __n));
|
||||
extern char *__dngettext PARAMS ((const char *__domainname,
|
||||
const char *__msgid1, const char *__msgid2,
|
||||
unsigned long int n));
|
||||
extern char *__dcngettext PARAMS ((const char *__domainname,
|
||||
const char *__msgid1, const char *__msgid2,
|
||||
unsigned long int __n, int __category));
|
||||
extern char *__dcigettext PARAMS ((const char *__domainname,
|
||||
const char *__msgid1, const char *__msgid2,
|
||||
int __plural, unsigned long int __n,
|
||||
int __category));
|
||||
extern char *__textdomain PARAMS ((const char *__domainname));
|
||||
extern char *__bindtextdomain PARAMS ((const char *__domainname,
|
||||
const char *__dirname));
|
||||
extern char *__bind_textdomain_codeset PARAMS ((const char *__domainname,
|
||||
const char *__codeset));
|
||||
#else
|
||||
extern char *gettext__ PARAMS ((const char *__msgid));
|
||||
extern char *dgettext__ PARAMS ((const char *__domainname,
|
||||
const char *__msgid));
|
||||
extern char *dcgettext__ PARAMS ((const char *__domainname,
|
||||
const char *__msgid, int __category));
|
||||
extern char *ngettext__ PARAMS ((const char *__msgid1, const char *__msgid2,
|
||||
unsigned long int __n));
|
||||
extern char *dngettext__ PARAMS ((const char *__domainname,
|
||||
const char *__msgid1, const char *__msgid2,
|
||||
unsigned long int __n));
|
||||
extern char *dcngettext__ PARAMS ((const char *__domainname,
|
||||
const char *__msgid1, const char *__msgid2,
|
||||
unsigned long int __n, int __category));
|
||||
extern char *dcigettext__ PARAMS ((const char *__domainname,
|
||||
const char *__msgid1, const char *__msgid2,
|
||||
int __plural, unsigned long int __n,
|
||||
int __category));
|
||||
extern char *textdomain__ PARAMS ((const char *__domainname));
|
||||
extern char *bindtextdomain__ PARAMS ((const char *__domainname,
|
||||
const char *__dirname));
|
||||
extern char *bind_textdomain_codeset__ PARAMS ((const char *__domainname,
|
||||
const char *__codeset));
|
||||
#endif
|
||||
|
||||
#ifdef _LIBC
|
||||
extern void __gettext_free_exp PARAMS ((struct expression *exp))
|
||||
internal_function;
|
||||
extern int __gettextparse PARAMS ((void *arg));
|
||||
#else
|
||||
extern void gettext_free_exp__ PARAMS ((struct expression *exp))
|
||||
internal_function;
|
||||
extern int gettextparse__ PARAMS ((void *arg));
|
||||
#endif
|
||||
|
||||
/* @@ begin of epilog @@ */
|
||||
|
||||
#endif /* gettextP.h */
|
||||
@@ -0,0 +1,58 @@
|
||||
/* Description of GNU message catalog format: string hashing function.
|
||||
Copyright (C) 1995, 1997, 1998, 2000, 2001 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. */
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
#ifndef PARAMS
|
||||
# if __STDC__
|
||||
# define PARAMS(Args) Args
|
||||
# else
|
||||
# define PARAMS(Args) ()
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* We assume to have `unsigned long int' value with at least 32 bits. */
|
||||
#define HASHWORDBITS 32
|
||||
|
||||
|
||||
/* Defines the so called `hashpjw' function by P.J. Weinberger
|
||||
[see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
|
||||
1986, 1987 Bell Telephone Laboratories, Inc.] */
|
||||
static unsigned long int hash_string PARAMS ((const char *__str_param));
|
||||
|
||||
static inline unsigned long int
|
||||
hash_string (str_param)
|
||||
const char *str_param;
|
||||
{
|
||||
unsigned long int hval, g;
|
||||
const char *str = str_param;
|
||||
|
||||
/* Compute the hash value for the given string. */
|
||||
hval = 0;
|
||||
while (*str != '\0')
|
||||
{
|
||||
hval <<= 4;
|
||||
hval += (unsigned long int) *str++;
|
||||
g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4));
|
||||
if (g != 0)
|
||||
{
|
||||
hval ^= g >> (HASHWORDBITS - 8);
|
||||
hval ^= g;
|
||||
}
|
||||
}
|
||||
return hval;
|
||||
}
|
||||
@@ -0,0 +1,165 @@
|
||||
/* intl-compat.c - Stub functions to call gettext functions from GNU gettext
|
||||
Library.
|
||||
Copyright (C) 1995, 2000, 2001 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. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include "libgnuintl.h"
|
||||
#include "gettextP.h"
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
/* This file redirects the gettext functions (without prefix or suffix) to
|
||||
those defined in the included GNU gettext library (with "__" suffix).
|
||||
It is compiled into libintl when the included GNU gettext library is
|
||||
configured --with-included-gettext.
|
||||
|
||||
This redirection works also in the case that the system C library or
|
||||
the system libintl library contain gettext/textdomain/... functions.
|
||||
If it didn't, we would need to add preprocessor level redirections to
|
||||
libgnuintl.h of the following form:
|
||||
|
||||
# define gettext gettext__
|
||||
# define dgettext dgettext__
|
||||
# define dcgettext dcgettext__
|
||||
# define ngettext ngettext__
|
||||
# define dngettext dngettext__
|
||||
# define dcngettext dcngettext__
|
||||
# define textdomain textdomain__
|
||||
# define bindtextdomain bindtextdomain__
|
||||
# define bind_textdomain_codeset bind_textdomain_codeset__
|
||||
|
||||
How does this redirection work? There are two cases.
|
||||
A. When libintl.a is linked into an executable, it works because
|
||||
functions defined in the executable always override functions in
|
||||
the shared libraries.
|
||||
B. When libintl.so is used, it works because
|
||||
1. those systems defining gettext/textdomain/... in the C library
|
||||
(namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer) are
|
||||
ELF systems and define these symbols as weak, thus explicitly
|
||||
letting other shared libraries override it.
|
||||
2. those systems defining gettext/textdomain/... in a standalone
|
||||
libintl.so library (namely, Solaris 2.3 and newer) have this
|
||||
shared library in /usr/lib, and the linker will search /usr/lib
|
||||
*after* the directory where the GNU gettext library is installed.
|
||||
|
||||
A third case, namely when libintl.a is linked into a shared library
|
||||
whose name is not libintl.so, is not supported. In this case, on
|
||||
Solaris, when -lintl precedes the linker option for the shared library
|
||||
containing GNU gettext, the system's gettext would indeed override
|
||||
the GNU gettext. Anyone doing this kind of stuff must be clever enough
|
||||
to 1. compile libintl.a with -fPIC, 2. remove -lintl from his linker
|
||||
command line. */
|
||||
|
||||
|
||||
#undef gettext
|
||||
#undef dgettext
|
||||
#undef dcgettext
|
||||
#undef ngettext
|
||||
#undef dngettext
|
||||
#undef dcngettext
|
||||
#undef textdomain
|
||||
#undef bindtextdomain
|
||||
#undef bind_textdomain_codeset
|
||||
|
||||
|
||||
char *
|
||||
gettext (msgid)
|
||||
const char *msgid;
|
||||
{
|
||||
return gettext__ (msgid);
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
dgettext (domainname, msgid)
|
||||
const char *domainname;
|
||||
const char *msgid;
|
||||
{
|
||||
return dgettext__ (domainname, msgid);
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
dcgettext (domainname, msgid, category)
|
||||
const char *domainname;
|
||||
const char *msgid;
|
||||
int category;
|
||||
{
|
||||
return dcgettext__ (domainname, msgid, category);
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
ngettext (msgid1, msgid2, n)
|
||||
const char *msgid1;
|
||||
const char *msgid2;
|
||||
unsigned long int n;
|
||||
{
|
||||
return ngettext__ (msgid1, msgid2, n);
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
dngettext (domainname, msgid1, msgid2, n)
|
||||
const char *domainname;
|
||||
const char *msgid1;
|
||||
const char *msgid2;
|
||||
unsigned long int n;
|
||||
{
|
||||
return dngettext__ (domainname, msgid1, msgid2, n);
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
dcngettext (domainname, msgid1, msgid2, n, category)
|
||||
const char *domainname;
|
||||
const char *msgid1;
|
||||
const char *msgid2;
|
||||
unsigned long int n;
|
||||
int category;
|
||||
{
|
||||
return dcngettext__ (domainname, msgid1, msgid2, n, category);
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
textdomain (domainname)
|
||||
const char *domainname;
|
||||
{
|
||||
return textdomain__ (domainname);
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
bindtextdomain (domainname, dirname)
|
||||
const char *domainname;
|
||||
const char *dirname;
|
||||
{
|
||||
return bindtextdomain__ (domainname, dirname);
|
||||
}
|
||||
|
||||
|
||||
char *
|
||||
bind_textdomain_codeset (domainname, codeset)
|
||||
const char *domainname;
|
||||
const char *codeset;
|
||||
{
|
||||
return bind_textdomain_codeset__ (domainname, codeset);
|
||||
}
|
||||
@@ -0,0 +1,404 @@
|
||||
/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
|
||||
Contributed by Ulrich Drepper <[email protected]>, 1995.
|
||||
|
||||
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. */
|
||||
|
||||
/* Tell glibc's <string.h> to provide a prototype for stpcpy().
|
||||
This must come before <config.h> because <config.h> may include
|
||||
<features.h>, and once <features.h> has been included, it's too late. */
|
||||
#ifndef _GNU_SOURCE
|
||||
# define _GNU_SOURCE 1
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <string.h>
|
||||
#if !HAVE_STRCHR && !defined _LIBC
|
||||
# ifndef strchr
|
||||
# define strchr index
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined _LIBC || defined HAVE_ARGZ_H
|
||||
# include <argz.h>
|
||||
#endif
|
||||
#include <ctype.h>
|
||||
#include <sys/types.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "loadinfo.h"
|
||||
|
||||
/* On some strange systems still no definition of NULL is found. Sigh! */
|
||||
#ifndef NULL
|
||||
# if defined __STDC__ && __STDC__
|
||||
# define NULL ((void *) 0)
|
||||
# else
|
||||
# define NULL 0
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
#ifdef _LIBC
|
||||
/* Rename the non ANSI C functions. This is required by the standard
|
||||
because some ANSI C functions will require linking with this object
|
||||
file and the name space must not be polluted. */
|
||||
# ifndef stpcpy
|
||||
# define stpcpy(dest, src) __stpcpy(dest, src)
|
||||
# endif
|
||||
#else
|
||||
# ifndef HAVE_STPCPY
|
||||
static char *stpcpy PARAMS ((char *dest, const char *src));
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Define function which are usually not available. */
|
||||
|
||||
#if !defined _LIBC && !defined HAVE___ARGZ_COUNT
|
||||
/* Returns the number of strings in ARGZ. */
|
||||
static size_t argz_count__ PARAMS ((const char *argz, size_t len));
|
||||
|
||||
static size_t
|
||||
argz_count__ (argz, len)
|
||||
const char *argz;
|
||||
size_t len;
|
||||
{
|
||||
size_t count = 0;
|
||||
while (len > 0)
|
||||
{
|
||||
size_t part_len = strlen (argz);
|
||||
argz += part_len + 1;
|
||||
len -= part_len + 1;
|
||||
count++;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
# undef __argz_count
|
||||
# define __argz_count(argz, len) argz_count__ (argz, len)
|
||||
#endif /* !_LIBC && !HAVE___ARGZ_COUNT */
|
||||
|
||||
#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY
|
||||
/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
|
||||
except the last into the character SEP. */
|
||||
static void argz_stringify__ PARAMS ((char *argz, size_t len, int sep));
|
||||
|
||||
static void
|
||||
argz_stringify__ (argz, len, sep)
|
||||
char *argz;
|
||||
size_t len;
|
||||
int sep;
|
||||
{
|
||||
while (len > 0)
|
||||
{
|
||||
size_t part_len = strlen (argz);
|
||||
argz += part_len;
|
||||
len -= part_len + 1;
|
||||
if (len > 0)
|
||||
*argz++ = sep;
|
||||
}
|
||||
}
|
||||
# undef __argz_stringify
|
||||
# define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep)
|
||||
#endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */
|
||||
|
||||
#if !defined _LIBC && !defined HAVE___ARGZ_NEXT
|
||||
static char *argz_next__ PARAMS ((char *argz, size_t argz_len,
|
||||
const char *entry));
|
||||
|
||||
static char *
|
||||
argz_next__ (argz, argz_len, entry)
|
||||
char *argz;
|
||||
size_t argz_len;
|
||||
const char *entry;
|
||||
{
|
||||
if (entry)
|
||||
{
|
||||
if (entry < argz + argz_len)
|
||||
entry = strchr (entry, '\0') + 1;
|
||||
|
||||
return entry >= argz + argz_len ? NULL : (char *) entry;
|
||||
}
|
||||
else
|
||||
if (argz_len > 0)
|
||||
return argz;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
# undef __argz_next
|
||||
# define __argz_next(argz, len, entry) argz_next__ (argz, len, entry)
|
||||
#endif /* !_LIBC && !HAVE___ARGZ_NEXT */
|
||||
|
||||
|
||||
/* Return number of bits set in X. */
|
||||
static int pop PARAMS ((int x));
|
||||
|
||||
static inline int
|
||||
pop (x)
|
||||
int x;
|
||||
{
|
||||
/* We assume that no more than 16 bits are used. */
|
||||
x = ((x & ~0x5555) >> 1) + (x & 0x5555);
|
||||
x = ((x & ~0x3333) >> 2) + (x & 0x3333);
|
||||
x = ((x >> 4) + x) & 0x0f0f;
|
||||
x = ((x >> 8) + x) & 0xff;
|
||||
|
||||
return x;
|
||||
}
|
||||
|
||||
|
||||
struct loaded_l10nfile *
|
||||
_nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language,
|
||||
territory, codeset, normalized_codeset, modifier, special,
|
||||
sponsor, revision, filename, do_allocate)
|
||||
struct loaded_l10nfile **l10nfile_list;
|
||||
const char *dirlist;
|
||||
size_t dirlist_len;
|
||||
int mask;
|
||||
const char *language;
|
||||
const char *territory;
|
||||
const char *codeset;
|
||||
const char *normalized_codeset;
|
||||
const char *modifier;
|
||||
const char *special;
|
||||
const char *sponsor;
|
||||
const char *revision;
|
||||
const char *filename;
|
||||
int do_allocate;
|
||||
{
|
||||
char *abs_filename;
|
||||
struct loaded_l10nfile *last = NULL;
|
||||
struct loaded_l10nfile *retval;
|
||||
char *cp;
|
||||
size_t entries;
|
||||
int cnt;
|
||||
|
||||
/* Allocate room for the full file name. */
|
||||
abs_filename = (char *) malloc (dirlist_len
|
||||
+ strlen (language)
|
||||
+ ((mask & TERRITORY) != 0
|
||||
? strlen (territory) + 1 : 0)
|
||||
+ ((mask & XPG_CODESET) != 0
|
||||
? strlen (codeset) + 1 : 0)
|
||||
+ ((mask & XPG_NORM_CODESET) != 0
|
||||
? strlen (normalized_codeset) + 1 : 0)
|
||||
+ (((mask & XPG_MODIFIER) != 0
|
||||
|| (mask & CEN_AUDIENCE) != 0)
|
||||
? strlen (modifier) + 1 : 0)
|
||||
+ ((mask & CEN_SPECIAL) != 0
|
||||
? strlen (special) + 1 : 0)
|
||||
+ (((mask & CEN_SPONSOR) != 0
|
||||
|| (mask & CEN_REVISION) != 0)
|
||||
? (1 + ((mask & CEN_SPONSOR) != 0
|
||||
? strlen (sponsor) + 1 : 0)
|
||||
+ ((mask & CEN_REVISION) != 0
|
||||
? strlen (revision) + 1 : 0)) : 0)
|
||||
+ 1 + strlen (filename) + 1);
|
||||
|
||||
if (abs_filename == NULL)
|
||||
return NULL;
|
||||
|
||||
retval = NULL;
|
||||
last = NULL;
|
||||
|
||||
/* Construct file name. */
|
||||
memcpy (abs_filename, dirlist, dirlist_len);
|
||||
__argz_stringify (abs_filename, dirlist_len, PATH_SEPARATOR);
|
||||
cp = abs_filename + (dirlist_len - 1);
|
||||
*cp++ = '/';
|
||||
cp = stpcpy (cp, language);
|
||||
|
||||
if ((mask & TERRITORY) != 0)
|
||||
{
|
||||
*cp++ = '_';
|
||||
cp = stpcpy (cp, territory);
|
||||
}
|
||||
if ((mask & XPG_CODESET) != 0)
|
||||
{
|
||||
*cp++ = '.';
|
||||
cp = stpcpy (cp, codeset);
|
||||
}
|
||||
if ((mask & XPG_NORM_CODESET) != 0)
|
||||
{
|
||||
*cp++ = '.';
|
||||
cp = stpcpy (cp, normalized_codeset);
|
||||
}
|
||||
if ((mask & (XPG_MODIFIER | CEN_AUDIENCE)) != 0)
|
||||
{
|
||||
/* This component can be part of both syntaces but has different
|
||||
leading characters. For CEN we use `+', else `@'. */
|
||||
*cp++ = (mask & CEN_AUDIENCE) != 0 ? '+' : '@';
|
||||
cp = stpcpy (cp, modifier);
|
||||
}
|
||||
if ((mask & CEN_SPECIAL) != 0)
|
||||
{
|
||||
*cp++ = '+';
|
||||
cp = stpcpy (cp, special);
|
||||
}
|
||||
if ((mask & (CEN_SPONSOR | CEN_REVISION)) != 0)
|
||||
{
|
||||
*cp++ = ',';
|
||||
if ((mask & CEN_SPONSOR) != 0)
|
||||
cp = stpcpy (cp, sponsor);
|
||||
if ((mask & CEN_REVISION) != 0)
|
||||
{
|
||||
*cp++ = '_';
|
||||
cp = stpcpy (cp, revision);
|
||||
}
|
||||
}
|
||||
|
||||
*cp++ = '/';
|
||||
stpcpy (cp, filename);
|
||||
|
||||
/* Look in list of already loaded domains whether it is already
|
||||
available. */
|
||||
last = NULL;
|
||||
for (retval = *l10nfile_list; retval != NULL; retval = retval->next)
|
||||
if (retval->filename != NULL)
|
||||
{
|
||||
int compare = strcmp (retval->filename, abs_filename);
|
||||
if (compare == 0)
|
||||
/* We found it! */
|
||||
break;
|
||||
if (compare < 0)
|
||||
{
|
||||
/* It's not in the list. */
|
||||
retval = NULL;
|
||||
break;
|
||||
}
|
||||
|
||||
last = retval;
|
||||
}
|
||||
|
||||
if (retval != NULL || do_allocate == 0)
|
||||
{
|
||||
free (abs_filename);
|
||||
return retval;
|
||||
}
|
||||
|
||||
retval = (struct loaded_l10nfile *)
|
||||
malloc (sizeof (*retval) + (__argz_count (dirlist, dirlist_len)
|
||||
* (1 << pop (mask))
|
||||
* sizeof (struct loaded_l10nfile *)));
|
||||
if (retval == NULL)
|
||||
return NULL;
|
||||
|
||||
retval->filename = abs_filename;
|
||||
retval->decided = (__argz_count (dirlist, dirlist_len) != 1
|
||||
|| ((mask & XPG_CODESET) != 0
|
||||
&& (mask & XPG_NORM_CODESET) != 0));
|
||||
retval->data = NULL;
|
||||
|
||||
if (last == NULL)
|
||||
{
|
||||
retval->next = *l10nfile_list;
|
||||
*l10nfile_list = retval;
|
||||
}
|
||||
else
|
||||
{
|
||||
retval->next = last->next;
|
||||
last->next = retval;
|
||||
}
|
||||
|
||||
entries = 0;
|
||||
/* If the DIRLIST is a real list the RETVAL entry corresponds not to
|
||||
a real file. So we have to use the DIRLIST separation mechanism
|
||||
of the inner loop. */
|
||||
cnt = __argz_count (dirlist, dirlist_len) == 1 ? mask - 1 : mask;
|
||||
for (; cnt >= 0; --cnt)
|
||||
if ((cnt & ~mask) == 0
|
||||
&& ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0)
|
||||
&& ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0))
|
||||
{
|
||||
/* Iterate over all elements of the DIRLIST. */
|
||||
char *dir = NULL;
|
||||
|
||||
while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
|
||||
!= NULL)
|
||||
retval->successor[entries++]
|
||||
= _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt,
|
||||
language, territory, codeset,
|
||||
normalized_codeset, modifier, special,
|
||||
sponsor, revision, filename, 1);
|
||||
}
|
||||
retval->successor[entries] = NULL;
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
/* Normalize codeset name. There is no standard for the codeset
|
||||
names. Normalization allows the user to use any of the common
|
||||
names. The return value is dynamically allocated and has to be
|
||||
freed by the caller. */
|
||||
const char *
|
||||
_nl_normalize_codeset (codeset, name_len)
|
||||
const char *codeset;
|
||||
size_t name_len;
|
||||
{
|
||||
int len = 0;
|
||||
int only_digit = 1;
|
||||
char *retval;
|
||||
char *wp;
|
||||
size_t cnt;
|
||||
|
||||
for (cnt = 0; cnt < name_len; ++cnt)
|
||||
if (isalnum (codeset[cnt]))
|
||||
{
|
||||
++len;
|
||||
|
||||
if (isalpha (codeset[cnt]))
|
||||
only_digit = 0;
|
||||
}
|
||||
|
||||
retval = (char *) malloc ((only_digit ? 3 : 0) + len + 1);
|
||||
|
||||
if (retval != NULL)
|
||||
{
|
||||
if (only_digit)
|
||||
wp = stpcpy (retval, "iso");
|
||||
else
|
||||
wp = retval;
|
||||
|
||||
for (cnt = 0; cnt < name_len; ++cnt)
|
||||
if (isalpha (codeset[cnt]))
|
||||
*wp++ = tolower (codeset[cnt]);
|
||||
else if (isdigit (codeset[cnt]))
|
||||
*wp++ = codeset[cnt];
|
||||
|
||||
*wp = '\0';
|
||||
}
|
||||
|
||||
return (const char *) retval;
|
||||
}
|
||||
|
||||
|
||||
/* @@ begin of epilog @@ */
|
||||
|
||||
/* We don't want libintl.a to depend on any other library. So we
|
||||
avoid the non-standard function stpcpy. In GNU C Library this
|
||||
function is available, though. Also allow the symbol HAVE_STPCPY
|
||||
to be defined. */
|
||||
#if !_LIBC && !HAVE_STPCPY
|
||||
static char *
|
||||
stpcpy (dest, src)
|
||||
char *dest;
|
||||
const char *src;
|
||||
{
|
||||
while ((*dest++ = *src++) != '\0')
|
||||
/* Do nothing. */ ;
|
||||
return dest - 1;
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,48 @@
|
||||
/* Convenience header for conditional use of GNU <libintl.h>.
|
||||
Copyright (C) 1995-1998, 2000, 2001 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. */
|
||||
|
||||
#ifndef _LIBGETTEXT_H
|
||||
#define _LIBGETTEXT_H 1
|
||||
|
||||
/* NLS can be disabled through the configure --disable-nls option. */
|
||||
#if ENABLE_NLS
|
||||
|
||||
/* Get declarations of GNU message catalog functions. */
|
||||
# include <libintl.h>
|
||||
|
||||
#else
|
||||
|
||||
# define gettext(Msgid) (Msgid)
|
||||
# define dgettext(Domainname, Msgid) (Msgid)
|
||||
# define dcgettext(Domainname, Msgid, Category) (Msgid)
|
||||
# define ngettext(Msgid1, Msgid2, N) \
|
||||
((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2))
|
||||
# define dngettext(Domainname, Msgid1, Msgid2, N) \
|
||||
((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2))
|
||||
# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \
|
||||
((N) == 1 ? (char *) (Msgid1) : (char *) (Msgid2))
|
||||
# define textdomain(Domainname) ((char *) (Domainname))
|
||||
# define bindtextdomain(Domainname, Dirname) ((char *) (Dirname))
|
||||
# define bind_textdomain_codeset(Domainname, Codeset) ((char *) (Codeset))
|
||||
|
||||
#endif
|
||||
|
||||
/* For automatical extraction of messages sometimes no real
|
||||
translation is needed. Instead the string itself is the result. */
|
||||
#define gettext_noop(Str) (Str)
|
||||
|
||||
#endif /* _LIBGETTEXT_H */
|
||||
@@ -0,0 +1,127 @@
|
||||
/* Message catalogs for internationalization.
|
||||
Copyright (C) 1995-1997, 2000, 2001 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. */
|
||||
|
||||
#ifndef _LIBINTL_H
|
||||
#define _LIBINTL_H 1
|
||||
|
||||
#include <locale.h>
|
||||
|
||||
/* The LC_MESSAGES locale category is the category used by the functions
|
||||
gettext() and dgettext(). It is specified in POSIX, but not in ANSI C.
|
||||
On systems that don't define it, use an arbitrary value instead.
|
||||
On Solaris, <locale.h> defines __LOCALE_H then includes <libintl.h> (i.e.
|
||||
this file!) and then only defines LC_MESSAGES. To avoid a redefinition
|
||||
warning, don't define LC_MESSAGES in this case. */
|
||||
#if !defined LC_MESSAGES && !defined __LOCALE_H
|
||||
# define LC_MESSAGES 1729
|
||||
#endif
|
||||
|
||||
/* We define an additional symbol to signal that we use the GNU
|
||||
implementation of gettext. */
|
||||
#define __USE_GNU_GETTEXT 1
|
||||
|
||||
/* Resolve a platform specific conflict on DJGPP. GNU gettext takes
|
||||
precedence over _conio_gettext. */
|
||||
#ifdef __DJGPP__
|
||||
# undef gettext
|
||||
# define gettext gettext
|
||||
#endif
|
||||
|
||||
#ifndef PARAMS
|
||||
# if __STDC__ || defined __cplusplus
|
||||
# define PARAMS(args) args
|
||||
# else
|
||||
# define PARAMS(args) ()
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Look up MSGID in the current default message catalog for the current
|
||||
LC_MESSAGES locale. If not found, returns MSGID itself (the default
|
||||
text). */
|
||||
extern char *gettext PARAMS ((const char *__msgid));
|
||||
|
||||
/* Look up MSGID in the DOMAINNAME message catalog for the current
|
||||
LC_MESSAGES locale. */
|
||||
extern char *dgettext PARAMS ((const char *__domainname, const char *__msgid));
|
||||
|
||||
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
|
||||
locale. */
|
||||
extern char *dcgettext PARAMS ((const char *__domainname, const char *__msgid,
|
||||
int __category));
|
||||
|
||||
|
||||
/* Similar to `gettext' but select the plural form corresponding to the
|
||||
number N. */
|
||||
extern char *ngettext PARAMS ((const char *__msgid1, const char *__msgid2,
|
||||
unsigned long int __n));
|
||||
|
||||
/* Similar to `dgettext' but select the plural form corresponding to the
|
||||
number N. */
|
||||
extern char *dngettext PARAMS ((const char *__domainname, const char *__msgid1,
|
||||
const char *__msgid2, unsigned long int __n));
|
||||
|
||||
/* Similar to `dcgettext' but select the plural form corresponding to the
|
||||
number N. */
|
||||
extern char *dcngettext PARAMS ((const char *__domainname, const char *__msgid1,
|
||||
const char *__msgid2, unsigned long int __n,
|
||||
int __category));
|
||||
|
||||
|
||||
/* Set the current default message catalog to DOMAINNAME.
|
||||
If DOMAINNAME is null, return the current default.
|
||||
If DOMAINNAME is "", reset to the default of "messages". */
|
||||
extern char *textdomain PARAMS ((const char *__domainname));
|
||||
|
||||
/* Specify that the DOMAINNAME message catalog will be found
|
||||
in DIRNAME rather than in the system locale data base. */
|
||||
extern char *bindtextdomain PARAMS ((const char *__domainname,
|
||||
const char *__dirname));
|
||||
|
||||
/* Specify the character encoding in which the messages from the
|
||||
DOMAINNAME message catalog will be returned. */
|
||||
extern char *bind_textdomain_codeset PARAMS ((const char *__domainname,
|
||||
const char *__codeset));
|
||||
|
||||
|
||||
/* Optimized version of the functions above. */
|
||||
#if defined __OPTIMIZED
|
||||
/* These are macros, but could also be inline functions. */
|
||||
|
||||
# define gettext(msgid) \
|
||||
dgettext (NULL, msgid)
|
||||
|
||||
# define dgettext(domainname, msgid) \
|
||||
dcgettext (domainname, msgid, LC_MESSAGES)
|
||||
|
||||
# define ngettext(msgid1, msgid2, n) \
|
||||
dngettext (NULL, msgid1, msgid2, n)
|
||||
|
||||
# define dngettext(domainname, msgid1, msgid2, n) \
|
||||
dcngettext (domainname, msgid1, msgid2, n, LC_MESSAGES)
|
||||
|
||||
#endif /* Optimizing. */
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* libintl.h */
|
||||
+108
@@ -0,0 +1,108 @@
|
||||
/* Copyright (C) 1996-1999, 2000, 2001 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ulrich Drepper <[email protected]>, 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. */
|
||||
|
||||
#ifndef _LOADINFO_H
|
||||
#define _LOADINFO_H 1
|
||||
|
||||
#ifndef PARAMS
|
||||
# if __STDC__
|
||||
# define PARAMS(args) args
|
||||
# else
|
||||
# define PARAMS(args) ()
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef internal_function
|
||||
# define internal_function
|
||||
#endif
|
||||
|
||||
/* Tell the compiler when a conditional or integer expression is
|
||||
almost always true or almost always false. */
|
||||
#ifndef HAVE_BUILTIN_EXPECT
|
||||
# define __builtin_expect(expr, val) (expr)
|
||||
#endif
|
||||
|
||||
/* Separator in PATH like lists of pathnames. */
|
||||
#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
|
||||
/* Win32, OS/2, DOS */
|
||||
# define PATH_SEPARATOR ';'
|
||||
#else
|
||||
/* Unix */
|
||||
# define PATH_SEPARATOR ':'
|
||||
#endif
|
||||
|
||||
/* Encoding of locale name parts. */
|
||||
#define CEN_REVISION 1
|
||||
#define CEN_SPONSOR 2
|
||||
#define CEN_SPECIAL 4
|
||||
#define XPG_NORM_CODESET 8
|
||||
#define XPG_CODESET 16
|
||||
#define TERRITORY 32
|
||||
#define CEN_AUDIENCE 64
|
||||
#define XPG_MODIFIER 128
|
||||
|
||||
#define CEN_SPECIFIC (CEN_REVISION|CEN_SPONSOR|CEN_SPECIAL|CEN_AUDIENCE)
|
||||
#define XPG_SPECIFIC (XPG_CODESET|XPG_NORM_CODESET|XPG_MODIFIER)
|
||||
|
||||
|
||||
struct loaded_l10nfile
|
||||
{
|
||||
const char *filename;
|
||||
int decided;
|
||||
|
||||
const void *data;
|
||||
|
||||
struct loaded_l10nfile *next;
|
||||
struct loaded_l10nfile *successor[1];
|
||||
};
|
||||
|
||||
|
||||
/* Normalize codeset name. There is no standard for the codeset
|
||||
names. Normalization allows the user to use any of the common
|
||||
names. The return value is dynamically allocated and has to be
|
||||
freed by the caller. */
|
||||
extern const char *_nl_normalize_codeset PARAMS ((const char *codeset,
|
||||
size_t name_len));
|
||||
|
||||
extern struct loaded_l10nfile *
|
||||
_nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list,
|
||||
const char *dirlist, size_t dirlist_len, int mask,
|
||||
const char *language, const char *territory,
|
||||
const char *codeset,
|
||||
const char *normalized_codeset,
|
||||
const char *modifier, const char *special,
|
||||
const char *sponsor, const char *revision,
|
||||
const char *filename, int do_allocate));
|
||||
|
||||
|
||||
extern const char *_nl_expand_alias PARAMS ((const char *name));
|
||||
|
||||
/* normalized_codeset is dynamically allocated and has to be freed by
|
||||
the caller. */
|
||||
extern int _nl_explode_name PARAMS ((char *name, const char **language,
|
||||
const char **modifier,
|
||||
const char **territory,
|
||||
const char **codeset,
|
||||
const char **normalized_codeset,
|
||||
const char **special,
|
||||
const char **sponsor,
|
||||
const char **revision));
|
||||
|
||||
extern char *_nl_find_language PARAMS ((const char *name));
|
||||
|
||||
#endif /* loadinfo.h */
|
||||
@@ -0,0 +1,566 @@
|
||||
/* Load needed message catalogs.
|
||||
Copyright (C) 1995-1999, 2000, 2001 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. */
|
||||
|
||||
/* Tell glibc's <string.h> to provide a prototype for mempcpy().
|
||||
This must come before <config.h> because <config.h> may include
|
||||
<features.h>, and once <features.h> has been included, it's too late. */
|
||||
#ifndef _GNU_SOURCE
|
||||
# define _GNU_SOURCE 1
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#ifdef __GNUC__
|
||||
# define alloca __builtin_alloca
|
||||
# define HAVE_ALLOCA 1
|
||||
#else
|
||||
# if defined HAVE_ALLOCA_H || defined _LIBC
|
||||
# include <alloca.h>
|
||||
# else
|
||||
# ifdef _AIX
|
||||
#pragma alloca
|
||||
# else
|
||||
# ifndef alloca
|
||||
char *alloca ();
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#if defined HAVE_UNISTD_H || defined _LIBC
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
#ifdef _LIBC
|
||||
# include <langinfo.h>
|
||||
# include <locale.h>
|
||||
#endif
|
||||
|
||||
#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
|
||||
|| (defined _LIBC && defined _POSIX_MAPPED_FILES)
|
||||
# include <sys/mman.h>
|
||||
# undef HAVE_MMAP
|
||||
# define HAVE_MMAP 1
|
||||
#else
|
||||
# undef HAVE_MMAP
|
||||
#endif
|
||||
|
||||
#include "gettext.h"
|
||||
#include "gettextP.h"
|
||||
|
||||
#ifdef _LIBC
|
||||
# include "../locale/localeinfo.h"
|
||||
#endif
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
#ifdef _LIBC
|
||||
/* Rename the non ISO C functions. This is required by the standard
|
||||
because some ISO C functions will require linking with this object
|
||||
file and the name space must not be polluted. */
|
||||
# define open __open
|
||||
# define close __close
|
||||
# define read __read
|
||||
# define mmap __mmap
|
||||
# define munmap __munmap
|
||||
#endif
|
||||
|
||||
/* Names for the libintl functions are a problem. They must not clash
|
||||
with existing names and they should follow ANSI C. But this source
|
||||
code is also used in GNU C Library where the names have a __
|
||||
prefix. So we have to make a difference here. */
|
||||
#ifdef _LIBC
|
||||
# define PLURAL_PARSE __gettextparse
|
||||
#else
|
||||
# define PLURAL_PARSE gettextparse__
|
||||
#endif
|
||||
|
||||
/* For those losing systems which don't have `alloca' we have to add
|
||||
some additional code emulating it. */
|
||||
#ifdef HAVE_ALLOCA
|
||||
# define freea(p) /* nothing */
|
||||
#else
|
||||
# define alloca(n) malloc (n)
|
||||
# define freea(p) free (p)
|
||||
#endif
|
||||
|
||||
/* For systems that distinguish between text and binary I/O.
|
||||
O_BINARY is usually declared in <fcntl.h>. */
|
||||
#if !defined O_BINARY && defined _O_BINARY
|
||||
/* For MSC-compatible compilers. */
|
||||
# define O_BINARY _O_BINARY
|
||||
# define O_TEXT _O_TEXT
|
||||
#endif
|
||||
#ifdef __BEOS__
|
||||
/* BeOS 5 has O_BINARY and O_TEXT, but they have no effect. */
|
||||
# undef O_BINARY
|
||||
# undef O_TEXT
|
||||
#endif
|
||||
/* On reasonable systems, binary I/O is the default. */
|
||||
#ifndef O_BINARY
|
||||
# define O_BINARY 0
|
||||
#endif
|
||||
|
||||
/* We need a sign, whether a new catalog was loaded, which can be associated
|
||||
with all translations. This is important if the translations are
|
||||
cached by one of GCC's features. */
|
||||
int _nl_msg_cat_cntr;
|
||||
|
||||
#if (defined __GNUC__ && !defined __APPLE_CC__) \
|
||||
|| (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)
|
||||
|
||||
/* These structs are the constant expression for the germanic plural
|
||||
form determination. It represents the expression "n != 1". */
|
||||
static const struct expression plvar =
|
||||
{
|
||||
.nargs = 0,
|
||||
.operation = var,
|
||||
};
|
||||
static const struct expression plone =
|
||||
{
|
||||
.nargs = 0,
|
||||
.operation = num,
|
||||
.val =
|
||||
{
|
||||
.num = 1
|
||||
}
|
||||
};
|
||||
static struct expression germanic_plural =
|
||||
{
|
||||
.nargs = 2,
|
||||
.operation = not_equal,
|
||||
.val =
|
||||
{
|
||||
.args =
|
||||
{
|
||||
[0] = (struct expression *) &plvar,
|
||||
[1] = (struct expression *) &plone
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
# define INIT_GERMANIC_PLURAL()
|
||||
|
||||
#else
|
||||
|
||||
/* For compilers without support for ISO C 99 struct/union initializers:
|
||||
Initialization at run-time. */
|
||||
|
||||
static struct expression plvar;
|
||||
static struct expression plone;
|
||||
static struct expression germanic_plural;
|
||||
|
||||
static void
|
||||
init_germanic_plural ()
|
||||
{
|
||||
if (plone.val.num == 0)
|
||||
{
|
||||
plvar.nargs = 0;
|
||||
plvar.operation = var;
|
||||
|
||||
plone.nargs = 0;
|
||||
plone.operation = num;
|
||||
plone.val.num = 1;
|
||||
|
||||
germanic_plural.nargs = 2;
|
||||
germanic_plural.operation = not_equal;
|
||||
germanic_plural.val.args[0] = &plvar;
|
||||
germanic_plural.val.args[1] = &plone;
|
||||
}
|
||||
}
|
||||
|
||||
# define INIT_GERMANIC_PLURAL() init_germanic_plural ()
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
/* Initialize the codeset dependent parts of an opened message catalog.
|
||||
Return the header entry. */
|
||||
const char *
|
||||
internal_function
|
||||
_nl_init_domain_conv (domain_file, domain, domainbinding)
|
||||
struct loaded_l10nfile *domain_file;
|
||||
struct loaded_domain *domain;
|
||||
struct binding *domainbinding;
|
||||
{
|
||||
/* Find out about the character set the file is encoded with.
|
||||
This can be found (in textual form) in the entry "". If this
|
||||
entry does not exist or if this does not contain the `charset='
|
||||
information, we will assume the charset matches the one the
|
||||
current locale and we don't have to perform any conversion. */
|
||||
char *nullentry;
|
||||
size_t nullentrylen;
|
||||
|
||||
/* Preinitialize fields, to avoid recursion during _nl_find_msg. */
|
||||
domain->codeset_cntr =
|
||||
(domainbinding != NULL ? domainbinding->codeset_cntr : 0);
|
||||
#ifdef _LIBC
|
||||
domain->conv = (__gconv_t) -1;
|
||||
#else
|
||||
# if HAVE_ICONV
|
||||
domain->conv = (iconv_t) -1;
|
||||
# endif
|
||||
#endif
|
||||
domain->conv_tab = NULL;
|
||||
|
||||
/* Get the header entry. */
|
||||
nullentry = _nl_find_msg (domain_file, domainbinding, "", &nullentrylen);
|
||||
|
||||
if (nullentry != NULL)
|
||||
{
|
||||
#if defined _LIBC || HAVE_ICONV
|
||||
const char *charsetstr;
|
||||
|
||||
charsetstr = strstr (nullentry, "charset=");
|
||||
if (charsetstr != NULL)
|
||||
{
|
||||
size_t len;
|
||||
char *charset;
|
||||
const char *outcharset;
|
||||
|
||||
charsetstr += strlen ("charset=");
|
||||
len = strcspn (charsetstr, " \t\n");
|
||||
|
||||
charset = (char *) alloca (len + 1);
|
||||
# if defined _LIBC || HAVE_MEMPCPY
|
||||
*((char *) mempcpy (charset, charsetstr, len)) = '\0';
|
||||
# else
|
||||
memcpy (charset, charsetstr, len);
|
||||
charset[len] = '\0';
|
||||
# endif
|
||||
|
||||
/* The output charset should normally be determined by the
|
||||
locale. But sometimes the locale is not used or not correctly
|
||||
set up, so we provide a possibility for the user to override
|
||||
this. Moreover, the value specified through
|
||||
bind_textdomain_codeset overrides both. */
|
||||
if (domainbinding != NULL && domainbinding->codeset != NULL)
|
||||
outcharset = domainbinding->codeset;
|
||||
else
|
||||
{
|
||||
outcharset = getenv ("OUTPUT_CHARSET");
|
||||
if (outcharset == NULL || outcharset[0] == '\0')
|
||||
{
|
||||
# ifdef _LIBC
|
||||
outcharset = (*_nl_current[LC_CTYPE])->values[_NL_ITEM_INDEX (CODESET)].string;
|
||||
# else
|
||||
# if HAVE_ICONV
|
||||
extern const char *locale_charset (void);
|
||||
outcharset = locale_charset ();
|
||||
# endif
|
||||
# endif
|
||||
}
|
||||
}
|
||||
|
||||
# ifdef _LIBC
|
||||
/* We always want to use transliteration. */
|
||||
outcharset = norm_add_slashes (outcharset, "TRANSLIT");
|
||||
charset = norm_add_slashes (charset, NULL);
|
||||
if (__gconv_open (outcharset, charset, &domain->conv,
|
||||
GCONV_AVOID_NOCONV)
|
||||
!= __GCONV_OK)
|
||||
domain->conv = (__gconv_t) -1;
|
||||
# else
|
||||
# if HAVE_ICONV
|
||||
/* When using GNU libiconv, we want to use transliteration. */
|
||||
# if _LIBICONV_VERSION >= 0x0105
|
||||
len = strlen (outcharset);
|
||||
{
|
||||
char *tmp = (char *) alloca (len + 10 + 1);
|
||||
memcpy (tmp, outcharset, len);
|
||||
memcpy (tmp + len, "//TRANSLIT", 10 + 1);
|
||||
outcharset = tmp;
|
||||
}
|
||||
# endif
|
||||
domain->conv = iconv_open (outcharset, charset);
|
||||
# if _LIBICONV_VERSION >= 0x0105
|
||||
freea (outcharset);
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
|
||||
freea (charset);
|
||||
}
|
||||
#endif /* _LIBC || HAVE_ICONV */
|
||||
}
|
||||
|
||||
return nullentry;
|
||||
}
|
||||
|
||||
/* Frees the codeset dependent parts of an opened message catalog. */
|
||||
void
|
||||
internal_function
|
||||
_nl_free_domain_conv (domain)
|
||||
struct loaded_domain *domain;
|
||||
{
|
||||
if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1)
|
||||
free (domain->conv_tab);
|
||||
|
||||
#ifdef _LIBC
|
||||
if (domain->conv != (__gconv_t) -1)
|
||||
__gconv_close (domain->conv);
|
||||
#else
|
||||
# if HAVE_ICONV
|
||||
if (domain->conv != (iconv_t) -1)
|
||||
iconv_close (domain->conv);
|
||||
# endif
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Load the message catalogs specified by FILENAME. If it is no valid
|
||||
message catalog do nothing. */
|
||||
void
|
||||
internal_function
|
||||
_nl_load_domain (domain_file, domainbinding)
|
||||
struct loaded_l10nfile *domain_file;
|
||||
struct binding *domainbinding;
|
||||
{
|
||||
int fd;
|
||||
size_t size;
|
||||
#ifdef _LIBC
|
||||
struct stat64 st;
|
||||
#else
|
||||
struct stat st;
|
||||
#endif
|
||||
struct mo_file_header *data = (struct mo_file_header *) -1;
|
||||
int use_mmap = 0;
|
||||
struct loaded_domain *domain;
|
||||
const char *nullentry;
|
||||
|
||||
domain_file->decided = 1;
|
||||
domain_file->data = NULL;
|
||||
|
||||
/* Note that it would be useless to store domainbinding in domain_file
|
||||
because domainbinding might be == NULL now but != NULL later (after
|
||||
a call to bind_textdomain_codeset). */
|
||||
|
||||
/* If the record does not represent a valid locale the FILENAME
|
||||
might be NULL. This can happen when according to the given
|
||||
specification the locale file name is different for XPG and CEN
|
||||
syntax. */
|
||||
if (domain_file->filename == NULL)
|
||||
return;
|
||||
|
||||
/* Try to open the addressed file. */
|
||||
fd = open (domain_file->filename, O_RDONLY | O_BINARY);
|
||||
if (fd == -1)
|
||||
return;
|
||||
|
||||
/* We must know about the size of the file. */
|
||||
if (
|
||||
#ifdef _LIBC
|
||||
__builtin_expect (fstat64 (fd, &st) != 0, 0)
|
||||
#else
|
||||
__builtin_expect (fstat (fd, &st) != 0, 0)
|
||||
#endif
|
||||
|| __builtin_expect ((size = (size_t) st.st_size) != st.st_size, 0)
|
||||
|| __builtin_expect (size < sizeof (struct mo_file_header), 0))
|
||||
{
|
||||
/* Something went wrong. */
|
||||
close (fd);
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef HAVE_MMAP
|
||||
/* Now we are ready to load the file. If mmap() is available we try
|
||||
this first. If not available or it failed we try to load it. */
|
||||
data = (struct mo_file_header *) mmap (NULL, size, PROT_READ,
|
||||
MAP_PRIVATE, fd, 0);
|
||||
|
||||
if (__builtin_expect (data != (struct mo_file_header *) -1, 1))
|
||||
{
|
||||
/* mmap() call was successful. */
|
||||
close (fd);
|
||||
use_mmap = 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* If the data is not yet available (i.e. mmap'ed) we try to load
|
||||
it manually. */
|
||||
if (data == (struct mo_file_header *) -1)
|
||||
{
|
||||
size_t to_read;
|
||||
char *read_ptr;
|
||||
|
||||
data = (struct mo_file_header *) malloc (size);
|
||||
if (data == NULL)
|
||||
return;
|
||||
|
||||
to_read = size;
|
||||
read_ptr = (char *) data;
|
||||
do
|
||||
{
|
||||
long int nb = (long int) read (fd, read_ptr, to_read);
|
||||
if (nb <= 0)
|
||||
{
|
||||
#ifdef EINTR
|
||||
if (nb == -1 && errno == EINTR)
|
||||
continue;
|
||||
#endif
|
||||
close (fd);
|
||||
return;
|
||||
}
|
||||
read_ptr += nb;
|
||||
to_read -= nb;
|
||||
}
|
||||
while (to_read > 0);
|
||||
|
||||
close (fd);
|
||||
}
|
||||
|
||||
/* Using the magic number we can test whether it really is a message
|
||||
catalog file. */
|
||||
if (__builtin_expect (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED,
|
||||
0))
|
||||
{
|
||||
/* The magic number is wrong: not a message catalog file. */
|
||||
#ifdef HAVE_MMAP
|
||||
if (use_mmap)
|
||||
munmap ((caddr_t) data, size);
|
||||
else
|
||||
#endif
|
||||
free (data);
|
||||
return;
|
||||
}
|
||||
|
||||
domain = (struct loaded_domain *) malloc (sizeof (struct loaded_domain));
|
||||
if (domain == NULL)
|
||||
return;
|
||||
domain_file->data = domain;
|
||||
|
||||
domain->data = (char *) data;
|
||||
domain->use_mmap = use_mmap;
|
||||
domain->mmap_size = size;
|
||||
domain->must_swap = data->magic != _MAGIC;
|
||||
|
||||
/* Fill in the information about the available tables. */
|
||||
switch (W (domain->must_swap, data->revision))
|
||||
{
|
||||
case 0:
|
||||
domain->nstrings = W (domain->must_swap, data->nstrings);
|
||||
domain->orig_tab = (struct string_desc *)
|
||||
((char *) data + W (domain->must_swap, data->orig_tab_offset));
|
||||
domain->trans_tab = (struct string_desc *)
|
||||
((char *) data + W (domain->must_swap, data->trans_tab_offset));
|
||||
domain->hash_size = W (domain->must_swap, data->hash_tab_size);
|
||||
domain->hash_tab = (nls_uint32 *)
|
||||
((char *) data + W (domain->must_swap, data->hash_tab_offset));
|
||||
break;
|
||||
default:
|
||||
/* This is an invalid revision. */
|
||||
#ifdef HAVE_MMAP
|
||||
if (use_mmap)
|
||||
munmap ((caddr_t) data, size);
|
||||
else
|
||||
#endif
|
||||
free (data);
|
||||
free (domain);
|
||||
domain_file->data = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Now initialize the character set converter from the character set
|
||||
the file is encoded with (found in the header entry) to the domain's
|
||||
specified character set or the locale's character set. */
|
||||
nullentry = _nl_init_domain_conv (domain_file, domain, domainbinding);
|
||||
|
||||
/* Also look for a plural specification. */
|
||||
if (nullentry != NULL)
|
||||
{
|
||||
const char *plural;
|
||||
const char *nplurals;
|
||||
|
||||
plural = strstr (nullentry, "plural=");
|
||||
nplurals = strstr (nullentry, "nplurals=");
|
||||
if (plural == NULL || nplurals == NULL)
|
||||
goto no_plural;
|
||||
else
|
||||
{
|
||||
/* First get the number. */
|
||||
char *endp;
|
||||
unsigned long int n;
|
||||
struct parse_args args;
|
||||
|
||||
nplurals += 9;
|
||||
while (*nplurals != '\0' && isspace (*nplurals))
|
||||
++nplurals;
|
||||
#if defined HAVE_STRTOUL || defined _LIBC
|
||||
n = strtoul (nplurals, &endp, 10);
|
||||
#else
|
||||
for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++)
|
||||
n = n * 10 + (*endp - '0');
|
||||
#endif
|
||||
domain->nplurals = n;
|
||||
if (nplurals == endp)
|
||||
goto no_plural;
|
||||
|
||||
/* Due to the restrictions bison imposes onto the interface of the
|
||||
scanner function we have to put the input string and the result
|
||||
passed up from the parser into the same structure which address
|
||||
is passed down to the parser. */
|
||||
plural += 7;
|
||||
args.cp = plural;
|
||||
if (PLURAL_PARSE (&args) != 0)
|
||||
goto no_plural;
|
||||
domain->plural = args.res;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* By default we are using the Germanic form: singular form only
|
||||
for `one', the plural form otherwise. Yes, this is also what
|
||||
English is using since English is a Germanic language. */
|
||||
no_plural:
|
||||
INIT_GERMANIC_PLURAL ();
|
||||
domain->plural = &germanic_plural;
|
||||
domain->nplurals = 2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#ifdef _LIBC
|
||||
void
|
||||
internal_function
|
||||
_nl_unload_domain (domain)
|
||||
struct loaded_domain *domain;
|
||||
{
|
||||
if (domain->plural != &germanic_plural)
|
||||
__gettext_free_exp (domain->plural);
|
||||
|
||||
_nl_free_domain_conv (domain);
|
||||
|
||||
# ifdef _POSIX_MAPPED_FILES
|
||||
if (domain->use_mmap)
|
||||
munmap ((caddr_t) domain->data, domain->mmap_size);
|
||||
else
|
||||
# endif /* _POSIX_MAPPED_FILES */
|
||||
free ((void *) domain->data);
|
||||
|
||||
free (domain);
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,271 @@
|
||||
/* Determine a canonical name for the current locale's character encoding.
|
||||
|
||||
Copyright (C) 2000-2001 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU Library 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
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library 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. */
|
||||
|
||||
/* Written by Bruno Haible <[email protected]>. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_STDDEF_H
|
||||
# include <stddef.h>
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#if HAVE_STRING_H
|
||||
# include <string.h>
|
||||
#else
|
||||
# include <strings.h>
|
||||
#endif
|
||||
#if HAVE_STDLIB_H
|
||||
# include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#if defined _WIN32 || defined __WIN32__
|
||||
# undef WIN32 /* avoid warning on mingw32 */
|
||||
# define WIN32
|
||||
#endif
|
||||
|
||||
#ifndef WIN32
|
||||
# if HAVE_LANGINFO_CODESET
|
||||
# include <langinfo.h>
|
||||
# else
|
||||
# if HAVE_SETLOCALE
|
||||
# include <locale.h>
|
||||
# endif
|
||||
# endif
|
||||
#else /* WIN32 */
|
||||
# define WIN32_LEAN_AND_MEAN
|
||||
# include <windows.h>
|
||||
#endif
|
||||
|
||||
#ifndef DIRECTORY_SEPARATOR
|
||||
# define DIRECTORY_SEPARATOR '/'
|
||||
#endif
|
||||
|
||||
#ifndef ISSLASH
|
||||
# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
|
||||
#endif
|
||||
|
||||
/* The following static variable is declared 'volatile' to avoid a
|
||||
possible multithread problem in the function get_charset_aliases. If we
|
||||
are running in a threaded environment, and if two threads initialize
|
||||
'charset_aliases' simultaneously, both will produce the same value,
|
||||
and everything will be ok if the two assignments to 'charset_aliases'
|
||||
are atomic. But I don't know what will happen if the two assignments mix. */
|
||||
#if __STDC__ != 1
|
||||
# define volatile /* empty */
|
||||
#endif
|
||||
/* Pointer to the contents of the charset.alias file, if it has already been
|
||||
read, else NULL. Its format is:
|
||||
ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */
|
||||
static const char * volatile charset_aliases;
|
||||
|
||||
/* Return a pointer to the contents of the charset.alias file. */
|
||||
static const char *
|
||||
get_charset_aliases ()
|
||||
{
|
||||
const char *cp;
|
||||
|
||||
cp = charset_aliases;
|
||||
if (cp == NULL)
|
||||
{
|
||||
#ifndef WIN32
|
||||
FILE *fp;
|
||||
const char *dir = LIBDIR;
|
||||
const char *base = "charset.alias";
|
||||
char *file_name;
|
||||
|
||||
/* Concatenate dir and base into freshly allocated file_name. */
|
||||
{
|
||||
size_t dir_len = strlen (dir);
|
||||
size_t base_len = strlen (base);
|
||||
int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1]));
|
||||
file_name = (char *) malloc (dir_len + add_slash + base_len + 1);
|
||||
if (file_name != NULL)
|
||||
{
|
||||
memcpy (file_name, dir, dir_len);
|
||||
if (add_slash)
|
||||
file_name[dir_len] = DIRECTORY_SEPARATOR;
|
||||
memcpy (file_name + dir_len + add_slash, base, base_len + 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL)
|
||||
/* Out of memory or file not found, treat it as empty. */
|
||||
cp = "";
|
||||
else
|
||||
{
|
||||
/* Parse the file's contents. */
|
||||
int c;
|
||||
char buf1[50+1];
|
||||
char buf2[50+1];
|
||||
char *res_ptr = NULL;
|
||||
size_t res_size = 0;
|
||||
size_t l1, l2;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
c = getc (fp);
|
||||
if (c == EOF)
|
||||
break;
|
||||
if (c == '\n' || c == ' ' || c == '\t')
|
||||
continue;
|
||||
if (c == '#')
|
||||
{
|
||||
/* Skip comment, to end of line. */
|
||||
do
|
||||
c = getc (fp);
|
||||
while (!(c == EOF || c == '\n'));
|
||||
if (c == EOF)
|
||||
break;
|
||||
continue;
|
||||
}
|
||||
ungetc (c, fp);
|
||||
if (fscanf(fp, "%50s %50s", buf1, buf2) < 2)
|
||||
break;
|
||||
l1 = strlen (buf1);
|
||||
l2 = strlen (buf2);
|
||||
if (res_size == 0)
|
||||
{
|
||||
res_size = l1 + 1 + l2 + 1;
|
||||
res_ptr = malloc (res_size + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
res_size += l1 + 1 + l2 + 1;
|
||||
res_ptr = realloc (res_ptr, res_size + 1);
|
||||
}
|
||||
if (res_ptr == NULL)
|
||||
{
|
||||
/* Out of memory. */
|
||||
res_size = 0;
|
||||
break;
|
||||
}
|
||||
strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
|
||||
strcpy (res_ptr + res_size - (l2 + 1), buf2);
|
||||
}
|
||||
fclose (fp);
|
||||
if (res_size == 0)
|
||||
cp = "";
|
||||
else
|
||||
{
|
||||
*(res_ptr + res_size) = '\0';
|
||||
cp = res_ptr;
|
||||
}
|
||||
}
|
||||
|
||||
if (file_name != NULL)
|
||||
free (file_name);
|
||||
|
||||
#else /* WIN32 */
|
||||
|
||||
/* To avoid the troubles of installing a separate file in the same
|
||||
directory as the DLL and of retrieving the DLL's directory at
|
||||
runtime, simply inline the aliases here. */
|
||||
|
||||
cp = "CP936" "\0" "GBK" "\0"
|
||||
"CP1361" "\0" "JOHAB" "\0";
|
||||
#endif
|
||||
|
||||
charset_aliases = cp;
|
||||
}
|
||||
|
||||
return cp;
|
||||
}
|
||||
|
||||
/* Determine the current locale's character encoding, and canonicalize it
|
||||
into one of the canonical names listed in config.charset.
|
||||
The result must not be freed; it is statically allocated.
|
||||
If the canonical name cannot be determined, the result is a non-canonical
|
||||
name. */
|
||||
|
||||
#ifdef STATIC
|
||||
STATIC
|
||||
#endif
|
||||
const char *
|
||||
locale_charset ()
|
||||
{
|
||||
const char *codeset;
|
||||
const char *aliases;
|
||||
|
||||
#ifndef WIN32
|
||||
|
||||
# if HAVE_LANGINFO_CODESET
|
||||
|
||||
/* Most systems support nl_langinfo (CODESET) nowadays. */
|
||||
codeset = nl_langinfo (CODESET);
|
||||
|
||||
# else
|
||||
|
||||
/* On old systems which lack it, use setlocale or getenv. */
|
||||
const char *locale = NULL;
|
||||
|
||||
/* But most old systems don't have a complete set of locales. Some
|
||||
(like SunOS 4 or DJGPP) have only the C locale. Therefore we don't
|
||||
use setlocale here; it would return "C" when it doesn't support the
|
||||
locale name the user has set. */
|
||||
# if HAVE_SETLOCALE && 0
|
||||
locale = setlocale (LC_CTYPE, NULL);
|
||||
# endif
|
||||
if (locale == NULL || locale[0] == '\0')
|
||||
{
|
||||
locale = getenv ("LC_ALL");
|
||||
if (locale == NULL || locale[0] == '\0')
|
||||
{
|
||||
locale = getenv ("LC_CTYPE");
|
||||
if (locale == NULL || locale[0] == '\0')
|
||||
locale = getenv ("LANG");
|
||||
}
|
||||
}
|
||||
|
||||
/* On some old systems, one used to set locale = "iso8859_1". On others,
|
||||
you set it to "language_COUNTRY.charset". In any case, we resolve it
|
||||
through the charset.alias file. */
|
||||
codeset = locale;
|
||||
|
||||
# endif
|
||||
|
||||
#else /* WIN32 */
|
||||
|
||||
static char buf[2 + 10 + 1];
|
||||
|
||||
/* Win32 has a function returning the locale's codepage as a number. */
|
||||
sprintf (buf, "CP%u", GetACP ());
|
||||
codeset = buf;
|
||||
|
||||
#endif
|
||||
|
||||
if (codeset == NULL)
|
||||
/* The canonical name cannot be determined. */
|
||||
codeset = "";
|
||||
|
||||
/* Resolve alias. */
|
||||
for (aliases = get_charset_aliases ();
|
||||
*aliases != '\0';
|
||||
aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
|
||||
if (strcmp (codeset, aliases) == 0
|
||||
|| (aliases[0] == '*' && aliases[1] == '\0'))
|
||||
{
|
||||
codeset = aliases + strlen (aliases) + 1;
|
||||
break;
|
||||
}
|
||||
|
||||
return codeset;
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
# Locale name alias data base.
|
||||
# Copyright (C) 1996,1997,1998,1999,2000,2001 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.
|
||||
|
||||
# The format of this file is the same as for the corresponding file of
|
||||
# the X Window System, which normally can be found in
|
||||
# /usr/lib/X11/locale/locale.alias
|
||||
# A single line contains two fields: an alias and a substitution value.
|
||||
# All entries are case independent.
|
||||
|
||||
# Note: This file is far from being complete. If you have a value for
|
||||
# your own site which you think might be useful for others too, share
|
||||
# it with the rest of us. Send it using the `glibcbug' script to
|
||||
# [email protected].
|
||||
|
||||
# Packages using this file:
|
||||
|
||||
bokmal no_NO.ISO-8859-1
|
||||
bokmål no_NO.ISO-8859-1
|
||||
catalan ca_ES.ISO-8859-1
|
||||
croatian hr_HR.ISO-8859-2
|
||||
czech cs_CZ.ISO-8859-2
|
||||
danish da_DK.ISO-8859-1
|
||||
dansk da_DK.ISO-8859-1
|
||||
deutsch de_DE.ISO-8859-1
|
||||
dutch nl_NL.ISO-8859-1
|
||||
eesti et_EE.ISO-8859-1
|
||||
estonian et_EE.ISO-8859-1
|
||||
finnish fi_FI.ISO-8859-1
|
||||
français fr_FR.ISO-8859-1
|
||||
french fr_FR.ISO-8859-1
|
||||
galego gl_ES.ISO-8859-1
|
||||
galician gl_ES.ISO-8859-1
|
||||
german de_DE.ISO-8859-1
|
||||
greek el_GR.ISO-8859-7
|
||||
hebrew iw_IL.ISO-8859-8
|
||||
hrvatski hr_HR.ISO-8859-2
|
||||
hungarian hu_HU.ISO-8859-2
|
||||
icelandic is_IS.ISO-8859-1
|
||||
italian it_IT.ISO-8859-1
|
||||
japanese ja_JP.eucJP
|
||||
japanese.euc ja_JP.eucJP
|
||||
ja_JP ja_JP.eucJP
|
||||
ja_JP.ujis ja_JP.eucJP
|
||||
japanese.sjis ja_JP.SJIS
|
||||
korean ko_KR.eucKR
|
||||
korean.euc ko_KR.eucKR
|
||||
ko_KR ko_KR.eucKR
|
||||
lithuanian lt_LT.ISO-8859-13
|
||||
nb_NO no_NO.ISO-8859-1
|
||||
nb_NO.ISO-8859-1 no_NO.ISO-8859-1
|
||||
norwegian no_NO.ISO-8859-1
|
||||
nynorsk nn_NO.ISO-8859-1
|
||||
polish pl_PL.ISO-8859-2
|
||||
portuguese pt_PT.ISO-8859-1
|
||||
romanian ro_RO.ISO-8859-2
|
||||
russian ru_RU.ISO-8859-5
|
||||
slovak sk_SK.ISO-8859-2
|
||||
slovene sl_SI.ISO-8859-2
|
||||
slovenian sl_SI.ISO-8859-2
|
||||
spanish es_ES.ISO-8859-1
|
||||
swedish sv_SE.ISO-8859-1
|
||||
thai th_TH.TIS-620
|
||||
turkish tr_TR.ISO-8859-9
|
||||
@@ -0,0 +1,403 @@
|
||||
/* Handle aliases for locale names.
|
||||
Copyright (C) 1995-1999, 2000, 2001 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. */
|
||||
|
||||
/* Tell glibc's <string.h> to provide a prototype for mempcpy().
|
||||
This must come before <config.h> because <config.h> may include
|
||||
<features.h>, and once <features.h> has been included, it's too late. */
|
||||
#ifndef _GNU_SOURCE
|
||||
# define _GNU_SOURCE 1
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <ctype.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifdef __GNUC__
|
||||
# define alloca __builtin_alloca
|
||||
# define HAVE_ALLOCA 1
|
||||
#else
|
||||
# if defined HAVE_ALLOCA_H || defined _LIBC
|
||||
# include <alloca.h>
|
||||
# else
|
||||
# ifdef _AIX
|
||||
#pragma alloca
|
||||
# else
|
||||
# ifndef alloca
|
||||
char *alloca ();
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <string.h>
|
||||
#if !HAVE_STRCHR && !defined _LIBC
|
||||
# ifndef strchr
|
||||
# define strchr index
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include "gettextP.h"
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
#ifdef _LIBC
|
||||
/* Rename the non ANSI C functions. This is required by the standard
|
||||
because some ANSI C functions will require linking with this object
|
||||
file and the name space must not be polluted. */
|
||||
# define strcasecmp __strcasecmp
|
||||
|
||||
# ifndef mempcpy
|
||||
# define mempcpy __mempcpy
|
||||
# endif
|
||||
# define HAVE_MEMPCPY 1
|
||||
|
||||
/* We need locking here since we can be called from different places. */
|
||||
# include <bits/libc-lock.h>
|
||||
|
||||
__libc_lock_define_initialized (static, lock);
|
||||
#endif
|
||||
|
||||
#ifndef internal_function
|
||||
# define internal_function
|
||||
#endif
|
||||
|
||||
/* For those losing systems which don't have `alloca' we have to add
|
||||
some additional code emulating it. */
|
||||
#ifdef HAVE_ALLOCA
|
||||
# define freea(p) /* nothing */
|
||||
#else
|
||||
# define alloca(n) malloc (n)
|
||||
# define freea(p) free (p)
|
||||
#endif
|
||||
|
||||
#if defined _LIBC_REENTRANT || defined HAVE_FGETS_UNLOCKED
|
||||
# undef fgets
|
||||
# define fgets(buf, len, s) fgets_unlocked (buf, len, s)
|
||||
#endif
|
||||
#if defined _LIBC_REENTRANT || defined HAVE_FEOF_UNLOCKED
|
||||
# undef feof
|
||||
# define feof(s) feof_unlocked (s)
|
||||
#endif
|
||||
|
||||
|
||||
struct alias_map
|
||||
{
|
||||
const char *alias;
|
||||
const char *value;
|
||||
};
|
||||
|
||||
|
||||
static char *string_space;
|
||||
static size_t string_space_act;
|
||||
static size_t string_space_max;
|
||||
static struct alias_map *map;
|
||||
static size_t nmap;
|
||||
static size_t maxmap;
|
||||
|
||||
|
||||
/* Prototypes for local functions. */
|
||||
static size_t read_alias_file PARAMS ((const char *fname, int fname_len))
|
||||
internal_function;
|
||||
static int extend_alias_table PARAMS ((void));
|
||||
static int alias_compare PARAMS ((const struct alias_map *map1,
|
||||
const struct alias_map *map2));
|
||||
|
||||
|
||||
const char *
|
||||
_nl_expand_alias (name)
|
||||
const char *name;
|
||||
{
|
||||
static const char *locale_alias_path = LOCALE_ALIAS_PATH;
|
||||
struct alias_map *retval;
|
||||
const char *result = NULL;
|
||||
size_t added;
|
||||
|
||||
#ifdef _LIBC
|
||||
__libc_lock_lock (lock);
|
||||
#endif
|
||||
|
||||
do
|
||||
{
|
||||
struct alias_map item;
|
||||
|
||||
item.alias = name;
|
||||
|
||||
if (nmap > 0)
|
||||
retval = (struct alias_map *) bsearch (&item, map, nmap,
|
||||
sizeof (struct alias_map),
|
||||
(int (*) PARAMS ((const void *,
|
||||
const void *))
|
||||
) alias_compare);
|
||||
else
|
||||
retval = NULL;
|
||||
|
||||
/* We really found an alias. Return the value. */
|
||||
if (retval != NULL)
|
||||
{
|
||||
result = retval->value;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Perhaps we can find another alias file. */
|
||||
added = 0;
|
||||
while (added == 0 && locale_alias_path[0] != '\0')
|
||||
{
|
||||
const char *start;
|
||||
|
||||
while (locale_alias_path[0] == PATH_SEPARATOR)
|
||||
++locale_alias_path;
|
||||
start = locale_alias_path;
|
||||
|
||||
while (locale_alias_path[0] != '\0'
|
||||
&& locale_alias_path[0] != PATH_SEPARATOR)
|
||||
++locale_alias_path;
|
||||
|
||||
if (start < locale_alias_path)
|
||||
added = read_alias_file (start, locale_alias_path - start);
|
||||
}
|
||||
}
|
||||
while (added != 0);
|
||||
|
||||
#ifdef _LIBC
|
||||
__libc_lock_unlock (lock);
|
||||
#endif
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
static size_t
|
||||
internal_function
|
||||
read_alias_file (fname, fname_len)
|
||||
const char *fname;
|
||||
int fname_len;
|
||||
{
|
||||
FILE *fp;
|
||||
char *full_fname;
|
||||
size_t added;
|
||||
static const char aliasfile[] = "/locale.alias";
|
||||
|
||||
full_fname = (char *) alloca (fname_len + sizeof aliasfile);
|
||||
#ifdef HAVE_MEMPCPY
|
||||
mempcpy (mempcpy (full_fname, fname, fname_len),
|
||||
aliasfile, sizeof aliasfile);
|
||||
#else
|
||||
memcpy (full_fname, fname, fname_len);
|
||||
memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile);
|
||||
#endif
|
||||
|
||||
fp = fopen (full_fname, "r");
|
||||
freea (full_fname);
|
||||
if (fp == NULL)
|
||||
return 0;
|
||||
|
||||
added = 0;
|
||||
while (!feof (fp))
|
||||
{
|
||||
/* It is a reasonable approach to use a fix buffer here because
|
||||
a) we are only interested in the first two fields
|
||||
b) these fields must be usable as file names and so must not
|
||||
be that long
|
||||
*/
|
||||
char buf[BUFSIZ];
|
||||
char *alias;
|
||||
char *value;
|
||||
char *cp;
|
||||
|
||||
if (fgets (buf, sizeof buf, fp) == NULL)
|
||||
/* EOF reached. */
|
||||
break;
|
||||
|
||||
/* Possibly not the whole line fits into the buffer. Ignore
|
||||
the rest of the line. */
|
||||
if (strchr (buf, '\n') == NULL)
|
||||
{
|
||||
char altbuf[BUFSIZ];
|
||||
do
|
||||
if (fgets (altbuf, sizeof altbuf, fp) == NULL)
|
||||
/* Make sure the inner loop will be left. The outer loop
|
||||
will exit at the `feof' test. */
|
||||
break;
|
||||
while (strchr (altbuf, '\n') == NULL);
|
||||
}
|
||||
|
||||
cp = buf;
|
||||
/* Ignore leading white space. */
|
||||
while (isspace (cp[0]))
|
||||
++cp;
|
||||
|
||||
/* A leading '#' signals a comment line. */
|
||||
if (cp[0] != '\0' && cp[0] != '#')
|
||||
{
|
||||
alias = cp++;
|
||||
while (cp[0] != '\0' && !isspace (cp[0]))
|
||||
++cp;
|
||||
/* Terminate alias name. */
|
||||
if (cp[0] != '\0')
|
||||
*cp++ = '\0';
|
||||
|
||||
/* Now look for the beginning of the value. */
|
||||
while (isspace (cp[0]))
|
||||
++cp;
|
||||
|
||||
if (cp[0] != '\0')
|
||||
{
|
||||
size_t alias_len;
|
||||
size_t value_len;
|
||||
|
||||
value = cp++;
|
||||
while (cp[0] != '\0' && !isspace (cp[0]))
|
||||
++cp;
|
||||
/* Terminate value. */
|
||||
if (cp[0] == '\n')
|
||||
{
|
||||
/* This has to be done to make the following test
|
||||
for the end of line possible. We are looking for
|
||||
the terminating '\n' which do not overwrite here. */
|
||||
*cp++ = '\0';
|
||||
*cp = '\n';
|
||||
}
|
||||
else if (cp[0] != '\0')
|
||||
*cp++ = '\0';
|
||||
|
||||
if (nmap >= maxmap)
|
||||
if (__builtin_expect (extend_alias_table (), 0))
|
||||
return added;
|
||||
|
||||
alias_len = strlen (alias) + 1;
|
||||
value_len = strlen (value) + 1;
|
||||
|
||||
if (string_space_act + alias_len + value_len > string_space_max)
|
||||
{
|
||||
/* Increase size of memory pool. */
|
||||
size_t new_size = (string_space_max
|
||||
+ (alias_len + value_len > 1024
|
||||
? alias_len + value_len : 1024));
|
||||
char *new_pool = (char *) realloc (string_space, new_size);
|
||||
if (new_pool == NULL)
|
||||
return added;
|
||||
|
||||
if (__builtin_expect (string_space != new_pool, 0))
|
||||
{
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < nmap; i++)
|
||||
{
|
||||
map[i].alias += new_pool - string_space;
|
||||
map[i].value += new_pool - string_space;
|
||||
}
|
||||
}
|
||||
|
||||
string_space = new_pool;
|
||||
string_space_max = new_size;
|
||||
}
|
||||
|
||||
map[nmap].alias = memcpy (&string_space[string_space_act],
|
||||
alias, alias_len);
|
||||
string_space_act += alias_len;
|
||||
|
||||
map[nmap].value = memcpy (&string_space[string_space_act],
|
||||
value, value_len);
|
||||
string_space_act += value_len;
|
||||
|
||||
++nmap;
|
||||
++added;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Should we test for ferror()? I think we have to silently ignore
|
||||
errors. --drepper */
|
||||
fclose (fp);
|
||||
|
||||
if (added > 0)
|
||||
qsort (map, nmap, sizeof (struct alias_map),
|
||||
(int (*) PARAMS ((const void *, const void *))) alias_compare);
|
||||
|
||||
return added;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
extend_alias_table ()
|
||||
{
|
||||
size_t new_size;
|
||||
struct alias_map *new_map;
|
||||
|
||||
new_size = maxmap == 0 ? 100 : 2 * maxmap;
|
||||
new_map = (struct alias_map *) realloc (map, (new_size
|
||||
* sizeof (struct alias_map)));
|
||||
if (new_map == NULL)
|
||||
/* Simply don't extend: we don't have any more core. */
|
||||
return -1;
|
||||
|
||||
map = new_map;
|
||||
maxmap = new_size;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#ifdef _LIBC
|
||||
static void __attribute__ ((unused))
|
||||
free_mem (void)
|
||||
{
|
||||
if (string_space != NULL)
|
||||
free (string_space);
|
||||
if (map != NULL)
|
||||
free (map);
|
||||
}
|
||||
text_set_element (__libc_subfreeres, free_mem);
|
||||
#endif
|
||||
|
||||
|
||||
static int
|
||||
alias_compare (map1, map2)
|
||||
const struct alias_map *map1;
|
||||
const struct alias_map *map2;
|
||||
{
|
||||
#if defined _LIBC || defined HAVE_STRCASECMP
|
||||
return strcasecmp (map1->alias, map2->alias);
|
||||
#else
|
||||
const unsigned char *p1 = (const unsigned char *) map1->alias;
|
||||
const unsigned char *p2 = (const unsigned char *) map2->alias;
|
||||
unsigned char c1, c2;
|
||||
|
||||
if (p1 == p2)
|
||||
return 0;
|
||||
|
||||
do
|
||||
{
|
||||
/* I know this seems to be odd but the tolower() function in
|
||||
some systems libc cannot handle nonalpha characters. */
|
||||
c1 = isupper (*p1) ? tolower (*p1) : *p1;
|
||||
c2 = isupper (*p2) ? tolower (*p2) : *p2;
|
||||
if (c1 == '\0')
|
||||
break;
|
||||
++p1;
|
||||
++p2;
|
||||
}
|
||||
while (c1 == c2);
|
||||
|
||||
return c1 - c2;
|
||||
#endif
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
/* Implementation of ngettext(3) function.
|
||||
Copyright (C) 1995, 1997, 2000, 2001 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. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#ifdef _LIBC
|
||||
# define __need_NULL
|
||||
# include <stddef.h>
|
||||
#else
|
||||
# include <stdlib.h> /* Just for NULL. */
|
||||
#endif
|
||||
|
||||
#include "gettextP.h"
|
||||
#ifdef _LIBC
|
||||
# include <libintl.h>
|
||||
#else
|
||||
# include "libgnuintl.h"
|
||||
#endif
|
||||
|
||||
#include <locale.h>
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
/* Names for the libintl functions are a problem. They must not clash
|
||||
with existing names and they should follow ANSI C. But this source
|
||||
code is also used in GNU C Library where the names have a __
|
||||
prefix. So we have to make a difference here. */
|
||||
#ifdef _LIBC
|
||||
# define NGETTEXT __ngettext
|
||||
# define DCNGETTEXT __dcngettext
|
||||
#else
|
||||
# define NGETTEXT ngettext__
|
||||
# define DCNGETTEXT dcngettext__
|
||||
#endif
|
||||
|
||||
/* Look up MSGID in the current default message catalog for the current
|
||||
LC_MESSAGES locale. If not found, returns MSGID itself (the default
|
||||
text). */
|
||||
char *
|
||||
NGETTEXT (msgid1, msgid2, n)
|
||||
const char *msgid1;
|
||||
const char *msgid2;
|
||||
unsigned long int n;
|
||||
{
|
||||
return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES);
|
||||
}
|
||||
|
||||
#ifdef _LIBC
|
||||
/* Alias for function name in GNU C Library. */
|
||||
weak_alias (__ngettext, ngettext);
|
||||
#endif
|
||||
+1325
File diff suppressed because it is too large
Load Diff
+412
@@ -0,0 +1,412 @@
|
||||
%{
|
||||
/* Expression parsing for plural form selection.
|
||||
Copyright (C) 2000, 2001 Free Software Foundation, Inc.
|
||||
Written by Ulrich Drepper <[email protected]>, 2000.
|
||||
|
||||
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. */
|
||||
|
||||
/* The bison generated parser uses alloca. AIX 3 forces us to put this
|
||||
declaration at the beginning of the file. The declaration in bison's
|
||||
skeleton file comes too late. This must come before <config.h>
|
||||
because <config.h> may include arbitrary system headers. */
|
||||
#if defined _AIX && !defined __GNUC__
|
||||
#pragma alloca
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "gettextP.h"
|
||||
|
||||
/* Names for the libintl functions are a problem. They must not clash
|
||||
with existing names and they should follow ANSI C. But this source
|
||||
code is also used in GNU C Library where the names have a __
|
||||
prefix. So we have to make a difference here. */
|
||||
#ifdef _LIBC
|
||||
# define FREE_EXPRESSION __gettext_free_exp
|
||||
#else
|
||||
# define FREE_EXPRESSION gettext_free_exp__
|
||||
# define __gettextparse gettextparse__
|
||||
#endif
|
||||
|
||||
#define YYLEX_PARAM &((struct parse_args *) arg)->cp
|
||||
#define YYPARSE_PARAM arg
|
||||
%}
|
||||
%pure_parser
|
||||
%expect 10
|
||||
|
||||
%union {
|
||||
unsigned long int num;
|
||||
enum operator op;
|
||||
struct expression *exp;
|
||||
}
|
||||
|
||||
%{
|
||||
/* Prototypes for local functions. */
|
||||
static struct expression *new_exp PARAMS ((int nargs, enum operator op,
|
||||
struct expression * const *args));
|
||||
static inline struct expression *new_exp_0 PARAMS ((enum operator op));
|
||||
static inline struct expression *new_exp_1 PARAMS ((enum operator op,
|
||||
struct expression *right));
|
||||
static struct expression *new_exp_2 PARAMS ((enum operator op,
|
||||
struct expression *left,
|
||||
struct expression *right));
|
||||
static inline struct expression *new_exp_3 PARAMS ((enum operator op,
|
||||
struct expression *bexp,
|
||||
struct expression *tbranch,
|
||||
struct expression *fbranch));
|
||||
static int yylex PARAMS ((YYSTYPE *lval, const char **pexp));
|
||||
static void yyerror PARAMS ((const char *str));
|
||||
|
||||
/* Allocation of expressions. */
|
||||
|
||||
static struct expression *
|
||||
new_exp (nargs, op, args)
|
||||
int nargs;
|
||||
enum operator op;
|
||||
struct expression * const *args;
|
||||
{
|
||||
int i;
|
||||
struct expression *newp;
|
||||
|
||||
/* If any of the argument could not be malloc'ed, just return NULL. */
|
||||
for (i = nargs - 1; i >= 0; i--)
|
||||
if (args[i] == NULL)
|
||||
goto fail;
|
||||
|
||||
/* Allocate a new expression. */
|
||||
newp = (struct expression *) malloc (sizeof (*newp));
|
||||
if (newp != NULL)
|
||||
{
|
||||
newp->nargs = nargs;
|
||||
newp->operation = op;
|
||||
for (i = nargs - 1; i >= 0; i--)
|
||||
newp->val.args[i] = args[i];
|
||||
return newp;
|
||||
}
|
||||
|
||||
fail:
|
||||
for (i = nargs - 1; i >= 0; i--)
|
||||
FREE_EXPRESSION (args[i]);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline struct expression *
|
||||
new_exp_0 (op)
|
||||
enum operator op;
|
||||
{
|
||||
return new_exp (0, op, NULL);
|
||||
}
|
||||
|
||||
static inline struct expression *
|
||||
new_exp_1 (op, right)
|
||||
enum operator op;
|
||||
struct expression *right;
|
||||
{
|
||||
struct expression *args[1];
|
||||
|
||||
args[0] = right;
|
||||
return new_exp (1, op, args);
|
||||
}
|
||||
|
||||
static struct expression *
|
||||
new_exp_2 (op, left, right)
|
||||
enum operator op;
|
||||
struct expression *left;
|
||||
struct expression *right;
|
||||
{
|
||||
struct expression *args[2];
|
||||
|
||||
args[0] = left;
|
||||
args[1] = right;
|
||||
return new_exp (2, op, args);
|
||||
}
|
||||
|
||||
static inline struct expression *
|
||||
new_exp_3 (op, bexp, tbranch, fbranch)
|
||||
enum operator op;
|
||||
struct expression *bexp;
|
||||
struct expression *tbranch;
|
||||
struct expression *fbranch;
|
||||
{
|
||||
struct expression *args[3];
|
||||
|
||||
args[0] = bexp;
|
||||
args[1] = tbranch;
|
||||
args[2] = fbranch;
|
||||
return new_exp (3, op, args);
|
||||
}
|
||||
|
||||
%}
|
||||
|
||||
/* This declares that all operators have the same associativity and the
|
||||
precedence order as in C. See [Harbison, Steele: C, A Reference Manual].
|
||||
There is no unary minus and no bitwise operators.
|
||||
Operators with the same syntactic behaviour have been merged into a single
|
||||
token, to save space in the array generated by bison. */
|
||||
%right '?' /* ? */
|
||||
%left '|' /* || */
|
||||
%left '&' /* && */
|
||||
%left EQUOP2 /* == != */
|
||||
%left CMPOP2 /* < > <= >= */
|
||||
%left ADDOP2 /* + - */
|
||||
%left MULOP2 /* * / % */
|
||||
%right '!' /* ! */
|
||||
|
||||
%token <op> EQUOP2 CMPOP2 ADDOP2 MULOP2
|
||||
%token <num> NUMBER
|
||||
%type <exp> exp
|
||||
|
||||
%%
|
||||
|
||||
start: exp
|
||||
{
|
||||
if ($1 == NULL)
|
||||
YYABORT;
|
||||
((struct parse_args *) arg)->res = $1;
|
||||
}
|
||||
;
|
||||
|
||||
exp: exp '?' exp ':' exp
|
||||
{
|
||||
$$ = new_exp_3 (qmop, $1, $3, $5);
|
||||
}
|
||||
| exp '|' exp
|
||||
{
|
||||
$$ = new_exp_2 (lor, $1, $3);
|
||||
}
|
||||
| exp '&' exp
|
||||
{
|
||||
$$ = new_exp_2 (land, $1, $3);
|
||||
}
|
||||
| exp EQUOP2 exp
|
||||
{
|
||||
$$ = new_exp_2 ($2, $1, $3);
|
||||
}
|
||||
| exp CMPOP2 exp
|
||||
{
|
||||
$$ = new_exp_2 ($2, $1, $3);
|
||||
}
|
||||
| exp ADDOP2 exp
|
||||
{
|
||||
$$ = new_exp_2 ($2, $1, $3);
|
||||
}
|
||||
| exp MULOP2 exp
|
||||
{
|
||||
$$ = new_exp_2 ($2, $1, $3);
|
||||
}
|
||||
| '!' exp
|
||||
{
|
||||
$$ = new_exp_1 (lnot, $2);
|
||||
}
|
||||
| 'n'
|
||||
{
|
||||
$$ = new_exp_0 (var);
|
||||
}
|
||||
| NUMBER
|
||||
{
|
||||
if (($$ = new_exp_0 (num)) != NULL)
|
||||
$$->val.num = $1;
|
||||
}
|
||||
| '(' exp ')'
|
||||
{
|
||||
$$ = $2;
|
||||
}
|
||||
;
|
||||
|
||||
%%
|
||||
|
||||
void
|
||||
internal_function
|
||||
FREE_EXPRESSION (exp)
|
||||
struct expression *exp;
|
||||
{
|
||||
if (exp == NULL)
|
||||
return;
|
||||
|
||||
/* Handle the recursive case. */
|
||||
switch (exp->nargs)
|
||||
{
|
||||
case 3:
|
||||
FREE_EXPRESSION (exp->val.args[2]);
|
||||
/* FALLTHROUGH */
|
||||
case 2:
|
||||
FREE_EXPRESSION (exp->val.args[1]);
|
||||
/* FALLTHROUGH */
|
||||
case 1:
|
||||
FREE_EXPRESSION (exp->val.args[0]);
|
||||
/* FALLTHROUGH */
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
free (exp);
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
yylex (lval, pexp)
|
||||
YYSTYPE *lval;
|
||||
const char **pexp;
|
||||
{
|
||||
const char *exp = *pexp;
|
||||
int result;
|
||||
|
||||
while (1)
|
||||
{
|
||||
if (exp[0] == '\0')
|
||||
{
|
||||
*pexp = exp;
|
||||
return YYEOF;
|
||||
}
|
||||
|
||||
if (exp[0] != ' ' && exp[0] != '\t')
|
||||
break;
|
||||
|
||||
++exp;
|
||||
}
|
||||
|
||||
result = *exp++;
|
||||
switch (result)
|
||||
{
|
||||
case '0': case '1': case '2': case '3': case '4':
|
||||
case '5': case '6': case '7': case '8': case '9':
|
||||
{
|
||||
unsigned long int n = result - '0';
|
||||
while (exp[0] >= '0' && exp[0] <= '9')
|
||||
{
|
||||
n *= 10;
|
||||
n += exp[0] - '0';
|
||||
++exp;
|
||||
}
|
||||
lval->num = n;
|
||||
result = NUMBER;
|
||||
}
|
||||
break;
|
||||
|
||||
case '=':
|
||||
if (exp[0] == '=')
|
||||
{
|
||||
++exp;
|
||||
lval->op = equal;
|
||||
result = EQUOP2;
|
||||
}
|
||||
else
|
||||
result = YYERRCODE;
|
||||
break;
|
||||
|
||||
case '!':
|
||||
if (exp[0] == '=')
|
||||
{
|
||||
++exp;
|
||||
lval->op = not_equal;
|
||||
result = EQUOP2;
|
||||
}
|
||||
break;
|
||||
|
||||
case '&':
|
||||
case '|':
|
||||
if (exp[0] == result)
|
||||
++exp;
|
||||
else
|
||||
result = YYERRCODE;
|
||||
break;
|
||||
|
||||
case '<':
|
||||
if (exp[0] == '=')
|
||||
{
|
||||
++exp;
|
||||
lval->op = less_or_equal;
|
||||
}
|
||||
else
|
||||
lval->op = less_than;
|
||||
result = CMPOP2;
|
||||
break;
|
||||
|
||||
case '>':
|
||||
if (exp[0] == '=')
|
||||
{
|
||||
++exp;
|
||||
lval->op = greater_or_equal;
|
||||
}
|
||||
else
|
||||
lval->op = greater_than;
|
||||
result = CMPOP2;
|
||||
break;
|
||||
|
||||
case '*':
|
||||
lval->op = mult;
|
||||
result = MULOP2;
|
||||
break;
|
||||
|
||||
case '/':
|
||||
lval->op = divide;
|
||||
result = MULOP2;
|
||||
break;
|
||||
|
||||
case '%':
|
||||
lval->op = module;
|
||||
result = MULOP2;
|
||||
break;
|
||||
|
||||
case '+':
|
||||
lval->op = plus;
|
||||
result = ADDOP2;
|
||||
break;
|
||||
|
||||
case '-':
|
||||
lval->op = minus;
|
||||
result = ADDOP2;
|
||||
break;
|
||||
|
||||
case 'n':
|
||||
case '?':
|
||||
case ':':
|
||||
case '(':
|
||||
case ')':
|
||||
/* Nothing, just return the character. */
|
||||
break;
|
||||
|
||||
case ';':
|
||||
case '\n':
|
||||
case '\0':
|
||||
/* Be safe and let the user call this function again. */
|
||||
--exp;
|
||||
result = YYEOF;
|
||||
break;
|
||||
|
||||
default:
|
||||
result = YYERRCODE;
|
||||
#if YYDEBUG != 0
|
||||
--exp;
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
|
||||
*pexp = exp;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
yyerror (str)
|
||||
const char *str;
|
||||
{
|
||||
/* Do nothing. We don't print error messages here. */
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
# Add this package to a list of references stored in a text file.
|
||||
#
|
||||
# Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Library 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
|
||||
# Library General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Library 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.
|
||||
#
|
||||
# Written by Bruno Haible <[email protected]>.
|
||||
#
|
||||
/^# Packages using this file: / {
|
||||
s/# Packages using this file://
|
||||
ta
|
||||
:a
|
||||
s/ @PACKAGE@ / @PACKAGE@ /
|
||||
tb
|
||||
s/ $/ @PACKAGE@ /
|
||||
:b
|
||||
s/^/# Packages using this file:/
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
# Remove this package from a list of references stored in a text file.
|
||||
#
|
||||
# Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Library 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
|
||||
# Library General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Library 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.
|
||||
#
|
||||
# Written by Bruno Haible <[email protected]>.
|
||||
#
|
||||
/^# Packages using this file: / {
|
||||
s/# Packages using this file://
|
||||
s/ @PACKAGE@ / /
|
||||
s/^/# Packages using this file:/
|
||||
}
|
||||
@@ -0,0 +1,141 @@
|
||||
/* Implementation of the textdomain(3) function.
|
||||
Copyright (C) 1995-1998, 2000, 2001 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. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#ifdef _LIBC
|
||||
# include <libintl.h>
|
||||
#else
|
||||
# include "libgnuintl.h"
|
||||
#endif
|
||||
#include "gettextP.h"
|
||||
|
||||
#ifdef _LIBC
|
||||
/* We have to handle multi-threaded applications. */
|
||||
# include <bits/libc-lock.h>
|
||||
#else
|
||||
/* Provide dummy implementation if this is outside glibc. */
|
||||
# define __libc_rwlock_define(CLASS, NAME)
|
||||
# define __libc_rwlock_wrlock(NAME)
|
||||
# define __libc_rwlock_unlock(NAME)
|
||||
#endif
|
||||
|
||||
/* The internal variables in the standalone libintl.a must have different
|
||||
names than the internal variables in GNU libc, otherwise programs
|
||||
using libintl.a cannot be linked statically. */
|
||||
#if !defined _LIBC
|
||||
# define _nl_default_default_domain _nl_default_default_domain__
|
||||
# define _nl_current_default_domain _nl_current_default_domain__
|
||||
#endif
|
||||
|
||||
/* @@ end of prolog @@ */
|
||||
|
||||
/* Name of the default text domain. */
|
||||
extern const char _nl_default_default_domain[];
|
||||
|
||||
/* Default text domain in which entries for gettext(3) are to be found. */
|
||||
extern const char *_nl_current_default_domain;
|
||||
|
||||
|
||||
/* Names for the libintl functions are a problem. They must not clash
|
||||
with existing names and they should follow ANSI C. But this source
|
||||
code is also used in GNU C Library where the names have a __
|
||||
prefix. So we have to make a difference here. */
|
||||
#ifdef _LIBC
|
||||
# define TEXTDOMAIN __textdomain
|
||||
# ifndef strdup
|
||||
# define strdup(str) __strdup (str)
|
||||
# endif
|
||||
#else
|
||||
# define TEXTDOMAIN textdomain__
|
||||
#endif
|
||||
|
||||
/* Lock variable to protect the global data in the gettext implementation. */
|
||||
__libc_rwlock_define (extern, _nl_state_lock)
|
||||
|
||||
/* Set the current default message catalog to DOMAINNAME.
|
||||
If DOMAINNAME is null, return the current default.
|
||||
If DOMAINNAME is "", reset to the default of "messages". */
|
||||
char *
|
||||
TEXTDOMAIN (domainname)
|
||||
const char *domainname;
|
||||
{
|
||||
char *new_domain;
|
||||
char *old_domain;
|
||||
|
||||
/* A NULL pointer requests the current setting. */
|
||||
if (domainname == NULL)
|
||||
return (char *) _nl_current_default_domain;
|
||||
|
||||
__libc_rwlock_wrlock (_nl_state_lock);
|
||||
|
||||
old_domain = (char *) _nl_current_default_domain;
|
||||
|
||||
/* If domain name is the null string set to default domain "messages". */
|
||||
if (domainname[0] == '\0'
|
||||
|| strcmp (domainname, _nl_default_default_domain) == 0)
|
||||
{
|
||||
_nl_current_default_domain = _nl_default_default_domain;
|
||||
new_domain = (char *) _nl_current_default_domain;
|
||||
}
|
||||
else if (strcmp (domainname, old_domain) == 0)
|
||||
/* This can happen and people will use it to signal that some
|
||||
environment variable changed. */
|
||||
new_domain = old_domain;
|
||||
else
|
||||
{
|
||||
/* If the following malloc fails `_nl_current_default_domain'
|
||||
will be NULL. This value will be returned and so signals we
|
||||
are out of core. */
|
||||
#if defined _LIBC || defined HAVE_STRDUP
|
||||
new_domain = strdup (domainname);
|
||||
#else
|
||||
size_t len = strlen (domainname) + 1;
|
||||
new_domain = (char *) malloc (len);
|
||||
if (new_domain != NULL)
|
||||
memcpy (new_domain, domainname, len);
|
||||
#endif
|
||||
|
||||
if (new_domain != NULL)
|
||||
_nl_current_default_domain = new_domain;
|
||||
}
|
||||
|
||||
/* We use this possibility to signal a change of the loaded catalogs
|
||||
since this is most likely the case and there is no other easy we
|
||||
to do it. Do it only when the call was successful. */
|
||||
if (new_domain != NULL)
|
||||
{
|
||||
++_nl_msg_cat_cntr;
|
||||
|
||||
if (old_domain != new_domain && old_domain != _nl_default_default_domain)
|
||||
free (old_domain);
|
||||
}
|
||||
|
||||
__libc_rwlock_unlock (_nl_state_lock);
|
||||
|
||||
return new_domain;
|
||||
}
|
||||
|
||||
#ifdef _LIBC
|
||||
/* Alias for function name in GNU C Library. */
|
||||
weak_alias (__textdomain, textdomain);
|
||||
#endif
|
||||
+1
-2
@@ -4,7 +4,7 @@ AUTOMAKE_OPTIONS = ansi2knr
|
||||
|
||||
noinst_LIBRARIES = libbison.a
|
||||
|
||||
INCLUDES = -I.. -I$(srcdir) -I$(top_srcdir)/src -I../intl
|
||||
INCLUDES = -I.. -I$(srcdir) -I../intl
|
||||
|
||||
# Heck, we are still using an old version of Automake which does not
|
||||
# understand LIBOBJ additions using $objext...
|
||||
@@ -14,7 +14,6 @@ EXTRA_DIST = malloc.c realloc.c
|
||||
libbison_a_SOURCES = \
|
||||
error.c error.h \
|
||||
getopt.h getopt.c getopt1.c \
|
||||
hash.h hash.c \
|
||||
obstack.h obstack.c \
|
||||
quote.h quote.c quotearg.h quotearg.c \
|
||||
xalloc.h xmalloc.c xstrdup.c
|
||||
|
||||
+397
@@ -0,0 +1,397 @@
|
||||
# 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@
|
||||
|
||||
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@
|
||||
AWK = @AWK@
|
||||
BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
|
||||
CATALOGS = @CATALOGS@
|
||||
CATOBJEXT = @CATOBJEXT@
|
||||
CC = @CC@
|
||||
CPP = @CPP@
|
||||
DATADIRNAME = @DATADIRNAME@
|
||||
DEPDIR = @DEPDIR@
|
||||
EXEEXT = @EXEEXT@
|
||||
GENCAT = @GENCAT@
|
||||
GLIBC21 = @GLIBC21@
|
||||
GMOFILES = @GMOFILES@
|
||||
GMSGFMT = @GMSGFMT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
INSTOBJEXT = @INSTOBJEXT@
|
||||
INTLBISON = @INTLBISON@
|
||||
INTLLIBS = @INTLLIBS@
|
||||
INTLOBJS = @INTLOBJS@
|
||||
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
|
||||
LIBICONV = @LIBICONV@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
M4 = @M4@
|
||||
MKINSTALLDIRS = @MKINSTALLDIRS@
|
||||
MSGFMT = @MSGFMT@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
POFILES = @POFILES@
|
||||
POSUB = @POSUB@
|
||||
RANLIB = @RANLIB@
|
||||
U = @U@
|
||||
USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
|
||||
USE_NLS = @USE_NLS@
|
||||
VERSION = @VERSION@
|
||||
WARNING_CFLAGS = @WARNING_CFLAGS@
|
||||
am__include = @am__include@
|
||||
am__quote = @am__quote@
|
||||
install_sh = @install_sh@
|
||||
|
||||
AUTOMAKE_OPTIONS = ansi2knr
|
||||
|
||||
noinst_LIBRARIES = libbison.a
|
||||
|
||||
INCLUDES = -I.. -I$(srcdir) -I../intl
|
||||
|
||||
|
||||
# Heck, we are still using an old version of Automake which does not
|
||||
# understand LIBOBJ additions using $objext...
|
||||
EXTRA_DIST = malloc.c realloc.c
|
||||
|
||||
libbison_a_SOURCES = \
|
||||
error.c error.h \
|
||||
getopt.h getopt.c getopt1.c \
|
||||
obstack.h obstack.c \
|
||||
quote.h quote.c quotearg.h quotearg.c \
|
||||
xalloc.h xmalloc.c xstrdup.c
|
||||
|
||||
|
||||
libbison_a_LIBADD = @LIBOBJS@
|
||||
libbison_a_DEPENDENCIES = $(libbison_a_LIBADD)
|
||||
subdir = lib
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
LIBRARIES = $(noinst_LIBRARIES)
|
||||
|
||||
libbison_a_AR = $(AR) cru
|
||||
am_libbison_a_OBJECTS = error$U.$(OBJEXT) getopt$U.$(OBJEXT) \
|
||||
getopt1$U.$(OBJEXT) obstack$U.$(OBJEXT) quote$U.$(OBJEXT) \
|
||||
quotearg$U.$(OBJEXT) xmalloc$U.$(OBJEXT) xstrdup$U.$(OBJEXT)
|
||||
libbison_a_OBJECTS = $(am_libbison_a_OBJECTS)
|
||||
|
||||
DEFS = @DEFS@
|
||||
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBS = @LIBS@
|
||||
depcomp = $(SHELL) $(top_srcdir)/config/depcomp
|
||||
@AMDEP_TRUE@DEP_FILES = $(DEPDIR)/error$U.Po $(DEPDIR)/getopt$U.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/getopt1$U.Po $(DEPDIR)/malloc.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/memchr.Po $(DEPDIR)/obstack$U.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/quote$U.Po $(DEPDIR)/quotearg$U.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/realloc.Po $(DEPDIR)/stpcpy.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/strndup.Po $(DEPDIR)/strnlen.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/strspn.Po $(DEPDIR)/xmalloc$U.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/xstrdup$U.Po
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
CFLAGS = @CFLAGS@
|
||||
DIST_SOURCES = $(libbison_a_SOURCES)
|
||||
DIST_COMMON = Makefile.am Makefile.in ansi2knr.1 ansi2knr.c malloc.c \
|
||||
memchr.c realloc.c stpcpy.c strndup.c strnlen.c strspn.c
|
||||
SOURCES = $(libbison_a_SOURCES)
|
||||
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .o .obj
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu lib/Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) && \
|
||||
CONFIG_HEADERS= CONFIG_LINKS= \
|
||||
CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
|
||||
|
||||
AR = ar
|
||||
|
||||
clean-noinstLIBRARIES:
|
||||
-test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
|
||||
libbison.a: $(libbison_a_OBJECTS) $(libbison_a_DEPENDENCIES)
|
||||
-rm -f libbison.a
|
||||
$(libbison_a_AR) libbison.a $(libbison_a_OBJECTS) $(libbison_a_LIBADD)
|
||||
$(RANLIB) libbison.a
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT) core *.core
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
ANSI2KNR = @ANSI2KNR@
|
||||
ansi2knr: ansi2knr.$(OBJEXT)
|
||||
$(LINK) ansi2knr.$(OBJEXT) $(LIBS)
|
||||
ansi2knr.$(OBJEXT): $(CONFIG_HEADER)
|
||||
|
||||
clean-krextra:
|
||||
-rm -f ansi2knr
|
||||
|
||||
mostlyclean-kr:
|
||||
-rm -f *_.c
|
||||
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/error$U.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getopt$U.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getopt1$U.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/malloc.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/memchr.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/obstack$U.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/quote$U.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/quotearg$U.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/realloc.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/stpcpy.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strndup.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strnlen.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strspn.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/xmalloc$U.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/xstrdup$U.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 $<`
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
alloca_.c: alloca.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/alloca.c; then echo $(srcdir)/alloca.c; else echo alloca.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > alloca_.c || rm -f alloca_.c
|
||||
error_.c: error.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/error.c; then echo $(srcdir)/error.c; else echo error.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > error_.c || rm -f error_.c
|
||||
getopt_.c: getopt.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getopt.c; then echo $(srcdir)/getopt.c; else echo getopt.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > getopt_.c || rm -f getopt_.c
|
||||
getopt1_.c: getopt1.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getopt1.c; then echo $(srcdir)/getopt1.c; else echo getopt1.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > getopt1_.c || rm -f getopt1_.c
|
||||
malloc_.c: malloc.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/malloc.c; then echo $(srcdir)/malloc.c; else echo malloc.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > malloc_.c || rm -f malloc_.c
|
||||
memchr_.c: memchr.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memchr.c; then echo $(srcdir)/memchr.c; else echo memchr.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memchr_.c || rm -f memchr_.c
|
||||
obstack_.c: obstack.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/obstack.c; then echo $(srcdir)/obstack.c; else echo obstack.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > obstack_.c || rm -f obstack_.c
|
||||
quote_.c: quote.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/quote.c; then echo $(srcdir)/quote.c; else echo quote.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > quote_.c || rm -f quote_.c
|
||||
quotearg_.c: quotearg.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/quotearg.c; then echo $(srcdir)/quotearg.c; else echo quotearg.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > quotearg_.c || rm -f quotearg_.c
|
||||
realloc_.c: realloc.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/realloc.c; then echo $(srcdir)/realloc.c; else echo realloc.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > realloc_.c || rm -f realloc_.c
|
||||
stpcpy_.c: stpcpy.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/stpcpy.c; then echo $(srcdir)/stpcpy.c; else echo stpcpy.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > stpcpy_.c || rm -f stpcpy_.c
|
||||
strndup_.c: strndup.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strndup.c; then echo $(srcdir)/strndup.c; else echo strndup.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strndup_.c || rm -f strndup_.c
|
||||
strnlen_.c: strnlen.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strnlen.c; then echo $(srcdir)/strnlen.c; else echo strnlen.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strnlen_.c || rm -f strnlen_.c
|
||||
strspn_.c: strspn.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/strspn.c; then echo $(srcdir)/strspn.c; else echo strspn.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > strspn_.c || rm -f strspn_.c
|
||||
xmalloc_.c: xmalloc.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xmalloc.c; then echo $(srcdir)/xmalloc.c; else echo xmalloc.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xmalloc_.c || rm -f xmalloc_.c
|
||||
xstrdup_.c: xstrdup.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/xstrdup.c; then echo $(srcdir)/xstrdup.c; else echo xstrdup.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > xstrdup_.c || rm -f xstrdup_.c
|
||||
alloca_.$(OBJEXT) error_.$(OBJEXT) getopt_.$(OBJEXT) getopt1_.$(OBJEXT) \
|
||||
malloc_.$(OBJEXT) memchr_.$(OBJEXT) obstack_.$(OBJEXT) quote_.$(OBJEXT) \
|
||||
quotearg_.$(OBJEXT) realloc_.$(OBJEXT) stpcpy_.$(OBJEXT) \
|
||||
strndup_.$(OBJEXT) strnlen_.$(OBJEXT) strspn_.$(OBJEXT) \
|
||||
xmalloc_.$(OBJEXT) xstrdup_.$(OBJEXT) : $(ANSI2KNR)
|
||||
uninstall-info-am:
|
||||
|
||||
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) $(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)$$unique$(LISP)$$tags" \
|
||||
|| etags $(ETAGS_ARGS) $$tags $$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
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
top_distdir = ..
|
||||
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@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
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(ANSI2KNR) $(LIBRARIES)
|
||||
|
||||
installdirs:
|
||||
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(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]*
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic clean-krextra clean-noinstLIBRARIES \
|
||||
mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
|
||||
distclean-am: clean-am distclean-compile distclean-depend \
|
||||
distclean-generic distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
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-kr
|
||||
|
||||
uninstall-am: uninstall-info-am
|
||||
|
||||
.PHONY: GTAGS all all-am check check-am clean clean-generic \
|
||||
clean-krextra clean-noinstLIBRARIES distclean distclean-compile \
|
||||
distclean-depend distclean-generic distclean-tags distdir dvi \
|
||||
dvi-am info info-am install install-am install-data \
|
||||
install-data-am install-exec install-exec-am install-info \
|
||||
install-info-am install-man install-strip installcheck \
|
||||
installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-compile \
|
||||
mostlyclean-generic mostlyclean-kr tags uninstall uninstall-am \
|
||||
uninstall-info-am
|
||||
|
||||
# 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:
|
||||
-293
@@ -1,293 +0,0 @@
|
||||
/* hash.c -- hash table maintenance
|
||||
Copyright (C) 1995 Free Software Foundation, Inc.
|
||||
Written by Greg McGary <[email protected]>
|
||||
|
||||
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.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include <stdio.h>
|
||||
#include "hash.h"
|
||||
#include "error.h"
|
||||
#include "system.h"
|
||||
#include "xalloc.h"
|
||||
|
||||
static void hash_rehash __P((struct hash_table* ht));
|
||||
static unsigned long round_up_2 __P((unsigned long rough));
|
||||
|
||||
/* Implement double hashing with open addressing. The table size is
|
||||
always a power of two. The secondary (`increment') hash function
|
||||
is forced to return an odd-value, in order to be relatively prime
|
||||
to the table size. This guarantees that the increment can
|
||||
potentially hit every slot in the table during collision
|
||||
resolution. */
|
||||
|
||||
void *hash_deleted_item = &hash_deleted_item;
|
||||
|
||||
/* Force the table size to be a power of two, possibly rounding up the
|
||||
given size. */
|
||||
|
||||
void
|
||||
hash_init (struct hash_table* ht, unsigned long size,
|
||||
hash_func_t hash_1, hash_func_t hash_2, hash_cmp_func_t hash_cmp)
|
||||
{
|
||||
ht->ht_size = round_up_2 (size);
|
||||
if (ht->ht_size > (128 * 1024)) /* prevent size from getting out of hand */
|
||||
ht->ht_size /= 2;
|
||||
ht->ht_vec = (void**) XCALLOC (struct token *, ht->ht_size);
|
||||
if (ht->ht_vec == 0)
|
||||
error (1, 0, _("can't allocate %ld bytes for hash table: memory exhausted"),
|
||||
ht->ht_size * sizeof(struct token *));
|
||||
ht->ht_capacity = ht->ht_size * 15 / 16; /* 93.75% loading factor */
|
||||
ht->ht_fill = 0;
|
||||
ht->ht_collisions = 0;
|
||||
ht->ht_lookups = 0;
|
||||
ht->ht_rehashes = 0;
|
||||
ht->ht_hash_1 = hash_1;
|
||||
ht->ht_hash_2 = hash_2;
|
||||
ht->ht_compare = hash_cmp;
|
||||
}
|
||||
|
||||
/* Load an array of items into `ht'. */
|
||||
|
||||
void
|
||||
hash_load (struct hash_table* ht, void *item_table, unsigned long cardinality, unsigned long size)
|
||||
{
|
||||
char *items = (char *) item_table;
|
||||
while (cardinality--)
|
||||
{
|
||||
hash_insert (ht, items);
|
||||
items += size;
|
||||
}
|
||||
}
|
||||
|
||||
/* Returns the address of the table slot matching `key'. If `key' is
|
||||
not found, return the address of an empty slot suitable for
|
||||
inserting `key'. The caller is responsible for incrementing
|
||||
ht_fill on insertion. */
|
||||
|
||||
void **
|
||||
hash_find_slot (struct hash_table* ht, void const *key)
|
||||
{
|
||||
void **slot;
|
||||
void **deleted_slot = 0;
|
||||
unsigned int hash_2 = 0;
|
||||
unsigned int hash_1 = (*ht->ht_hash_1) (key);
|
||||
|
||||
ht->ht_lookups++;
|
||||
for (;;)
|
||||
{
|
||||
hash_1 %= ht->ht_size;
|
||||
slot = &ht->ht_vec[hash_1];
|
||||
|
||||
if (*slot == 0)
|
||||
return slot;
|
||||
if (*slot == hash_deleted_item)
|
||||
{
|
||||
if (deleted_slot == 0)
|
||||
deleted_slot = slot;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (key == *slot)
|
||||
return slot;
|
||||
if ((*ht->ht_compare) (key, *slot) == 0)
|
||||
return slot;
|
||||
ht->ht_collisions++;
|
||||
}
|
||||
if (!hash_2)
|
||||
hash_2 = (*ht->ht_hash_2) (key) | 1;
|
||||
hash_1 += hash_2;
|
||||
}
|
||||
}
|
||||
|
||||
void *
|
||||
hash_find_item (struct hash_table* ht, void const *key)
|
||||
{
|
||||
void **slot = hash_find_slot (ht, key);
|
||||
return ((HASH_VACANT (*slot)) ? 0 : *slot);
|
||||
}
|
||||
|
||||
void *
|
||||
hash_insert (struct hash_table* ht, void *item)
|
||||
{
|
||||
void **slot = hash_find_slot (ht, item);
|
||||
return hash_insert_at (ht, item, slot);
|
||||
}
|
||||
|
||||
void *
|
||||
hash_insert_at (struct hash_table* ht, void *item, void const *slot)
|
||||
{
|
||||
void *old_item = *(void **) slot;
|
||||
if (HASH_VACANT (old_item))
|
||||
{
|
||||
ht->ht_fill++;
|
||||
old_item = item;
|
||||
}
|
||||
*(void const **) slot = item;
|
||||
if (ht->ht_fill >= ht->ht_capacity)
|
||||
hash_rehash (ht);
|
||||
return old_item;
|
||||
}
|
||||
|
||||
void *
|
||||
hash_delete (struct hash_table* ht, void const *item)
|
||||
{
|
||||
void **slot = hash_find_slot (ht, item);
|
||||
return hash_delete_at (ht, slot);
|
||||
}
|
||||
|
||||
void *
|
||||
hash_delete_at (struct hash_table* ht, void const *slot)
|
||||
{
|
||||
void *item = *(void **) slot;
|
||||
if (!HASH_VACANT (item))
|
||||
{
|
||||
*(void const **) slot = hash_deleted_item;
|
||||
ht->ht_fill--;
|
||||
return item;
|
||||
}
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
hash_free_items (struct hash_table* ht)
|
||||
{
|
||||
void **vec = ht->ht_vec;
|
||||
void **end = &vec[ht->ht_size];
|
||||
for (; vec < end; vec++)
|
||||
{
|
||||
void *item = *vec;
|
||||
if (!HASH_VACANT (item))
|
||||
free (item);
|
||||
*vec = 0;
|
||||
}
|
||||
ht->ht_fill = 0;
|
||||
}
|
||||
|
||||
void
|
||||
hash_delete_items (struct hash_table* ht)
|
||||
{
|
||||
void **vec = ht->ht_vec;
|
||||
void **end = &vec[ht->ht_size];
|
||||
for (; vec < end; vec++)
|
||||
*vec = 0;
|
||||
ht->ht_fill = 0;
|
||||
ht->ht_collisions = 0;
|
||||
ht->ht_lookups = 0;
|
||||
ht->ht_rehashes = 0;
|
||||
}
|
||||
|
||||
void
|
||||
hash_free (struct hash_table* ht, int free_items)
|
||||
{
|
||||
if (free_items)
|
||||
hash_free_items (ht);
|
||||
free (ht->ht_vec);
|
||||
ht->ht_vec = 0;
|
||||
ht->ht_fill = 0;
|
||||
ht->ht_capacity = 0;
|
||||
}
|
||||
|
||||
void
|
||||
hash_map (struct hash_table *ht, hash_map_func_t map)
|
||||
{
|
||||
void **slot;
|
||||
void **end = &ht->ht_vec[ht->ht_size];
|
||||
|
||||
for (slot = ht->ht_vec; slot < end; slot++)
|
||||
{
|
||||
if (!HASH_VACANT (*slot))
|
||||
(*map) (*slot);
|
||||
}
|
||||
}
|
||||
|
||||
/* Double the size of the hash table in the event of overflow... */
|
||||
|
||||
static void
|
||||
hash_rehash (struct hash_table* ht)
|
||||
{
|
||||
unsigned long old_ht_size = ht->ht_size;
|
||||
void **old_vec = ht->ht_vec;
|
||||
void **ovp;
|
||||
void **slot;
|
||||
|
||||
ht->ht_size *= 2;
|
||||
ht->ht_rehashes++;
|
||||
ht->ht_capacity = ht->ht_size - (ht->ht_size >> 4);
|
||||
ht->ht_vec = (void **) XCALLOC (struct token *, ht->ht_size);
|
||||
|
||||
for (ovp = old_vec; ovp < &old_vec[old_ht_size]; ovp++)
|
||||
{
|
||||
if (*ovp == 0)
|
||||
continue;
|
||||
slot = hash_find_slot (ht, *ovp);
|
||||
*slot = *ovp;
|
||||
}
|
||||
free (old_vec);
|
||||
}
|
||||
|
||||
void
|
||||
hash_print_stats (struct hash_table *ht, FILE *out_FILE)
|
||||
{
|
||||
fprintf (out_FILE, _("Load=%ld/%ld=%.0f%%, "), ht->ht_fill, ht->ht_size,
|
||||
100.0 * (double) ht->ht_fill / (double) ht->ht_size);
|
||||
fprintf (out_FILE, _("Rehash=%d, "), ht->ht_rehashes);
|
||||
fprintf (out_FILE, _("Collisions=%ld/%ld=%.0f%%"), ht->ht_collisions, ht->ht_lookups,
|
||||
(ht->ht_lookups
|
||||
? (100.0 * (double) ht->ht_collisions / (double) ht->ht_lookups)
|
||||
: 0));
|
||||
}
|
||||
|
||||
/* Dump all items into a NULL-terminated vector. Use the
|
||||
user-supplied vector, or malloc one. */
|
||||
|
||||
void**
|
||||
hash_dump (struct hash_table *ht, void **vector_0, qsort_cmp_t compare)
|
||||
{
|
||||
void **vector;
|
||||
void **slot;
|
||||
void **end = &ht->ht_vec[ht->ht_size];
|
||||
|
||||
if (vector_0 == 0)
|
||||
vector_0 = XMALLOC (void *, ht->ht_fill + 1);
|
||||
vector = vector_0;
|
||||
|
||||
for (slot = ht->ht_vec; slot < end; slot++)
|
||||
if (!HASH_VACANT (*slot))
|
||||
*vector++ = *slot;
|
||||
*vector = 0;
|
||||
|
||||
if (compare)
|
||||
qsort (vector_0, ht->ht_fill, sizeof (void *), compare);
|
||||
return vector_0;
|
||||
}
|
||||
|
||||
/* Round a given number up to the nearest power of 2. */
|
||||
|
||||
static unsigned long
|
||||
round_up_2 (unsigned long rough)
|
||||
{
|
||||
int round;
|
||||
|
||||
round = 1;
|
||||
while (rough)
|
||||
{
|
||||
round <<= 1;
|
||||
rough >>= 1;
|
||||
}
|
||||
return round;
|
||||
}
|
||||
-144
@@ -1,144 +0,0 @@
|
||||
/* hash.h -- decls for hash table
|
||||
Copyright (C) 1995 Free Software Foundation, Inc.
|
||||
Written by Greg McGary <[email protected]>
|
||||
|
||||
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. */
|
||||
|
||||
#ifndef _hash_h_
|
||||
#define _hash_h_
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
typedef unsigned long (*hash_func_t) __P((void const *key));
|
||||
typedef int (*hash_cmp_func_t) __P((void const *x, void const *y));
|
||||
typedef void (*hash_map_func_t) __P((void const *item));
|
||||
|
||||
struct hash_table
|
||||
{
|
||||
void **ht_vec;
|
||||
unsigned long ht_size; /* total number of slots (power of 2) */
|
||||
unsigned long ht_capacity; /* usable slots, limited by loading-factor */
|
||||
unsigned long ht_fill; /* items in table */
|
||||
unsigned long ht_collisions; /* # of failed calls to comparison function */
|
||||
unsigned long ht_lookups; /* # of queries */
|
||||
unsigned int ht_rehashes; /* # of times we've expanded table */
|
||||
hash_func_t ht_hash_1; /* primary hash function */
|
||||
hash_func_t ht_hash_2; /* secondary hash function */
|
||||
hash_cmp_func_t ht_compare; /* comparison function */
|
||||
};
|
||||
|
||||
typedef int (*qsort_cmp_t) __P((void const *, void const *));
|
||||
|
||||
void hash_init __P((struct hash_table *ht, unsigned long size,
|
||||
hash_func_t hash_1, hash_func_t hash_2, hash_cmp_func_t hash_cmp));
|
||||
void hash_load __P((struct hash_table *ht, void *item_table,
|
||||
unsigned long cardinality, unsigned long size));
|
||||
void **hash_find_slot __P((struct hash_table *ht, void const *key));
|
||||
void *hash_find_item __P((struct hash_table *ht, void const *key));
|
||||
void *hash_insert __P((struct hash_table *ht, void *item));
|
||||
void *hash_insert_at __P((struct hash_table *ht, void *item, void const *slot));
|
||||
void *hash_delete __P((struct hash_table *ht, void const *item));
|
||||
void *hash_delete_at __P((struct hash_table *ht, void const *slot));
|
||||
void hash_delete_items __P((struct hash_table *ht));
|
||||
void hash_free_items __P((struct hash_table *ht));
|
||||
void hash_free __P((struct hash_table *ht, int free_items));
|
||||
void hash_map __P((struct hash_table *ht, hash_map_func_t map));
|
||||
void hash_print_stats __P((struct hash_table *ht, FILE *out_FILE));
|
||||
void **hash_dump __P((struct hash_table *ht, void **vector_0, qsort_cmp_t compare));
|
||||
|
||||
extern void *hash_deleted_item;
|
||||
#define HASH_VACANT(item) ((item) == 0 || (void *) (item) == hash_deleted_item)
|
||||
|
||||
|
||||
/* hash and comparison macros for string keys. */
|
||||
|
||||
#define STRING_HASH_1(_key_, _result_) { \
|
||||
unsigned char const *kk = (unsigned char const *) (_key_) - 1; \
|
||||
while (*++kk) \
|
||||
(_result_) += (*kk << (kk[1] & 0xf)); \
|
||||
} while (0)
|
||||
#define return_STRING_HASH_1(_key_) do { \
|
||||
unsigned long result = 0; \
|
||||
STRING_HASH_1 ((_key_), result); \
|
||||
return result; \
|
||||
} while (0)
|
||||
|
||||
#define STRING_HASH_2(_key_, _result_) do { \
|
||||
unsigned char const *kk = (unsigned char const *) (_key_) - 1; \
|
||||
while (*++kk) \
|
||||
(_result_) += (*kk << (kk[1] & 0x7)); \
|
||||
} while (0)
|
||||
#define return_STRING_HASH_2(_key_) do { \
|
||||
unsigned long result = 0; \
|
||||
STRING_HASH_2 ((_key_), result); \
|
||||
return result; \
|
||||
} while (0)
|
||||
|
||||
#define STRING_COMPARE(_x_, _y_, _result_) do { \
|
||||
unsigned char const *xx = (unsigned char const *) (_x_) - 1; \
|
||||
unsigned char const *yy = (unsigned char const *) (_y_) - 1; \
|
||||
do { \
|
||||
if (*++xx == '\0') { \
|
||||
yy++; \
|
||||
break; \
|
||||
} \
|
||||
} while (*xx == *++yy); \
|
||||
(_result_) = *xx - *yy; \
|
||||
} while (0)
|
||||
#define return_STRING_COMPARE(_x_, _y_) do { \
|
||||
int result; \
|
||||
STRING_COMPARE (_x_, _y_, result); \
|
||||
return result; \
|
||||
} while (0)
|
||||
|
||||
/* hash and comparison macros for integer keys. */
|
||||
|
||||
#define INTEGER_HASH_1(_key_, _result_) do { \
|
||||
(_result_) += ((unsigned long)(_key_)); \
|
||||
} while (0)
|
||||
#define return_INTEGER_HASH_1(_key_) do { \
|
||||
unsigned long result = 0; \
|
||||
INTEGER_HASH_1 ((_key_), result); \
|
||||
return result; \
|
||||
} while (0)
|
||||
|
||||
#define INTEGER_HASH_2(_key_, _result_) do { \
|
||||
(_result_) += ~((unsigned long)(_key_)); \
|
||||
} while (0)
|
||||
#define return_INTEGER_HASH_2(_key_) do { \
|
||||
unsigned long result = 0; \
|
||||
INTEGER_HASH_2 ((_key_), result); \
|
||||
return result; \
|
||||
} while (0)
|
||||
|
||||
#define INTEGER_COMPARE(_x_, _y_, _result_) do { \
|
||||
(_result_) = _x_ - _y_; \
|
||||
} while (0)
|
||||
#define return_INTEGER_COMPARE(_x_, _y_) do { \
|
||||
int result; \
|
||||
INTEGER_COMPARE (_x_, _y_, result); \
|
||||
return result; \
|
||||
} while (0)
|
||||
|
||||
/* hash and comparison macros for address keys. */
|
||||
|
||||
#define ADDRESS_HASH_1(_key_, _result_) INTEGER_HASH_1 (((unsigned long)(_key_)) >> 3, (_result_))
|
||||
#define ADDRESS_HASH_2(_key_, _result_) INTEGER_HASH_2 (((unsigned long)(_key_)) >> 3, (_result_))
|
||||
#define ADDRESS_COMPARE(_x_, _y_, _result_) INTEGER_COMPARE ((_x_), (_y_), (_result_))
|
||||
#define return_ADDRESS_HASH_1(_key_) return_INTEGER_HASH_1 (((unsigned long)(_key_)) >> 3)
|
||||
#define return_ADDRESS_HASH_2(_key_) return_INTEGER_HASH_2 (((unsigned long)(_key_)) >> 3)
|
||||
#define return_ADDRESS_COMPARE(_x_, _y_) return_INTEGER_COMPARE ((_x_), (_y_))
|
||||
|
||||
#endif /* not _hash_h_ */
|
||||
+1
-10
@@ -63,11 +63,6 @@
|
||||
#endif
|
||||
|
||||
#if HAVE_WCHAR_H
|
||||
|
||||
/* BSD/OS 4.1 wchar.h requires FILE and struct tm to be declared. */
|
||||
# include <stdio.h>
|
||||
# include <time.h>
|
||||
|
||||
# include <wchar.h>
|
||||
#endif
|
||||
|
||||
@@ -78,12 +73,8 @@
|
||||
# undef MB_CUR_MAX
|
||||
# define MB_CUR_MAX 1
|
||||
# define mbrtowc(pwc, s, n, ps) ((*(pwc) = *(s)) != 0)
|
||||
# define iswprint(wc) ISPRINT ((unsigned char) (wc))
|
||||
# undef HAVE_MBSINIT
|
||||
#endif
|
||||
|
||||
#if !defined mbsinit && !HAVE_MBSINIT
|
||||
# define mbsinit(ps) 1
|
||||
# define iswprint(wc) ISPRINT ((unsigned char) (wc))
|
||||
#endif
|
||||
|
||||
#ifndef iswprint
|
||||
|
||||
@@ -11,7 +11,6 @@ isc-posix.m4 \
|
||||
lcmessage.m4 \
|
||||
m4.m4 \
|
||||
malloc.m4 \
|
||||
mbrtowc.m4 \
|
||||
mbstate_t.m4 \
|
||||
prereq.m4 \
|
||||
progtest.m4 \
|
||||
|
||||
+235
@@ -0,0 +1,235 @@
|
||||
# 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@
|
||||
|
||||
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@
|
||||
AWK = @AWK@
|
||||
BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
|
||||
CATALOGS = @CATALOGS@
|
||||
CATOBJEXT = @CATOBJEXT@
|
||||
CC = @CC@
|
||||
CPP = @CPP@
|
||||
DATADIRNAME = @DATADIRNAME@
|
||||
DEPDIR = @DEPDIR@
|
||||
EXEEXT = @EXEEXT@
|
||||
GENCAT = @GENCAT@
|
||||
GLIBC21 = @GLIBC21@
|
||||
GMOFILES = @GMOFILES@
|
||||
GMSGFMT = @GMSGFMT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
INSTOBJEXT = @INSTOBJEXT@
|
||||
INTLBISON = @INTLBISON@
|
||||
INTLLIBS = @INTLLIBS@
|
||||
INTLOBJS = @INTLOBJS@
|
||||
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
|
||||
LIBICONV = @LIBICONV@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
M4 = @M4@
|
||||
MKINSTALLDIRS = @MKINSTALLDIRS@
|
||||
MSGFMT = @MSGFMT@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
POFILES = @POFILES@
|
||||
POSUB = @POSUB@
|
||||
RANLIB = @RANLIB@
|
||||
U = @U@
|
||||
USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
|
||||
USE_NLS = @USE_NLS@
|
||||
VERSION = @VERSION@
|
||||
WARNING_CFLAGS = @WARNING_CFLAGS@
|
||||
am__include = @am__include@
|
||||
am__quote = @am__quote@
|
||||
install_sh = @install_sh@
|
||||
|
||||
EXTRA_DIST = \
|
||||
c-bs-a.m4 \
|
||||
codeset.m4 \
|
||||
dmalloc.m4 \
|
||||
error.m4 \
|
||||
gettext.m4 \
|
||||
glibc21.m4 \
|
||||
iconv.m4 \
|
||||
isc-posix.m4 \
|
||||
lcmessage.m4 \
|
||||
m4.m4 \
|
||||
malloc.m4 \
|
||||
mbstate_t.m4 \
|
||||
prereq.m4 \
|
||||
progtest.m4 \
|
||||
realloc.m4 \
|
||||
strerror_r.m4 \
|
||||
warning.m4
|
||||
|
||||
subdir = m4
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
DIST_SOURCES =
|
||||
DIST_COMMON = Makefile.am Makefile.in
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu m4/Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) && \
|
||||
CONFIG_HEADERS= CONFIG_LINKS= \
|
||||
CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
|
||||
uninstall-info-am:
|
||||
tags: TAGS
|
||||
TAGS:
|
||||
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
top_distdir = ..
|
||||
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@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
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile
|
||||
|
||||
installdirs:
|
||||
|
||||
install: install-am
|
||||
install-exec: install-exec-am
|
||||
install-data: install-data-am
|
||||
uninstall: uninstall-am
|
||||
|
||||
install-am: all-am
|
||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
||||
|
||||
installcheck: installcheck-am
|
||||
install-strip:
|
||||
$(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]*
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-generic mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
|
||||
distclean-am: clean-am distclean-generic
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am:
|
||||
|
||||
install-exec-am:
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
installcheck-am:
|
||||
|
||||
maintainer-clean: maintainer-clean-am
|
||||
|
||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
mostlyclean-am: mostlyclean-generic
|
||||
|
||||
uninstall-am: uninstall-info-am
|
||||
|
||||
.PHONY: all all-am check check-am clean clean-generic distclean \
|
||||
distclean-generic distdir dvi dvi-am info info-am install \
|
||||
install-am install-data install-data-am install-exec \
|
||||
install-exec-am install-info install-info-am install-man \
|
||||
install-strip installcheck installcheck-am installdirs \
|
||||
maintainer-clean maintainer-clean-generic mostlyclean \
|
||||
mostlyclean-generic uninstall uninstall-am uninstall-info-am
|
||||
|
||||
# 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:
|
||||
@@ -1,18 +0,0 @@
|
||||
#serial 4
|
||||
|
||||
dnl From Paul Eggert
|
||||
|
||||
AC_DEFUN([jm_FUNC_MBRTOWC],
|
||||
[
|
||||
AC_CACHE_CHECK([whether mbrtowc and mbstate_t are properly declared],
|
||||
jm_cv_func_mbrtowc,
|
||||
[AC_TRY_LINK(
|
||||
[#include <wchar.h>],
|
||||
[mbstate_t state; return ! (sizeof state && mbrtowc);],
|
||||
jm_cv_func_mbrtowc=yes,
|
||||
jm_cv_func_mbrtowc=no)])
|
||||
if test $jm_cv_func_mbrtowc = yes; then
|
||||
AC_DEFINE(HAVE_MBRTOWC, 1,
|
||||
[Define to 1 if mbrtowc and mbstate_t are properly declared.])
|
||||
fi
|
||||
])
|
||||
+3
-4
@@ -1,13 +1,12 @@
|
||||
#serial 2
|
||||
#serial 1
|
||||
|
||||
dnl These are the prerequisite macros for files in the lib/
|
||||
dnl directories of Bison.
|
||||
|
||||
AC_DEFUN([jm_PREREQ_QUOTEARG],
|
||||
[
|
||||
AC_CHECK_FUNCS(isascii iswprint mbsinit)
|
||||
jm_FUNC_MBRTOWC
|
||||
AC_CHECK_HEADERS(limits.h stddef.h stdlib.h string.h wchar.h wctype.h)
|
||||
AC_CHECK_FUNCS(isascii iswprint mbrtowc)
|
||||
AC_CHECK_HEADERS(limits.h stdlib.h string.h wchar.h wctype.h)
|
||||
AC_HEADER_STDC
|
||||
AC_C_BACKSLASH_A
|
||||
AC_MBSTATE_T
|
||||
|
||||
@@ -1,13 +1,3 @@
|
||||
2001-10-04 gettextize <[email protected]>
|
||||
|
||||
* Makefile.in.in: Upgrade to gettext-0.10.40.
|
||||
* cat-id-tbl.c: Remove file.
|
||||
|
||||
2001-09-27 gettextize <[email protected]>
|
||||
|
||||
* Makefile.in.in: Upgrade to gettext-0.10.40.
|
||||
* cat-id-tbl.c: Remove file.
|
||||
|
||||
2001-08-03 gettextize <[email protected]>
|
||||
|
||||
* Makefile.in.in: Upgrade to gettext-0.10.39.
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: bison 1.25\n"
|
||||
"POT-Creation-Date: 2001-10-02 18:30+0200\n"
|
||||
"POT-Creation-Date: 2001-09-27 10:55+0200\n"
|
||||
"PO-Revision-Date: 1996-10-10 17:54 MET DST\n"
|
||||
"Last-Translator: Ulrich Drepper <[email protected]>\n"
|
||||
"Language-Team: German <[email protected]>\n"
|
||||
@@ -129,12 +129,12 @@ msgstr ""
|
||||
msgid "%s derives"
|
||||
msgstr "%s leitet ab"
|
||||
|
||||
#: src/files.c:133
|
||||
#: src/files.c:136
|
||||
#, c-format
|
||||
msgid "cannot open file `%s'"
|
||||
msgstr ""
|
||||
|
||||
#: src/files.c:152
|
||||
#: src/files.c:155
|
||||
msgid "cannot close file"
|
||||
msgstr ""
|
||||
|
||||
@@ -208,7 +208,7 @@ msgid ""
|
||||
"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/getargs.c:214 src/lex.c:650
|
||||
#: src/getargs.c:214 src/lex.c:639
|
||||
#, c-format
|
||||
msgid "`%s' is no longer supported"
|
||||
msgstr ""
|
||||
@@ -278,7 +278,7 @@ msgstr "unerwarteter Typname"
|
||||
msgid "use \"...\" for multi-character literal tokens"
|
||||
msgstr "für Literal mit mehreren Zeichen bitte \"...\" verwenden"
|
||||
|
||||
#: src/main.c:125
|
||||
#: src/main.c:124
|
||||
#, fuzzy, c-format
|
||||
msgid "%s: internal error: %s\n"
|
||||
msgstr "interner Fehler, %s\n"
|
||||
@@ -794,11 +794,11 @@ msgstr "%s: Hauptspeicher ersch
|
||||
#. MARK). A British English Unicode locale should instead
|
||||
#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
|
||||
#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
|
||||
#: lib/quotearg.c:268
|
||||
#: lib/quotearg.c:259
|
||||
msgid "`"
|
||||
msgstr ""
|
||||
|
||||
#: lib/quotearg.c:269
|
||||
#: lib/quotearg.c:260
|
||||
msgid "'"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: GNU bison 1.25\n"
|
||||
"POT-Creation-Date: 2001-10-02 18:30+0200\n"
|
||||
"POT-Creation-Date: 2001-09-27 10:55+0200\n"
|
||||
"PO-Revision-Date: 1998-09-21 10:19+0200\n"
|
||||
"Last-Translator: Nicolás García-Pedrajas <[email protected]>\n"
|
||||
"Language-Team: Spanish <[email protected]>\n"
|
||||
@@ -192,12 +192,12 @@ msgstr ""
|
||||
msgid "%s derives"
|
||||
msgstr "%s deriva"
|
||||
|
||||
#: src/files.c:133
|
||||
#: src/files.c:136
|
||||
#, c-format
|
||||
msgid "cannot open file `%s'"
|
||||
msgstr ""
|
||||
|
||||
#: src/files.c:152
|
||||
#: src/files.c:155
|
||||
msgid "cannot close file"
|
||||
msgstr ""
|
||||
|
||||
@@ -271,7 +271,7 @@ msgid ""
|
||||
"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/getargs.c:214 src/lex.c:650
|
||||
#: src/getargs.c:214 src/lex.c:639
|
||||
#, c-format
|
||||
msgid "`%s' is no longer supported"
|
||||
msgstr ""
|
||||
@@ -346,7 +346,7 @@ msgstr "nombre de tipo sin terminar"
|
||||
msgid "use \"...\" for multi-character literal tokens"
|
||||
msgstr "use \"...\" para terminales literales multicarácter"
|
||||
|
||||
#: src/main.c:125
|
||||
#: src/main.c:124
|
||||
#, fuzzy, c-format
|
||||
msgid "%s: internal error: %s\n"
|
||||
msgstr "error interno, %s\n"
|
||||
@@ -924,11 +924,11 @@ msgstr "%s: memoria agotada\n"
|
||||
#. MARK). A British English Unicode locale should instead
|
||||
#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
|
||||
#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
|
||||
#: lib/quotearg.c:268
|
||||
#: lib/quotearg.c:259
|
||||
msgid "`"
|
||||
msgstr ""
|
||||
|
||||
#: lib/quotearg.c:269
|
||||
#: lib/quotearg.c:260
|
||||
msgid "'"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: bison 1.28d\n"
|
||||
"POT-Creation-Date: 2001-10-02 18:30+0200\n"
|
||||
"POT-Creation-Date: 2001-09-27 10:55+0200\n"
|
||||
"PO-Revision-Date: 2001-08-29 17:06+02:00\n"
|
||||
"Last-Translator: Toomas Soome <[email protected]>\n"
|
||||
"Language-Team: Estonian <[email protected]>\n"
|
||||
@@ -128,12 +128,12 @@ msgstr "DERIVES"
|
||||
msgid "%s derives"
|
||||
msgstr "%s derives"
|
||||
|
||||
#: src/files.c:133
|
||||
#: src/files.c:136
|
||||
#, c-format
|
||||
msgid "cannot open file `%s'"
|
||||
msgstr "faili `%s' ei saa avada"
|
||||
|
||||
#: src/files.c:152
|
||||
#: src/files.c:155
|
||||
msgid "cannot close file"
|
||||
msgstr "faili ei õnnestu sulgeda"
|
||||
|
||||
@@ -231,7 +231,7 @@ msgstr ""
|
||||
"See on vaba tarkvara; kopeerimistingimused leiate lähtetekstidest. Garantii\n"
|
||||
"PUUDUB; ka müügiks või mingil eesmärgil kasutamiseks.\n"
|
||||
|
||||
#: src/getargs.c:214 src/lex.c:650
|
||||
#: src/getargs.c:214 src/lex.c:639
|
||||
#, c-format
|
||||
msgid "`%s' is no longer supported"
|
||||
msgstr "`%s' ei ole enam toetatud"
|
||||
@@ -299,7 +299,7 @@ msgstr "l
|
||||
msgid "use \"...\" for multi-character literal tokens"
|
||||
msgstr "kasuta mitmesümboliliste literaalidega \"...\" konstruktsiooni"
|
||||
|
||||
#: src/main.c:125
|
||||
#: src/main.c:124
|
||||
#, c-format
|
||||
msgid "%s: internal error: %s\n"
|
||||
msgstr "%s: sisemine viga: %s\n"
|
||||
@@ -783,11 +783,11 @@ msgstr "m
|
||||
#. MARK). A British English Unicode locale should instead
|
||||
#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
|
||||
#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
|
||||
#: lib/quotearg.c:268
|
||||
#: lib/quotearg.c:259
|
||||
msgid "`"
|
||||
msgstr "`"
|
||||
|
||||
#: lib/quotearg.c:269
|
||||
#: lib/quotearg.c:260
|
||||
msgid "'"
|
||||
msgstr "'"
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: GNU bison 1.28d\n"
|
||||
"POT-Creation-Date: 2001-10-02 18:30+0200\n"
|
||||
"POT-Creation-Date: 2001-09-27 10:55+0200\n"
|
||||
"PO-Revision-Date: 2001-08-29 20:00-0500\n"
|
||||
"Last-Translator: Michel Robitaille <[email protected]>\n"
|
||||
"Language-Team: French <[email protected]>\n"
|
||||
@@ -130,12 +130,12 @@ msgstr "D
|
||||
msgid "%s derives"
|
||||
msgstr "%s dérive"
|
||||
|
||||
#: src/files.c:133
|
||||
#: src/files.c:136
|
||||
#, c-format
|
||||
msgid "cannot open file `%s'"
|
||||
msgstr "ne peut ouvrir le fichier `%s'"
|
||||
|
||||
#: src/files.c:152
|
||||
#: src/files.c:155
|
||||
msgid "cannot close file"
|
||||
msgstr "ne peut fermer le fichier"
|
||||
|
||||
@@ -237,7 +237,7 @@ msgstr ""
|
||||
"reproduction. AUCUNE garantie n'est donnée; tant pour des raisons\n"
|
||||
"COMMERCIALES que pour RÉPONDRE À UN BESOIN PARTICULIER.\n"
|
||||
|
||||
#: src/getargs.c:214 src/lex.c:650
|
||||
#: src/getargs.c:214 src/lex.c:639
|
||||
#, c-format
|
||||
msgid "`%s' is no longer supported"
|
||||
msgstr "`%s' n'est plus supporté"
|
||||
@@ -305,7 +305,7 @@ msgstr "le nom de type ne se termine pas"
|
||||
msgid "use \"...\" for multi-character literal tokens"
|
||||
msgstr "utilisez \"...\" pour les terminaux litéraux de plusieurs caractères"
|
||||
|
||||
#: src/main.c:125
|
||||
#: src/main.c:124
|
||||
#, c-format
|
||||
msgid "%s: internal error: %s\n"
|
||||
msgstr "%s: erreur interne: %s\n"
|
||||
@@ -790,11 +790,11 @@ msgstr "m
|
||||
#. MARK). A British English Unicode locale should instead
|
||||
#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
|
||||
#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
|
||||
#: lib/quotearg.c:268
|
||||
#: lib/quotearg.c:259
|
||||
msgid "`"
|
||||
msgstr "`"
|
||||
|
||||
#: lib/quotearg.c:269
|
||||
#: lib/quotearg.c:260
|
||||
msgid "'"
|
||||
msgstr "'"
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: GNU bison 1.28\n"
|
||||
"POT-Creation-Date: 2001-10-02 18:30+0200\n"
|
||||
"POT-Creation-Date: 2001-09-27 10:55+0200\n"
|
||||
"PO-Revision-Date: 1999-09-28 21:10+0900\n"
|
||||
"Last-Translator: Daisuke Yamashita <[email protected]>\n"
|
||||
"Language-Team: Japanese <[email protected]>\n"
|
||||
@@ -135,12 +135,12 @@ msgstr ""
|
||||
msgid "%s derives"
|
||||
msgstr "%s は以下から派生"
|
||||
|
||||
#: src/files.c:133
|
||||
#: src/files.c:136
|
||||
#, c-format
|
||||
msgid "cannot open file `%s'"
|
||||
msgstr ""
|
||||
|
||||
#: src/files.c:152
|
||||
#: src/files.c:155
|
||||
msgid "cannot close file"
|
||||
msgstr ""
|
||||
|
||||
@@ -214,7 +214,7 @@ msgid ""
|
||||
"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/getargs.c:214 src/lex.c:650
|
||||
#: src/getargs.c:214 src/lex.c:639
|
||||
#, c-format
|
||||
msgid "`%s' is no longer supported"
|
||||
msgstr ""
|
||||
@@ -283,7 +283,7 @@ msgstr "
|
||||
msgid "use \"...\" for multi-character literal tokens"
|
||||
msgstr "複数文字のリテラルトークンには \"...\" を使いましょう"
|
||||
|
||||
#: src/main.c:125
|
||||
#: src/main.c:124
|
||||
#, c-format
|
||||
msgid "%s: internal error: %s\n"
|
||||
msgstr "%s: 内部エラー: %s\n"
|
||||
@@ -796,11 +796,11 @@ msgstr "%s:
|
||||
#. MARK). A British English Unicode locale should instead
|
||||
#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
|
||||
#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
|
||||
#: lib/quotearg.c:268
|
||||
#: lib/quotearg.c:259
|
||||
msgid "`"
|
||||
msgstr ""
|
||||
|
||||
#: lib/quotearg.c:269
|
||||
#: lib/quotearg.c:260
|
||||
msgid "'"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: bison 1.25\n"
|
||||
"POT-Creation-Date: 2001-10-02 18:30+0200\n"
|
||||
"POT-Creation-Date: 2001-09-27 10:55+0200\n"
|
||||
"PO-Revision-Date: 1996-08-27 15:34 MET DST\n"
|
||||
"Last-Translator: Erick Branderhorst <[email protected]>\n"
|
||||
"Language-Team: Dutch <[email protected]>\n"
|
||||
@@ -135,12 +135,12 @@ msgstr ""
|
||||
msgid "%s derives"
|
||||
msgstr "%s afgeleiden"
|
||||
|
||||
#: src/files.c:133
|
||||
#: src/files.c:136
|
||||
#, c-format
|
||||
msgid "cannot open file `%s'"
|
||||
msgstr ""
|
||||
|
||||
#: src/files.c:152
|
||||
#: src/files.c:155
|
||||
msgid "cannot close file"
|
||||
msgstr ""
|
||||
|
||||
@@ -214,7 +214,7 @@ msgid ""
|
||||
"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
|
||||
msgstr ""
|
||||
|
||||
#: src/getargs.c:214 src/lex.c:650
|
||||
#: src/getargs.c:214 src/lex.c:639
|
||||
#, c-format
|
||||
msgid "`%s' is no longer supported"
|
||||
msgstr ""
|
||||
@@ -283,7 +283,7 @@ msgstr "niet getermineerd type naam"
|
||||
msgid "use \"...\" for multi-character literal tokens"
|
||||
msgstr "gebruik \"...\" voor meerdere karakters literal tekens"
|
||||
|
||||
#: src/main.c:125
|
||||
#: src/main.c:124
|
||||
#, fuzzy, c-format
|
||||
msgid "%s: internal error: %s\n"
|
||||
msgstr "interne fout, %s\n"
|
||||
@@ -799,11 +799,11 @@ msgstr "%s: geen geheugen meer beschikbaar\n"
|
||||
#. MARK). A British English Unicode locale should instead
|
||||
#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
|
||||
#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
|
||||
#: lib/quotearg.c:268
|
||||
#: lib/quotearg.c:259
|
||||
msgid "`"
|
||||
msgstr ""
|
||||
|
||||
#: lib/quotearg.c:269
|
||||
#: lib/quotearg.c:260
|
||||
msgid "'"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: bison 1.29\n"
|
||||
"POT-Creation-Date: 2001-10-02 18:30+0200\n"
|
||||
"POT-Creation-Date: 2001-09-27 10:55+0200\n"
|
||||
"PO-Revision-Date: 2001-09-09 13:49+04:00\n"
|
||||
"Last-Translator: Dmitry S. Sivachenko <[email protected]>\n"
|
||||
"Language-Team: Russian <[email protected]>\n"
|
||||
@@ -129,12 +129,12 @@ msgstr "DERIVES"
|
||||
msgid "%s derives"
|
||||
msgstr "%s ×Ù×ÏÄÉÔ"
|
||||
|
||||
#: src/files.c:133
|
||||
#: src/files.c:136
|
||||
#, c-format
|
||||
msgid "cannot open file `%s'"
|
||||
msgstr "ÎÅ ÕÄÁÅÔÓÑ ÏÔËÒÙÔØ ÆÁÊÌ `%s'"
|
||||
|
||||
#: src/files.c:152
|
||||
#: src/files.c:155
|
||||
msgid "cannot close file"
|
||||
msgstr "ÎÅ ÕÄÁÅÔÓÑ ÚÁËÒÙÔØ ÆÁÊÌ"
|
||||
|
||||
@@ -236,7 +236,7 @@ msgstr ""
|
||||
"ðòéçïäîïóôé\n"
|
||||
"äìñ ïðòåäåìåîîïê ãåìé.\n"
|
||||
|
||||
#: src/getargs.c:214 src/lex.c:650
|
||||
#: src/getargs.c:214 src/lex.c:639
|
||||
#, c-format
|
||||
msgid "`%s' is no longer supported"
|
||||
msgstr "`%s' ÂÏÌØÛÅ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ"
|
||||
@@ -304,7 +304,7 @@ msgstr "
|
||||
msgid "use \"...\" for multi-character literal tokens"
|
||||
msgstr "ÉÓÐÏÌØÚÕÊÔÅ \"...\" ÄÌÑ ÍÎÏÇÏÓÉÍ×ÏÌØÎÙÈ ÌÉÔÅÒÁÌØÎÙÈ ÌÅËÓÅÍ"
|
||||
|
||||
#: src/main.c:125
|
||||
#: src/main.c:124
|
||||
#, c-format
|
||||
msgid "%s: internal error: %s\n"
|
||||
msgstr "%s: ×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ: %s\n"
|
||||
@@ -787,11 +787,11 @@ msgstr "
|
||||
#. MARK). A British English Unicode locale should instead
|
||||
#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
|
||||
#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
|
||||
#: lib/quotearg.c:268
|
||||
#: lib/quotearg.c:259
|
||||
msgid "`"
|
||||
msgstr "`"
|
||||
|
||||
#: lib/quotearg.c:269
|
||||
#: lib/quotearg.c:260
|
||||
msgid "'"
|
||||
msgstr "'"
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: bison 1.28c\n"
|
||||
"POT-Creation-Date: 2001-10-02 18:30+0200\n"
|
||||
"POT-Creation-Date: 2001-09-27 10:55+0200\n"
|
||||
"PO-Revision-Date: 2001-09-10 10:54GMT\n"
|
||||
"Last-Translator: Altug Bayram <[email protected]>\n"
|
||||
"Language-Team: Turkish <[email protected]>\n"
|
||||
@@ -131,12 +131,12 @@ msgstr "T
|
||||
msgid "%s derives"
|
||||
msgstr "%s türetildi"
|
||||
|
||||
#: src/files.c:133
|
||||
#: src/files.c:136
|
||||
#, c-format
|
||||
msgid "cannot open file `%s'"
|
||||
msgstr "`%s' dosyasý açýlamadý"
|
||||
|
||||
#: src/files.c:152
|
||||
#: src/files.c:155
|
||||
msgid "cannot close file"
|
||||
msgstr "dosya kapatýlamýyor"
|
||||
|
||||
@@ -238,7 +238,7 @@ msgstr ""
|
||||
"Hiçbir garantisi yoktur; hatta SATILABÝLÝRLÝÐÝ veya HERHANGÝ BÝR AMACA\n"
|
||||
"UYGUNLUÐU için bile garanti verilmez.\n"
|
||||
|
||||
#: src/getargs.c:214 src/lex.c:650
|
||||
#: src/getargs.c:214 src/lex.c:639
|
||||
#, c-format
|
||||
msgid "`%s' is no longer supported"
|
||||
msgstr "`%s' artýk desteklenmiyor"
|
||||
@@ -306,7 +306,7 @@ msgstr "sonland
|
||||
msgid "use \"...\" for multi-character literal tokens"
|
||||
msgstr "çok-karakterli yazýn andaçlarý için \"...\" kullan"
|
||||
|
||||
#: src/main.c:125
|
||||
#: src/main.c:124
|
||||
#, c-format
|
||||
msgid "%s: internal error: %s\n"
|
||||
msgstr "%s: iç hata: %s\n"
|
||||
@@ -789,11 +789,11 @@ msgstr "bellek t
|
||||
#. MARK). A British English Unicode locale should instead
|
||||
#. translate these to U+2018 (LEFT SINGLE QUOTATION MARK) and
|
||||
#. U+2019 (RIGHT SINGLE QUOTATION MARK), respectively.
|
||||
#: lib/quotearg.c:268
|
||||
#: lib/quotearg.c:259
|
||||
msgid "`"
|
||||
msgstr "`"
|
||||
|
||||
#: lib/quotearg.c:269
|
||||
#: lib/quotearg.c:260
|
||||
msgid "'"
|
||||
msgstr "'"
|
||||
|
||||
|
||||
@@ -3,4 +3,3 @@
|
||||
Makefile
|
||||
bison
|
||||
*.log
|
||||
*.flc
|
||||
+5
-7
@@ -13,19 +13,17 @@ bin_PROGRAMS = bison
|
||||
bison_SOURCES = LR0.c closure.c complain.c conflicts.c \
|
||||
derives.c \
|
||||
files.c getargs.c gram.c lalr.c lex.c main.c nullable.c \
|
||||
output.c print_graph.c \
|
||||
muscle_tab.c options.c \
|
||||
print.c reader.c reduce.c symtab.c warshall.c vcg.c
|
||||
output.c \
|
||||
print.c reader.c reduce.c symtab.c warshall.c vcg.c print_graph.c
|
||||
|
||||
EXTRA_bison_SOURCES = vmsgetargs.c
|
||||
|
||||
noinst_HEADERS = LR0.h closure.h complain.h conflicts.h \
|
||||
derives.h \
|
||||
files.h getargs.h gram.h lalr.h lex.h nullable.h \
|
||||
output.h print_graph.h \
|
||||
muscle_tab.h options.h \
|
||||
print.h reader.h reduce.h state.h symtab.h warshall.h system.h \
|
||||
types.h vcg.h vcg_defaults.h
|
||||
output.h state.h \
|
||||
print.h reader.h reduce.h symtab.h warshall.h system.h types.h \
|
||||
vcg.h vcg_defaults.h print_graph.h
|
||||
|
||||
pkgdata_DATA = bison.simple bison.hairy
|
||||
|
||||
|
||||
+468
@@ -0,0 +1,468 @@
|
||||
# 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@
|
||||
|
||||
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@
|
||||
AWK = @AWK@
|
||||
BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
|
||||
CATALOGS = @CATALOGS@
|
||||
CATOBJEXT = @CATOBJEXT@
|
||||
CC = @CC@
|
||||
CPP = @CPP@
|
||||
DATADIRNAME = @DATADIRNAME@
|
||||
DEPDIR = @DEPDIR@
|
||||
EXEEXT = @EXEEXT@
|
||||
GENCAT = @GENCAT@
|
||||
GLIBC21 = @GLIBC21@
|
||||
GMOFILES = @GMOFILES@
|
||||
GMSGFMT = @GMSGFMT@
|
||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
||||
INSTOBJEXT = @INSTOBJEXT@
|
||||
INTLBISON = @INTLBISON@
|
||||
INTLLIBS = @INTLLIBS@
|
||||
INTLOBJS = @INTLOBJS@
|
||||
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
|
||||
LIBICONV = @LIBICONV@
|
||||
LIBOBJS = @LIBOBJS@
|
||||
M4 = @M4@
|
||||
MKINSTALLDIRS = @MKINSTALLDIRS@
|
||||
MSGFMT = @MSGFMT@
|
||||
OBJEXT = @OBJEXT@
|
||||
PACKAGE = @PACKAGE@
|
||||
POFILES = @POFILES@
|
||||
POSUB = @POSUB@
|
||||
RANLIB = @RANLIB@
|
||||
U = @U@
|
||||
USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
|
||||
USE_NLS = @USE_NLS@
|
||||
VERSION = @VERSION@
|
||||
WARNING_CFLAGS = @WARNING_CFLAGS@
|
||||
am__include = @am__include@
|
||||
am__quote = @am__quote@
|
||||
install_sh = @install_sh@
|
||||
|
||||
AUTOMAKE_OPTIONS = 1.4 ../lib/ansi2knr
|
||||
DEFS = @DEFS@ \
|
||||
-DBISON_SIMPLE=\"$(pkgdatadir)/bison.simple\" \
|
||||
-DBISON_HAIRY=\"$(pkgdatadir)/bison.hairy\" \
|
||||
-DLOCALEDIR=\"$(datadir)/locale\"
|
||||
|
||||
|
||||
INCLUDES = -I../intl -I$(top_srcdir)/lib -I..
|
||||
LDADD = @INTLLIBS@ ../lib/libbison.a
|
||||
|
||||
bin_PROGRAMS = bison
|
||||
|
||||
bison_SOURCES = LR0.c closure.c complain.c conflicts.c \
|
||||
derives.c \
|
||||
files.c getargs.c gram.c lalr.c lex.c main.c nullable.c \
|
||||
output.c \
|
||||
print.c reader.c reduce.c symtab.c warshall.c vcg.c print_graph.c
|
||||
|
||||
|
||||
EXTRA_bison_SOURCES = vmsgetargs.c
|
||||
|
||||
noinst_HEADERS = LR0.h closure.h complain.h conflicts.h \
|
||||
derives.h \
|
||||
files.h getargs.h gram.h lalr.h lex.h nullable.h \
|
||||
output.h state.h \
|
||||
print.h reader.h reduce.h symtab.h warshall.h system.h types.h \
|
||||
vcg.h vcg_defaults.h print_graph.h
|
||||
|
||||
|
||||
pkgdata_DATA = bison.simple bison.hairy
|
||||
|
||||
EXTRA_DIST = $(pkgdata_DATA) build.com bison.cld vmshlp.mar
|
||||
subdir = src
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
|
||||
CONFIG_HEADER = $(top_builddir)/config.h
|
||||
CONFIG_CLEAN_FILES =
|
||||
bin_PROGRAMS = bison$(EXEEXT)
|
||||
PROGRAMS = $(bin_PROGRAMS)
|
||||
|
||||
am_bison_OBJECTS = LR0$U.$(OBJEXT) closure$U.$(OBJEXT) \
|
||||
complain$U.$(OBJEXT) conflicts$U.$(OBJEXT) derives$U.$(OBJEXT) \
|
||||
files$U.$(OBJEXT) getargs$U.$(OBJEXT) gram$U.$(OBJEXT) \
|
||||
lalr$U.$(OBJEXT) lex$U.$(OBJEXT) main$U.$(OBJEXT) \
|
||||
nullable$U.$(OBJEXT) output$U.$(OBJEXT) print$U.$(OBJEXT) \
|
||||
reader$U.$(OBJEXT) reduce$U.$(OBJEXT) symtab$U.$(OBJEXT) \
|
||||
warshall$U.$(OBJEXT) vcg$U.$(OBJEXT) print_graph$U.$(OBJEXT)
|
||||
bison_OBJECTS = $(am_bison_OBJECTS)
|
||||
bison_LDADD = $(LDADD)
|
||||
bison_DEPENDENCIES = ../lib/libbison.a
|
||||
bison_LDFLAGS =
|
||||
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBS = @LIBS@
|
||||
depcomp = $(SHELL) $(top_srcdir)/config/depcomp
|
||||
@AMDEP_TRUE@DEP_FILES = $(DEPDIR)/LR0$U.Po $(DEPDIR)/closure$U.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/complain$U.Po $(DEPDIR)/conflicts$U.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/derives$U.Po $(DEPDIR)/files$U.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/getargs$U.Po $(DEPDIR)/gram$U.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/lalr$U.Po $(DEPDIR)/lex$U.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/main$U.Po $(DEPDIR)/nullable$U.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/output$U.Po $(DEPDIR)/print$U.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/print_graph$U.Po $(DEPDIR)/reader$U.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/reduce$U.Po $(DEPDIR)/symtab$U.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/vcg$U.Po $(DEPDIR)/vmsgetargs$U.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/warshall$U.Po
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
CCLD = $(CC)
|
||||
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
||||
CFLAGS = @CFLAGS@
|
||||
DIST_SOURCES = $(bison_SOURCES) $(EXTRA_bison_SOURCES)
|
||||
DATA = $(pkgdata_DATA)
|
||||
|
||||
HEADERS = $(noinst_HEADERS)
|
||||
|
||||
DIST_COMMON = $(noinst_HEADERS) Makefile.am Makefile.in
|
||||
SOURCES = $(bison_SOURCES) $(EXTRA_bison_SOURCES)
|
||||
|
||||
all: all-am
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .o .obj
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && \
|
||||
$(AUTOMAKE) --gnu src/Makefile
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) && \
|
||||
CONFIG_HEADERS= CONFIG_LINKS= \
|
||||
CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
|
||||
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 \
|
||||
; then \
|
||||
f=`echo $$p1|sed '$(transform);s/$$/$(EXEEXT)/'`; \
|
||||
echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/$$f"; \
|
||||
$(INSTALL_PROGRAM_ENV) $(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)
|
||||
bison$(EXEEXT): $(bison_OBJECTS) $(bison_DEPENDENCIES)
|
||||
@rm -f bison$(EXEEXT)
|
||||
$(LINK) $(bison_LDFLAGS) $(bison_OBJECTS) $(bison_LDADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT) core *.core
|
||||
|
||||
distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
ANSI2KNR = ../lib/ansi2knr
|
||||
../lib/ansi2knr:
|
||||
cd ../lib && $(MAKE) $(AM_MAKEFLAGS) ansi2knr
|
||||
|
||||
mostlyclean-kr:
|
||||
-rm -f *_.c
|
||||
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/LR0$U.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/closure$U.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/complain$U.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/conflicts$U.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/derives$U.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/files$U.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/getargs$U.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/gram$U.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/lalr$U.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/lex$U.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/main$U.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/nullable$U.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/output$U.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/print$U.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/print_graph$U.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/reader$U.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/reduce$U.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/symtab$U.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/vcg$U.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/vmsgetargs$U.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/warshall$U.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 $<`
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
LR0_.c: LR0.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/LR0.c; then echo $(srcdir)/LR0.c; else echo LR0.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > LR0_.c || rm -f LR0_.c
|
||||
closure_.c: closure.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/closure.c; then echo $(srcdir)/closure.c; else echo closure.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > closure_.c || rm -f closure_.c
|
||||
complain_.c: complain.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/complain.c; then echo $(srcdir)/complain.c; else echo complain.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > complain_.c || rm -f complain_.c
|
||||
conflicts_.c: conflicts.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/conflicts.c; then echo $(srcdir)/conflicts.c; else echo conflicts.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > conflicts_.c || rm -f conflicts_.c
|
||||
derives_.c: derives.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/derives.c; then echo $(srcdir)/derives.c; else echo derives.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > derives_.c || rm -f derives_.c
|
||||
files_.c: files.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/files.c; then echo $(srcdir)/files.c; else echo files.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > files_.c || rm -f files_.c
|
||||
getargs_.c: getargs.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/getargs.c; then echo $(srcdir)/getargs.c; else echo getargs.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > getargs_.c || rm -f getargs_.c
|
||||
gram_.c: gram.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/gram.c; then echo $(srcdir)/gram.c; else echo gram.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > gram_.c || rm -f gram_.c
|
||||
lalr_.c: lalr.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/lalr.c; then echo $(srcdir)/lalr.c; else echo lalr.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > lalr_.c || rm -f lalr_.c
|
||||
lex_.c: lex.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/lex.c; then echo $(srcdir)/lex.c; else echo lex.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > lex_.c || rm -f lex_.c
|
||||
main_.c: main.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/main.c; then echo $(srcdir)/main.c; else echo main.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > main_.c || rm -f main_.c
|
||||
nullable_.c: nullable.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/nullable.c; then echo $(srcdir)/nullable.c; else echo nullable.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > nullable_.c || rm -f nullable_.c
|
||||
output_.c: output.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/output.c; then echo $(srcdir)/output.c; else echo output.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > output_.c || rm -f output_.c
|
||||
print_.c: print.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/print.c; then echo $(srcdir)/print.c; else echo print.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > print_.c || rm -f print_.c
|
||||
print_graph_.c: print_graph.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/print_graph.c; then echo $(srcdir)/print_graph.c; else echo print_graph.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > print_graph_.c || rm -f print_graph_.c
|
||||
reader_.c: reader.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/reader.c; then echo $(srcdir)/reader.c; else echo reader.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > reader_.c || rm -f reader_.c
|
||||
reduce_.c: reduce.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/reduce.c; then echo $(srcdir)/reduce.c; else echo reduce.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > reduce_.c || rm -f reduce_.c
|
||||
symtab_.c: symtab.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/symtab.c; then echo $(srcdir)/symtab.c; else echo symtab.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > symtab_.c || rm -f symtab_.c
|
||||
vcg_.c: vcg.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/vcg.c; then echo $(srcdir)/vcg.c; else echo vcg.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > vcg_.c || rm -f vcg_.c
|
||||
vmsgetargs_.c: vmsgetargs.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/vmsgetargs.c; then echo $(srcdir)/vmsgetargs.c; else echo vmsgetargs.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > vmsgetargs_.c || rm -f vmsgetargs_.c
|
||||
warshall_.c: warshall.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/warshall.c; then echo $(srcdir)/warshall.c; else echo warshall.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > warshall_.c || rm -f warshall_.c
|
||||
LR0_.$(OBJEXT) closure_.$(OBJEXT) complain_.$(OBJEXT) \
|
||||
conflicts_.$(OBJEXT) derives_.$(OBJEXT) files_.$(OBJEXT) \
|
||||
getargs_.$(OBJEXT) gram_.$(OBJEXT) lalr_.$(OBJEXT) lex_.$(OBJEXT) \
|
||||
main_.$(OBJEXT) nullable_.$(OBJEXT) output_.$(OBJEXT) print_.$(OBJEXT) \
|
||||
print_graph_.$(OBJEXT) reader_.$(OBJEXT) reduce_.$(OBJEXT) \
|
||||
symtab_.$(OBJEXT) vcg_.$(OBJEXT) vmsgetargs_.$(OBJEXT) \
|
||||
warshall_.$(OBJEXT) : $(ANSI2KNR)
|
||||
uninstall-info-am:
|
||||
install-pkgdataDATA: $(pkgdata_DATA)
|
||||
@$(NORMAL_INSTALL)
|
||||
$(mkinstalldirs) $(DESTDIR)$(pkgdatadir)
|
||||
@list='$(pkgdata_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)$(pkgdatadir)/$$f"; \
|
||||
$(INSTALL_DATA) $$d$$p $(DESTDIR)$(pkgdatadir)/$$f; \
|
||||
done
|
||||
|
||||
uninstall-pkgdataDATA:
|
||||
@$(NORMAL_UNINSTALL)
|
||||
@list='$(pkgdata_DATA)'; for p in $$list; do \
|
||||
f="`echo $$p | sed -e 's|^.*/||'`"; \
|
||||
echo " rm -f $(DESTDIR)$(pkgdatadir)/$$f"; \
|
||||
rm -f $(DESTDIR)$(pkgdatadir)/$$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) $(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)$$unique$(LISP)$$tags" \
|
||||
|| etags $(ETAGS_ARGS) $$tags $$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
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
top_distdir = ..
|
||||
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
|
||||
|
||||
distdir: $(DISTFILES)
|
||||
@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
|
||||
check-am: all-am
|
||||
check: check-am
|
||||
all-am: Makefile $(PROGRAMS) $(DATA) $(HEADERS)
|
||||
|
||||
installdirs:
|
||||
$(mkinstalldirs) $(DESTDIR)$(bindir) $(DESTDIR)$(pkgdatadir)
|
||||
|
||||
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]*
|
||||
|
||||
maintainer-clean-generic:
|
||||
@echo "This command is intended for maintainers to use"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
clean: clean-am
|
||||
|
||||
clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
|
||||
|
||||
distclean: distclean-am
|
||||
|
||||
distclean-am: clean-am distclean-compile distclean-depend \
|
||||
distclean-generic distclean-tags
|
||||
|
||||
dvi: dvi-am
|
||||
|
||||
dvi-am:
|
||||
|
||||
info: info-am
|
||||
|
||||
info-am:
|
||||
|
||||
install-data-am: install-pkgdataDATA
|
||||
|
||||
install-exec-am: install-binPROGRAMS
|
||||
|
||||
install-info: install-info-am
|
||||
|
||||
install-man:
|
||||
|
||||
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-kr
|
||||
|
||||
uninstall-am: uninstall-binPROGRAMS uninstall-info-am \
|
||||
uninstall-pkgdataDATA
|
||||
|
||||
.PHONY: GTAGS all all-am check check-am clean clean-binPROGRAMS \
|
||||
clean-generic distclean distclean-compile distclean-depend \
|
||||
distclean-generic 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-info \
|
||||
install-info-am install-man install-pkgdataDATA install-strip \
|
||||
installcheck installcheck-am installdirs maintainer-clean \
|
||||
maintainer-clean-generic mostlyclean mostlyclean-compile \
|
||||
mostlyclean-generic mostlyclean-kr tags uninstall uninstall-am \
|
||||
uninstall-binPROGRAMS uninstall-info-am uninstall-pkgdataDATA
|
||||
|
||||
# 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:
|
||||
+39
-203
@@ -1,8 +1,5 @@
|
||||
/* -*- C -*- */
|
||||
|
||||
/* A Bison parser, made from %%filename
|
||||
by GNU bison %%version. */
|
||||
|
||||
/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
|
||||
#line
|
||||
/* Skeleton output parser for bison,
|
||||
Copyright 1984, 1989, 1990, 2000, 2001 Free Software Foundation, Inc.
|
||||
|
||||
@@ -31,29 +28,6 @@
|
||||
It was written by Richard Stallman by simplifying the hairy parser
|
||||
used when %semantic_parser is specified. */
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
/* If name_prefix is specify substitute the variables and functions
|
||||
names. */
|
||||
#define yyparse %%prefix##parse
|
||||
#define yylex %%prefix##lex
|
||||
#define yyerror %%prefix##error
|
||||
#define yylval %%prefix##lval
|
||||
#define yychar %%prefix##char
|
||||
#define yydebug %%prefix##debug
|
||||
#define yynerrs %%prefix##nerrs
|
||||
|
||||
/* Copy the user declarations. */
|
||||
#line %%input_line "%%filename"
|
||||
%%prologue
|
||||
|
||||
#line %%line "%%skeleton"
|
||||
#ifndef __cplusplus
|
||||
# ifndef __STDC__
|
||||
# define const
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef YYSTACK_USE_ALLOCA
|
||||
# ifdef alloca
|
||||
# define YYSTACK_USE_ALLOCA 1
|
||||
@@ -104,163 +78,31 @@
|
||||
# define YYSTACK_ALLOC malloc
|
||||
#endif
|
||||
|
||||
#define YYBISON 1 /* Identify Bison output. */
|
||||
#define YYPURE %%pure /* Identify pure parsers. */
|
||||
|
||||
#ifndef YYDEBUG
|
||||
# define YYDEBUG %%debug
|
||||
#endif
|
||||
|
||||
#line %%input_line "%%filename"
|
||||
#ifndef YYSTYPE
|
||||
typedef %%stype YYSTYPE;
|
||||
#endif
|
||||
|
||||
#ifndef YYLTYPE
|
||||
typedef struct yyltype
|
||||
{
|
||||
int first_line;
|
||||
int first_column;
|
||||
int last_line;
|
||||
int last_column;
|
||||
} yyltype;
|
||||
# define YYLTYPE %%ltype
|
||||
#endif
|
||||
|
||||
#ifndef YYERROR_VERBOSE
|
||||
# define YYERROR_VERBOSE %%verbose
|
||||
#endif
|
||||
|
||||
/* Tokens. */
|
||||
%%tokendef
|
||||
|
||||
#define YYFINAL %%final
|
||||
#define YYFLAG %%flag
|
||||
#define YYNTBASE %%ntbase
|
||||
#define YYLAST %%last
|
||||
|
||||
#define YYNTOKENS %%ntokens
|
||||
#define YYNNTS %%nnts
|
||||
#define YYNRULES %%nrules
|
||||
#define YYNSTATES %%nstates
|
||||
#define YYMAXUTOK %%maxtok
|
||||
|
||||
/* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */
|
||||
#define YYTRANSLATE(x) ((unsigned)(x) <= %%maxtok ? yytranslate[x] : %%nsym)
|
||||
|
||||
/* YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX. */
|
||||
static const char yytranslate[] =
|
||||
{
|
||||
%%translate
|
||||
};
|
||||
|
||||
#if YYDEBUG
|
||||
static const short yyprhs[] =
|
||||
{
|
||||
%%prhs
|
||||
};
|
||||
|
||||
static const short yyrhs[] =
|
||||
{
|
||||
%%rhs
|
||||
};
|
||||
|
||||
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
|
||||
static const short yyrline[] =
|
||||
{
|
||||
%%rline
|
||||
};
|
||||
#endif
|
||||
|
||||
#if YYDEBUG || YYERROR_VERBOSE
|
||||
/* YYTNME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */
|
||||
static const char *const yytname[] =
|
||||
{
|
||||
%%tname
|
||||
};
|
||||
#endif
|
||||
|
||||
/* YYTOKNUM[YYN] -- Index in YYTNAME corresponding to YYLEX. */
|
||||
static const short yytoknum[] =
|
||||
{
|
||||
%%toknum
|
||||
};
|
||||
|
||||
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
|
||||
static const short yyr1[] =
|
||||
{
|
||||
%%r1
|
||||
};
|
||||
|
||||
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
|
||||
static const short yyr2[] =
|
||||
{
|
||||
%%r2
|
||||
};
|
||||
|
||||
/* YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE
|
||||
doesn't specify something else to do. Zero means the default is an
|
||||
error. */
|
||||
static const short yydefact[] =
|
||||
{
|
||||
%%defact
|
||||
};
|
||||
|
||||
static const short yydefgoto[] =
|
||||
{
|
||||
%%defgoto
|
||||
};
|
||||
|
||||
static const short yypact[] =
|
||||
{
|
||||
%%pact
|
||||
};
|
||||
|
||||
static const short yypgoto[] =
|
||||
{
|
||||
%%pgoto
|
||||
};
|
||||
|
||||
static const short yytable[] =
|
||||
{
|
||||
%%table
|
||||
};
|
||||
|
||||
static const short yycheck[] =
|
||||
{
|
||||
%%check
|
||||
};
|
||||
|
||||
#define yyerrok (yyerrstatus = 0)
|
||||
#define yyclearin (yychar = YYEMPTY)
|
||||
#define YYEMPTY -2
|
||||
#define YYEOF 0
|
||||
|
||||
#define YYACCEPT goto yyacceptlab
|
||||
#define YYABORT goto yyabortlab
|
||||
#define YYABORT goto yyabortlab
|
||||
#define YYERROR goto yyerrlab1
|
||||
|
||||
/* Like YYERROR except do call yyerror. This remains here temporarily
|
||||
to ease the transition to the new meaning of YYERROR, for GCC.
|
||||
Once GCC version 2 has supplanted version 1, this can go. */
|
||||
|
||||
#define YYFAIL goto yyerrlab
|
||||
|
||||
#define YYRECOVERING() (!!yyerrstatus)
|
||||
|
||||
#define YYBACKUP(Token, Value) \
|
||||
do \
|
||||
if (yychar == YYEMPTY && yylen == 1) \
|
||||
{ \
|
||||
yychar = (Token); \
|
||||
yylval = (Value); \
|
||||
yylval = (Value); \
|
||||
yychar1 = YYTRANSLATE (yychar); \
|
||||
YYPOPSTACK; \
|
||||
goto yybackup; \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
yyerror ("syntax error: cannot back up"); \
|
||||
yyerror ("syntax error: cannot back up"); \
|
||||
YYERROR; \
|
||||
} \
|
||||
while (0)
|
||||
@@ -268,6 +110,7 @@ while (0)
|
||||
#define YYTERROR 1
|
||||
#define YYERRCODE 256
|
||||
|
||||
|
||||
/* YYLLOC_DEFAULT -- Compute the default location (before the actions
|
||||
are run).
|
||||
|
||||
@@ -281,8 +124,6 @@ while (0)
|
||||
Current.last_column = Rhs[N].last_column;
|
||||
#endif
|
||||
|
||||
/* Definition of YYLSP_NEEDED. */
|
||||
#define YYLSP_NEEDED %%locations_flag
|
||||
|
||||
/* YYLEX -- calling `yylex' with the right arguments. */
|
||||
|
||||
@@ -304,6 +145,7 @@ while (0)
|
||||
# define YYLEX yylex ()
|
||||
#endif /* !YYPURE */
|
||||
|
||||
|
||||
/* Enable debugging if requested. */
|
||||
#if YYDEBUG
|
||||
# define YYDPRINTF(Args) \
|
||||
@@ -322,7 +164,7 @@ int yydebug;
|
||||
|
||||
/* YYINITDEPTH -- initial size of the parser's stacks. */
|
||||
#ifndef YYINITDEPTH
|
||||
# define YYINITDEPTH %%initdepth
|
||||
# define YYINITDEPTH 200
|
||||
#endif
|
||||
|
||||
/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
|
||||
@@ -332,11 +174,9 @@ int yydebug;
|
||||
#endif
|
||||
|
||||
#ifndef YYMAXDEPTH
|
||||
# define YYMAXDEPTH %%maxdepth
|
||||
# define YYMAXDEPTH 10000
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* Define __yy_memcpy. Note that the size argument
|
||||
should be passed with type unsigned int, because that is what the non-GCC
|
||||
definitions require. With GCC, __builtin_memcpy takes an arg
|
||||
@@ -365,11 +205,10 @@ __yy_memcpy (char *to, const char *from, unsigned int count)
|
||||
while (i-- > 0)
|
||||
*t++ = *f++;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#line %%line "%%skeleton"
|
||||
#line
|
||||
|
||||
/* The user can define YYPARSE_PARAM as the name of an argument to be passed
|
||||
into yyparse. The argument should have type void *.
|
||||
@@ -406,7 +245,7 @@ int yyparse (void);
|
||||
/* The lookahead symbol. */ \
|
||||
int yychar; \
|
||||
\
|
||||
/* The semantic value of the lookahead symbol. */ \
|
||||
/* The semantic value of the lookahead symbol. */ \
|
||||
YYSTYPE yylval; \
|
||||
\
|
||||
/* Number of parse errors so far. */ \
|
||||
@@ -423,7 +262,8 @@ YYLTYPE yylloc;
|
||||
_YY_DECL_VARIABLES
|
||||
#endif
|
||||
|
||||
/* If nonreentrant, generate the variables here. */
|
||||
|
||||
/* If nonreentrant, generate the variables here. */
|
||||
|
||||
#if !YYPURE
|
||||
YY_DECL_VARIABLES
|
||||
@@ -433,7 +273,7 @@ int
|
||||
yyparse (YYPARSE_PARAM_ARG)
|
||||
YYPARSE_PARAM_DECL
|
||||
{
|
||||
/* If reentrant, generate the variables here. */
|
||||
/* If reentrant, generate the variables here. */
|
||||
#if YYPURE
|
||||
YY_DECL_VARIABLES
|
||||
#endif /* !YYPURE */
|
||||
@@ -453,7 +293,7 @@ yyparse (YYPARSE_PARAM_ARG)
|
||||
Refer to the stacks thru separate pointers, to allow yyoverflow
|
||||
to reallocate them elsewhere. */
|
||||
|
||||
/* The state stack. */
|
||||
/* The state stack. */
|
||||
short yyssa[YYINITDEPTH];
|
||||
short *yyss = yyssa;
|
||||
register short *yyssp;
|
||||
@@ -479,6 +319,7 @@ yyparse (YYPARSE_PARAM_ARG)
|
||||
int yystacksize = YYINITDEPTH;
|
||||
int yyfree_stacks = 0;
|
||||
|
||||
|
||||
/* The variables used to return semantic value and location from the
|
||||
action routines. */
|
||||
YYSTYPE yyval;
|
||||
@@ -487,7 +328,7 @@ yyparse (YYPARSE_PARAM_ARG)
|
||||
# endif
|
||||
|
||||
/* When reducing, the number of symbols on the RHS of the reduced
|
||||
rule. */
|
||||
rule. */
|
||||
int yylen;
|
||||
|
||||
YYDPRINTF ((stderr, "Starting parse\n"));
|
||||
@@ -517,7 +358,7 @@ yyparse (YYPARSE_PARAM_ARG)
|
||||
have just been pushed. so pushing a state here evens the stacks.
|
||||
*/
|
||||
yyssp++;
|
||||
|
||||
|
||||
yysetstate:
|
||||
*yyssp = yystate;
|
||||
|
||||
@@ -575,7 +416,7 @@ yyparse (YYPARSE_PARAM_ARG)
|
||||
yystacksize *= 2;
|
||||
if (yystacksize > YYMAXDEPTH)
|
||||
yystacksize = YYMAXDEPTH;
|
||||
# if !YYSTACK_USE_ALLOCA
|
||||
# ifndef YYSTACK_USE_ALLOCA
|
||||
yyfree_stacks = 1;
|
||||
# endif
|
||||
yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
|
||||
@@ -607,6 +448,7 @@ yyparse (YYPARSE_PARAM_ARG)
|
||||
|
||||
goto yybackup;
|
||||
|
||||
|
||||
/*-----------.
|
||||
| yybackup. |
|
||||
`-----------*/
|
||||
@@ -633,12 +475,12 @@ yybackup:
|
||||
yychar = YYLEX;
|
||||
}
|
||||
|
||||
/* Convert token to internal form (in yychar1) for indexing tables with. */
|
||||
/* Convert token to internal form (in yychar1) for indexing tables with */
|
||||
|
||||
if (yychar <= 0) /* This means end of input. */
|
||||
if (yychar <= 0) /* This means end of input. */
|
||||
{
|
||||
yychar1 = 0;
|
||||
yychar = YYEOF; /* Don't call YYLEX any more. */
|
||||
yychar = YYEOF; /* Don't call YYLEX any more */
|
||||
|
||||
YYDPRINTF ((stderr, "Now at end of input.\n"));
|
||||
}
|
||||
@@ -759,11 +601,8 @@ yyreduce:
|
||||
fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
|
||||
}
|
||||
#endif
|
||||
switch (yyn)
|
||||
{
|
||||
%%action
|
||||
}
|
||||
#line %%line "%%skeleton"
|
||||
%% actions /* The action file replaces this line. */
|
||||
#line
|
||||
|
||||
yyvsp -= yylen;
|
||||
yyssp -= yylen;
|
||||
@@ -811,7 +650,7 @@ yyerrlab:
|
||||
{
|
||||
++yynerrs;
|
||||
|
||||
#if YYERROR_VERBOSE
|
||||
#ifdef YYERROR_VERBOSE
|
||||
yyn = yypact[yystate];
|
||||
|
||||
if (yyn > YYFLAG && yyn < YYLAST)
|
||||
@@ -839,11 +678,11 @@ yyerrlab:
|
||||
{
|
||||
count = 0;
|
||||
for (x = (yyn < 0 ? -yyn : 0);
|
||||
x < (int) (sizeof (yytname) / sizeof (char *)); x++)
|
||||
x < (int) (sizeof (yytname) / sizeof (char *)); x++)
|
||||
if (yycheck[x + yyn] == x)
|
||||
{
|
||||
strcat (msg, count == 0 ? ", expecting `" : " or `");
|
||||
strcat (msg, yytname[x]);
|
||||
strcat (msg, count == 0 ? ", expecting `" : " or `");
|
||||
strcat (msg, yytname[x]);
|
||||
strcat (msg, "'");
|
||||
count++;
|
||||
}
|
||||
@@ -851,26 +690,26 @@ yyerrlab:
|
||||
yyerror (msg);
|
||||
free (msg);
|
||||
}
|
||||
else
|
||||
else
|
||||
yyerror ("parse error; also virtual memory exceeded");
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif /* YYERROR_VERBOSE */
|
||||
yyerror ("parse error");
|
||||
yyerror ("parse error");
|
||||
}
|
||||
goto yyerrlab1;
|
||||
|
||||
|
||||
/*----------------------------------------------------.
|
||||
| yyerrlab1 -- error raised explicitly by an action. |
|
||||
`----------------------------------------------------*/
|
||||
/*--------------------------------------------------.
|
||||
| yyerrlab1 -- error raised explicitly by an action |
|
||||
`--------------------------------------------------*/
|
||||
yyerrlab1:
|
||||
if (yyerrstatus == 3)
|
||||
{
|
||||
/* If just tried and failed to reuse lookahead token after an
|
||||
error, discard it. */
|
||||
|
||||
/* Return failure if at end of input. */
|
||||
/* return failure if at end of input */
|
||||
if (yychar == YYEOF)
|
||||
YYABORT;
|
||||
YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
|
||||
@@ -881,7 +720,7 @@ yyerrlab1:
|
||||
/* Else will try to reuse lookahead token after shifting the error
|
||||
token. */
|
||||
|
||||
yyerrstatus = 3; /* Each real token shifted decrements this. */
|
||||
yyerrstatus = 3; /* Each real token shifted decrements this */
|
||||
|
||||
goto yyerrhandle;
|
||||
|
||||
@@ -904,7 +743,7 @@ yyerrdefault:
|
||||
|
||||
/*---------------------------------------------------------------.
|
||||
| yyerrpop -- pop the current state because it cannot handle the |
|
||||
| error token. |
|
||||
| error token |
|
||||
`---------------------------------------------------------------*/
|
||||
yyerrpop:
|
||||
if (yyssp == yyss)
|
||||
@@ -992,6 +831,3 @@ yyabortlab:
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
#line %%input_line "%%filename"
|
||||
%%epilogue
|
||||
|
||||
+19
-45
@@ -94,7 +94,8 @@ stringappend (const char *string1, const char *string2)
|
||||
static char *
|
||||
compute_header_macro (void)
|
||||
{
|
||||
char *macro_name, *cp;
|
||||
int ite;
|
||||
char *macro_name;
|
||||
|
||||
if (spec_defines_file)
|
||||
macro_name = xstrdup (spec_defines_file);
|
||||
@@ -108,12 +109,14 @@ compute_header_macro (void)
|
||||
strcat (macro_name, header_extension);
|
||||
}
|
||||
|
||||
for (cp = macro_name; *cp; ++cp)
|
||||
if (islower (*cp))
|
||||
*cp = toupper (*cp);
|
||||
else if (!isalnum (*cp))
|
||||
*cp = '_';
|
||||
|
||||
for (ite = 0; macro_name[ite]; ite++)
|
||||
if (macro_name[ite] == '.')
|
||||
macro_name[ite] = '_';
|
||||
else
|
||||
{
|
||||
if (islower (macro_name[ite]))
|
||||
macro_name[ite] -= ('a' - 'A');
|
||||
}
|
||||
return macro_name;
|
||||
}
|
||||
|
||||
@@ -197,42 +200,17 @@ skeleton_find (const char *envvar, const char *skeleton_name)
|
||||
{
|
||||
const char *res = getenv (envvar);
|
||||
|
||||
#if defined (MSDOS) || defined (_WIN32)
|
||||
if (!res)
|
||||
{
|
||||
/* Skeleton file name without path */
|
||||
const char *skel_name = strrchr(skeleton_name, '/');
|
||||
if (!skel_name)
|
||||
skel_name = strrchr(skeleton_name, '\\');
|
||||
if (!skel_name)
|
||||
skel_name = skeleton_name;
|
||||
else
|
||||
++skel_name;
|
||||
#ifdef MSDOS
|
||||
const char *cp;
|
||||
|
||||
/* File doesn't exist in current directory; try in INIT directory. */
|
||||
const char *cp = getenv ("INIT");
|
||||
if (cp)
|
||||
{
|
||||
res = XMALLOC (char, strlen (cp) + strlen (skel_name) + 2);
|
||||
sprintf (res, "%s%c%s", cp, '\\', skel_name);
|
||||
}
|
||||
else if (access (skel_name, 4) == 0) /* Look in current dir. */
|
||||
res = skel_name;
|
||||
else
|
||||
{
|
||||
/* Look in program locations dir. */
|
||||
extern char *program_name;
|
||||
cp = strrchr(program_name, '\\');
|
||||
if (!cp)
|
||||
return skeleton_name;
|
||||
else
|
||||
++cp;
|
||||
res = XMALLOC (char, cp - program_name + strlen (skel_name) + 1);
|
||||
strncpy (res, program_name, cp - program_name);
|
||||
strcpy (res + (cp - program_name), skel_name);
|
||||
}
|
||||
/* File doesn't exist in current directory; try in INIT directory. */
|
||||
if (!res && (cp = getenv ("INIT")))
|
||||
{
|
||||
res = XMALLOC (char, strlen (cp) + strlen (skeleton_name) + 2);
|
||||
sprintf (res, "%s%c%s", cp, '/', skeleton_name);
|
||||
}
|
||||
#endif /* defined (MSDOS) || defined (_WIN32) */
|
||||
#endif /* !MSDOS */
|
||||
|
||||
if (!res)
|
||||
res = skeleton_name;
|
||||
|
||||
@@ -495,14 +473,10 @@ output_files (void)
|
||||
defines_obstack_save (spec_defines_file);
|
||||
obstack_free (&defines_obstack, NULL);
|
||||
|
||||
#if 0
|
||||
/* Seems to be invalid now --akim. */
|
||||
|
||||
/* If we output only the table, dump the actions in ACTFILE. */
|
||||
if (no_parser_flag)
|
||||
obstack_save (&action_obstack, stringappend (short_base_name, ".act"));
|
||||
obstack_free (&action_obstack, NULL);
|
||||
#endif
|
||||
|
||||
/* If we produced a semantic parser ATTRS_OBSTACK must be dumped
|
||||
into its own file, ATTTRSFILE. */
|
||||
|
||||
+32
-5
@@ -24,8 +24,6 @@
|
||||
#include "files.h"
|
||||
#include "complain.h"
|
||||
#include "getargs.h"
|
||||
#include "xalloc.h"
|
||||
#include "options.h"
|
||||
|
||||
int debug_flag = 0;
|
||||
int defines_flag = 0;
|
||||
@@ -41,6 +39,37 @@ int graph_flag = 0;
|
||||
const char *skeleton = NULL;
|
||||
|
||||
extern char *program_name;
|
||||
const char *shortopts = "yvgdhrltknVo:b:p:S:";
|
||||
static struct option longopts[] =
|
||||
{
|
||||
/* Operation modes. */
|
||||
{"help", no_argument, 0, 'h'},
|
||||
{"version", no_argument, 0, 'V'},
|
||||
{"yacc", no_argument, 0, 'y'},
|
||||
{"fixed-output-files",no_argument, 0, 'y'},
|
||||
|
||||
/* Parser. */
|
||||
{"skeleton", required_argument, 0, 'S'},
|
||||
{"debug", no_argument, 0, 'd'},
|
||||
{"locations", no_argument, &locations_flag, 1},
|
||||
/* was 'a'; apparently unused -wjh */
|
||||
{"name-prefix", required_argument, 0, 'p'},
|
||||
{"no-lines", no_argument, 0, 'l'},
|
||||
{"no-parser", no_argument, 0, 'n'},
|
||||
{"raw", no_argument, 0, 'r'},
|
||||
{"token-table", no_argument, 0, 'k'},
|
||||
|
||||
/* Output. */
|
||||
{"defines", optional_argument, 0, 'd'},
|
||||
{"verbose", no_argument, 0, 'v'},
|
||||
{"file-prefix", required_argument, 0, 'b'},
|
||||
{"output-file", required_argument, 0, 'o'},
|
||||
{"graph", optional_argument, 0, 'g'},
|
||||
|
||||
/* Hidden. */
|
||||
{"statistics", no_argument, &statistics_flag, 1},
|
||||
{0, 0, 0, 0}
|
||||
};
|
||||
|
||||
/*---------------------------.
|
||||
| Display the help message. |
|
||||
@@ -134,7 +163,6 @@ getargs (int argc, char *argv[])
|
||||
{
|
||||
int c;
|
||||
|
||||
create_long_option_table ();
|
||||
while ((c = getopt_long (argc, argv, shortopts, longopts, NULL)) != EOF)
|
||||
switch (c)
|
||||
{
|
||||
@@ -155,7 +183,7 @@ getargs (int argc, char *argv[])
|
||||
exit (0);
|
||||
|
||||
case 'g':
|
||||
/* Here, the -g and --graph=FILE options are differentiated. */
|
||||
/* Here, the -g and --graph=FILE options are differentiated. */
|
||||
graph_flag = 1;
|
||||
spec_graph_file = optarg;
|
||||
break;
|
||||
@@ -212,7 +240,6 @@ getargs (int argc, char *argv[])
|
||||
exit (1);
|
||||
}
|
||||
|
||||
XFREE (longopts);
|
||||
if (optind == argc)
|
||||
{
|
||||
fprintf (stderr, _("%s: no grammar file given\n"), program_name);
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
#include "files.h"
|
||||
#include "getopt.h" /* for optarg */
|
||||
#include "symtab.h"
|
||||
#include "options.h"
|
||||
#include "lex.h"
|
||||
#include "complain.h"
|
||||
#include "gram.h"
|
||||
@@ -322,7 +321,7 @@ literalchar (struct obstack *out, int *pcode, char term)
|
||||
|
||||
|
||||
void
|
||||
unlex (token_t token)
|
||||
unlex (int token)
|
||||
{
|
||||
unlexed = token;
|
||||
unlexed_symval = symval;
|
||||
@@ -470,40 +469,32 @@ lex (void)
|
||||
}
|
||||
|
||||
case ',':
|
||||
token_buffer = ",";
|
||||
return tok_comma;
|
||||
|
||||
case ':':
|
||||
token_buffer = ":";
|
||||
return tok_colon;
|
||||
|
||||
case ';':
|
||||
token_buffer = ";";
|
||||
return tok_semicolon;
|
||||
|
||||
case '|':
|
||||
token_buffer = "|";
|
||||
return tok_bar;
|
||||
|
||||
case '{':
|
||||
token_buffer = "{";
|
||||
return tok_left_curly;
|
||||
|
||||
case '=':
|
||||
obstack_1grow (&token_obstack, c);
|
||||
do
|
||||
{
|
||||
c = getc (finput);
|
||||
obstack_1grow (&token_obstack, c);
|
||||
if (c == '\n')
|
||||
lineno++;
|
||||
}
|
||||
while (c == ' ' || c == '\n' || c == '\t');
|
||||
obstack_1grow (&token_obstack, '\0');
|
||||
token_buffer = obstack_finish (&token_obstack);
|
||||
|
||||
if (c == '{')
|
||||
{
|
||||
token_buffer = "={";
|
||||
return tok_left_curly;
|
||||
}
|
||||
else
|
||||
@@ -520,31 +511,61 @@ lex (void)
|
||||
return parse_percent_token ();
|
||||
|
||||
default:
|
||||
obstack_1grow (&token_obstack, c);
|
||||
obstack_1grow (&token_obstack, '\0');
|
||||
token_buffer = obstack_finish (&token_obstack);
|
||||
return tok_illegal;
|
||||
}
|
||||
}
|
||||
|
||||
/* This function is a strcmp, which doesn't differentiate `-' and `_'
|
||||
chars. */
|
||||
|
||||
static int
|
||||
option_strcmp (const char *left, const char *right)
|
||||
/* the following table dictates the action taken for the various %
|
||||
directives. A set_flag value causes the named flag to be set. A
|
||||
retval action returns the code. */
|
||||
struct percent_table_struct
|
||||
{
|
||||
const unsigned char *l, *r;
|
||||
int c;
|
||||
const char *name;
|
||||
void *set_flag;
|
||||
token_t retval;
|
||||
};
|
||||
|
||||
assert (left);
|
||||
assert (right);
|
||||
l = (const unsigned char *)left;
|
||||
r = (const unsigned char *)right;
|
||||
while (((c = *l - *r++) == 0 && *l != '\0')
|
||||
|| ((*l == '-' || *l == '_') && (*r == '_' || *r == '-')))
|
||||
l++;
|
||||
return c;
|
||||
}
|
||||
struct percent_table_struct percent_table[] =
|
||||
{
|
||||
{ "token", NULL, tok_token },
|
||||
{ "term", NULL, tok_token },
|
||||
{ "nterm", NULL, tok_nterm },
|
||||
{ "type", NULL, tok_type },
|
||||
{ "guard", NULL, tok_guard },
|
||||
{ "union", NULL, tok_union },
|
||||
{ "expect", NULL, tok_expect },
|
||||
{ "thong", NULL, tok_thong },
|
||||
{ "start", NULL, tok_start },
|
||||
{ "left", NULL, tok_left },
|
||||
{ "right", NULL, tok_right },
|
||||
{ "nonassoc", NULL, tok_nonassoc },
|
||||
{ "binary", NULL, tok_nonassoc },
|
||||
{ "prec", NULL, tok_prec },
|
||||
{ "locations", &locations_flag, tok_noop }, /* -l */
|
||||
{ "no_lines", &no_lines_flag, tok_noop }, /* -l */
|
||||
{ "raw", NULL, tok_obsolete }, /* -r */
|
||||
{ "token_table", &token_table_flag, tok_noop }, /* -k */
|
||||
{ "yacc", &yacc_flag, tok_noop }, /* -y */
|
||||
{ "fixed_output_files",&yacc_flag, tok_noop }, /* -y */
|
||||
{ "defines", &defines_flag, tok_noop }, /* -d */
|
||||
{ "no_parser", &no_parser_flag, tok_noop }, /* -n */
|
||||
{ "graph", &graph_flag, tok_noop }, /* -g */
|
||||
#if 0
|
||||
/* For the time being, this is not enabled yet, while it's possible
|
||||
though, since we use obstacks. The only risk is with semantic
|
||||
parsers which will output an `include' of an output file: be sure
|
||||
that the name included is indeed the name of the output file. */
|
||||
{ "output_file", &spec_outfile, tok_setopt }, /* -o */
|
||||
{ "file_prefix", &spec_file_prefix, tok_setopt }, /* -b */
|
||||
{ "name_prefix", &spec_name_prefix, tok_setopt }, /* -p */
|
||||
#endif
|
||||
{ "verbose", &verbose_flag, tok_noop }, /* -v */
|
||||
{ "debug", &debug_flag, tok_noop }, /* -t */
|
||||
{ "semantic_parser", &semantic_parser, tok_noop },
|
||||
{ "pure_parser", &pure_parser, tok_noop },
|
||||
|
||||
{ NULL, NULL, tok_illegal}
|
||||
};
|
||||
|
||||
/* Parse a token which starts with %.
|
||||
Assumes the % has already been read and discarded. */
|
||||
@@ -552,7 +573,7 @@ option_strcmp (const char *left, const char *right)
|
||||
token_t
|
||||
parse_percent_token (void)
|
||||
{
|
||||
const struct option_table_struct *tx;
|
||||
struct percent_table_struct *tx;
|
||||
|
||||
int c = getc (finput);
|
||||
|
||||
@@ -586,8 +607,8 @@ parse_percent_token (void)
|
||||
obstack_1grow (&token_obstack, '%');
|
||||
while (isalpha (c) || c == '_' || c == '-')
|
||||
{
|
||||
if (c == '_')
|
||||
c = '-';
|
||||
if (c == '-')
|
||||
c = '_';
|
||||
obstack_1grow (&token_obstack, c);
|
||||
c = getc (finput);
|
||||
}
|
||||
@@ -597,9 +618,8 @@ parse_percent_token (void)
|
||||
token_buffer = obstack_finish (&token_obstack);
|
||||
|
||||
/* table lookup % directive */
|
||||
for (tx = option_table; tx->name; tx++)
|
||||
if ((tx->access == opt_percent || tx->access == opt_both)
|
||||
&& option_strcmp (token_buffer + 1, tx->name) == 0)
|
||||
for (tx = percent_table; tx->name; tx++)
|
||||
if (strcmp (token_buffer + 1, tx->name) == 0)
|
||||
break;
|
||||
|
||||
if (tx->set_flag)
|
||||
@@ -608,7 +628,7 @@ parse_percent_token (void)
|
||||
return tok_noop;
|
||||
}
|
||||
|
||||
switch (tx->ret_val)
|
||||
switch (tx->retval)
|
||||
{
|
||||
case tok_setopt:
|
||||
*((char **) (tx->set_flag)) = optarg;
|
||||
@@ -624,5 +644,5 @@ parse_percent_token (void)
|
||||
break;
|
||||
}
|
||||
|
||||
return tx->ret_val;
|
||||
return tx->retval;
|
||||
}
|
||||
|
||||
@@ -48,8 +48,6 @@ typedef enum token_e
|
||||
tok_number,
|
||||
tok_expect,
|
||||
tok_thong,
|
||||
tok_define,
|
||||
tok_skel,
|
||||
tok_noop,
|
||||
tok_setopt,
|
||||
tok_illegal,
|
||||
@@ -63,7 +61,7 @@ extern int numval;
|
||||
void lex_init PARAMS ((void));
|
||||
void lex_free PARAMS ((void));
|
||||
int skip_white_space PARAMS ((void));
|
||||
void unlex PARAMS ((token_t));
|
||||
void unlex PARAMS ((int));
|
||||
void read_type_name PARAMS ((FILE *fin));
|
||||
|
||||
/* Return one of the token-type codes. When an identifier is seen,
|
||||
|
||||
+2
-5
@@ -1,5 +1,5 @@
|
||||
/* Top level entry point of bison,
|
||||
Copyright 1984, 1986, 1989, 1992, 1995, 2000, 2001
|
||||
Copyright 1984, 1986, 1989, 1992, 1995, 2000
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of Bison, the GNU Compiler Compiler.
|
||||
@@ -34,9 +34,7 @@
|
||||
#include "LR0.h"
|
||||
#include "conflicts.h"
|
||||
#include "print_graph.h"
|
||||
#include "muscle_tab.h"
|
||||
#include "symtab.h"
|
||||
#include "lex.h"
|
||||
|
||||
/* The name this program was run with, for messages. */
|
||||
char *program_name;
|
||||
@@ -54,7 +52,6 @@ main (int argc, char *argv[])
|
||||
lineno = 0;
|
||||
getargs (argc, argv);
|
||||
|
||||
muscle_init ();
|
||||
open_files ();
|
||||
|
||||
/* Read the input. Copy some parts of it to FGUARD, FACTION, FTABLE
|
||||
@@ -96,7 +93,7 @@ main (int argc, char *argv[])
|
||||
/* Print information about results, if requested. */
|
||||
print_results ();
|
||||
|
||||
/* Output the VCG graph. */
|
||||
/* Output the VCG graph. */
|
||||
print_graph ();
|
||||
|
||||
/* Output the tables and the parser to ftable. In file output. */
|
||||
|
||||
@@ -1,126 +0,0 @@
|
||||
/* Macro table manager for Bison,
|
||||
Copyright 1984, 1989, 2000 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of Bison, the GNU Compiler Compiler.
|
||||
|
||||
Bison 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.
|
||||
|
||||
Bison 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 Bison; see the file COPYING. If not, write to
|
||||
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "xalloc.h"
|
||||
#include "system.h"
|
||||
#include "hash.h"
|
||||
#include "files.h"
|
||||
#include "muscle_tab.h"
|
||||
#include "getargs.h"
|
||||
|
||||
struct hash_table muscle_table;
|
||||
|
||||
static unsigned long
|
||||
mhash1 (const void *item)
|
||||
{
|
||||
return_STRING_HASH_1 (((muscle_entry_t *) item)->key);
|
||||
}
|
||||
|
||||
static unsigned long
|
||||
mhash2 (const void *item)
|
||||
{
|
||||
return_STRING_HASH_2 (((muscle_entry_t *) item)->key);
|
||||
}
|
||||
|
||||
static int
|
||||
mcmp (const void *x, const void *y)
|
||||
{
|
||||
return strcmp (((muscle_entry_t*) x)->key, ((muscle_entry_t *) y)->key);
|
||||
}
|
||||
|
||||
void
|
||||
muscle_init (void)
|
||||
{
|
||||
hash_init (&muscle_table, MTABSIZE, &mhash1, &mhash2, &mcmp);
|
||||
|
||||
/* Version and input file. */
|
||||
muscle_insert ("version", VERSION);
|
||||
muscle_insert ("filename", infile);
|
||||
|
||||
/* Skeleton use. */
|
||||
muscle_insert ("skeleton", skeleton);
|
||||
|
||||
/* Types. */
|
||||
muscle_insert ("stype", "int");
|
||||
muscle_insert ("ltype", "yyltype");
|
||||
|
||||
/* Tokens. */
|
||||
muscle_insert ("tokendef", "");
|
||||
|
||||
/* Tables. */
|
||||
muscle_insert ("rhs", "0");
|
||||
muscle_insert ("pact", "0");
|
||||
muscle_insert ("prhs", "0");
|
||||
muscle_insert ("stos", "0");
|
||||
muscle_insert ("check", "0");
|
||||
muscle_insert ("pgoto", "0");
|
||||
muscle_insert ("table", "0");
|
||||
muscle_insert ("tname", "0");
|
||||
muscle_insert ("defact", "0");
|
||||
muscle_insert ("toknum", "0");
|
||||
muscle_insert ("defgoto", "0");
|
||||
muscle_insert ("translate", "0");
|
||||
|
||||
/* Various macros. */
|
||||
muscle_insert ("flag", "0");
|
||||
muscle_insert ("last", "0");
|
||||
muscle_insert ("pure", "0");
|
||||
muscle_insert ("nsym", "0");
|
||||
muscle_insert ("debug", "0");
|
||||
muscle_insert ("final", "0");
|
||||
muscle_insert ("maxtok", "0");
|
||||
muscle_insert ("ntbase", "0");
|
||||
muscle_insert ("verbose", "0");
|
||||
muscle_insert ("prefix", "yy");
|
||||
/* Default #line formatting. */
|
||||
muscle_insert ("linef", "#line %d %s\n");
|
||||
|
||||
/* No parser macros. */
|
||||
muscle_insert ("nnts", "0");
|
||||
muscle_insert ("nrules", "0");
|
||||
muscle_insert ("nstates", "0");
|
||||
muscle_insert ("ntokens", "0");
|
||||
|
||||
/* Stack parameters. */
|
||||
muscle_insert ("maxdepth", "10000");
|
||||
muscle_insert ("initdepth", "200");
|
||||
|
||||
/* C++ macros. */
|
||||
muscle_insert ("name", "Parser");
|
||||
}
|
||||
|
||||
void
|
||||
muscle_insert (const char *key, const char *value)
|
||||
{
|
||||
muscle_entry_t *pair = XMALLOC (muscle_entry_t, 1);
|
||||
pair->key = key;
|
||||
pair->value = value;
|
||||
hash_insert (&muscle_table, pair);
|
||||
}
|
||||
|
||||
const char*
|
||||
muscle_find (const char *key)
|
||||
{
|
||||
muscle_entry_t pair = { key, 0 };
|
||||
muscle_entry_t *result = hash_find_item (&muscle_table, &pair);
|
||||
return result ? result->value : 0;
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
/* Definitions for macrotab.c and callers, part of bison,
|
||||
Copyright 2001 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of Bison, the GNU Compiler Compiler.
|
||||
|
||||
Bison 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.
|
||||
|
||||
Bison 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 Bison; see the file COPYING. If not, write to
|
||||
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef MUSCLE_TAB_H_
|
||||
# define MUSCLE_TAB_H
|
||||
|
||||
# define MTABSIZE 101
|
||||
|
||||
typedef struct muscle_entry_s
|
||||
{
|
||||
const char *key;
|
||||
const char *value;
|
||||
} muscle_entry_t;
|
||||
|
||||
void muscle_init PARAMS ((void));
|
||||
void muscle_insert PARAMS ((const char *key, const char *value));
|
||||
const char *muscle_find PARAMS ((const char *key));
|
||||
|
||||
#endif /* not MUSCLE_TAB_H_ */
|
||||
-152
@@ -1,152 +0,0 @@
|
||||
/* Concentrate all options use in bison,
|
||||
Copyright 2001 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of Bison, the GNU Compiler Compiler.
|
||||
|
||||
Bison 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.
|
||||
|
||||
Bison 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 Bison; see the file COPYING. If not, write to
|
||||
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include <stdio.h>
|
||||
#include "xalloc.h"
|
||||
#include "system.h"
|
||||
#include "getopt.h"
|
||||
#include "getargs.h"
|
||||
#include "gram.h"
|
||||
#include "symtab.h"
|
||||
#include "lex.h"
|
||||
#include "options.h"
|
||||
|
||||
/* Shorts options. */
|
||||
const char *shortopts = "yvgdhrltknVo:b:p:S:";
|
||||
|
||||
/* Long options. */
|
||||
struct option *longopts = NULL;
|
||||
|
||||
struct percent_table_struct *percent_table = NULL;
|
||||
|
||||
const struct option_table_struct option_table[] =
|
||||
{
|
||||
/*
|
||||
* Command line.
|
||||
*/
|
||||
|
||||
/* Operation modes. */
|
||||
{opt_cmd_line, "help", no_argument, 0, 0, 'h'},
|
||||
{opt_cmd_line, "version", no_argument, 0, 0, 'V'},
|
||||
|
||||
/* Parser. */
|
||||
/* was 'a'; apparently unused -wjh */
|
||||
{opt_cmd_line, "name-prefix", required_argument, 0, 0, 'p'},
|
||||
|
||||
/* Output. */
|
||||
{opt_cmd_line, "file-prefix", required_argument, 0, 0, 'b'},
|
||||
{opt_cmd_line, "output-file", required_argument, 0, 0, 'o'},
|
||||
{opt_cmd_line, "graph", optional_argument, 0, 0, 'g'},
|
||||
|
||||
/* Hidden. */
|
||||
{opt_cmd_line, "statistics", no_argument, &statistics_flag, 0, 1},
|
||||
|
||||
/*
|
||||
* Percent declarations.
|
||||
*/
|
||||
|
||||
{opt_percent, "token", 0, NULL, tok_token, 0},
|
||||
{opt_percent, "term", 0, NULL, tok_token, 0},
|
||||
{opt_percent, "nterm", 0, NULL, tok_nterm, 0},
|
||||
{opt_percent, "type", 0, NULL, tok_type, 0},
|
||||
{opt_percent, "guard", 0, NULL, tok_guard, 0},
|
||||
{opt_percent, "union", 0, NULL, tok_union, 0},
|
||||
{opt_percent, "expect", 0, NULL, tok_expect, 0},
|
||||
{opt_percent, "thong", 0, NULL, tok_thong, 0},
|
||||
{opt_percent, "start", 0, NULL, tok_start, 0},
|
||||
{opt_percent, "left", 0, NULL, tok_left, 0},
|
||||
{opt_percent, "right", 0, NULL, tok_right, 0},
|
||||
{opt_percent, "nonassoc", 0, NULL, tok_nonassoc, 0},
|
||||
{opt_percent, "binary", 0, NULL, tok_nonassoc, 0},
|
||||
{opt_percent, "prec", 0, NULL, tok_prec, 0},
|
||||
#if 0
|
||||
/* For the time being, this is not enabled yet, while it's possible
|
||||
though, since we use obstacks. The only risk is with semantic
|
||||
parsers which will output an `include' of an output file: be sure
|
||||
that the naem included is indeed the name of the output file. */
|
||||
/* FIXME Should we activate this options ? */
|
||||
{opt_both, "output-file", required_argument, &spec_outfile, tok_setopt, 'o'},
|
||||
{opt_both, "file-prefix", required_argument,&spec_file_prefix,tok_setopt,'b'},
|
||||
{opt_both, "name-prefix", required_argument,&spec_name_prefix,tok_setopt,'p'},
|
||||
#endif
|
||||
{opt_percent, "define", 0, NULL, tok_define, 0},
|
||||
{opt_percent, "semantic-parser", 0, &semantic_parser, tok_noop, 0},
|
||||
{opt_percent, "pure-parser", 0, &pure_parser, tok_noop, 0},
|
||||
|
||||
/*
|
||||
* Percent and command line declarations.
|
||||
*/
|
||||
|
||||
/* FIXME Usually option use `-' to separe words on command line
|
||||
and `_' for percent option. But here the separator are always
|
||||
the same, the char `-'. */
|
||||
|
||||
/* Output. */
|
||||
{opt_both, "defines", optional_argument, &defines_flag, tok_noop, 'd'},
|
||||
{opt_both, "verbose", no_argument, &verbose_flag, tok_noop, 'v'},
|
||||
|
||||
/* Operation modes. */
|
||||
{opt_both, "fixed-output-files", no_argument, &yacc_flag, tok_noop, 'y'},
|
||||
{opt_both, "yacc", no_argument, &yacc_flag, tok_noop, 'y'},
|
||||
|
||||
/* Parser. */
|
||||
{opt_both, "debug", no_argument, &debug_flag, tok_noop, 't'},
|
||||
{opt_both, "locations", no_argument, &locations_flag, tok_noop, 1},
|
||||
{opt_both, "no-lines", no_argument, &no_lines_flag, tok_noop, 'l'},
|
||||
{opt_both, "no-parser", no_argument, &no_parser_flag, tok_noop, 'n'},
|
||||
{opt_both, "raw", no_argument, 0, tok_obsolete, 'r'},
|
||||
{opt_both, "skeleton", required_argument, 0, tok_skel, 'S'},
|
||||
{opt_both, "token-table", no_argument, &token_table_flag, tok_noop, 'k'},
|
||||
|
||||
{0, 0, 0, 0, 0, 0}
|
||||
};
|
||||
|
||||
/*--------------------------------------------------------.
|
||||
| Create the longoptions structure from the option_table, |
|
||||
| for the getopt file. |
|
||||
`--------------------------------------------------------*/
|
||||
void
|
||||
create_long_option_table ()
|
||||
{
|
||||
int i = 0;
|
||||
int j = 0;
|
||||
int number_options;
|
||||
|
||||
for (number_options = 0; option_table[i].name; i++)
|
||||
if (option_table[i].access == opt_cmd_line
|
||||
|| option_table[i].access == opt_both)
|
||||
++number_options;
|
||||
|
||||
longopts = XMALLOC (struct option, number_options + 1);
|
||||
for (i = 0; option_table[i].name; i++)
|
||||
if (option_table[i].access == opt_cmd_line
|
||||
|| option_table[i].access == opt_both)
|
||||
{
|
||||
/* Copy the struct information in the longoptions. */
|
||||
longopts[j].name = option_table[i].name;
|
||||
longopts[j].has_arg = option_table[i].has_arg;
|
||||
longopts[j].flag = option_table[i].set_flag;
|
||||
longopts[j++].val = option_table[i].val;
|
||||
}
|
||||
longopts[number_options].name = NULL;
|
||||
longopts[number_options].has_arg = 0;
|
||||
longopts[number_options].flag = NULL;
|
||||
longopts[number_options].val = 0;
|
||||
}
|
||||
@@ -1,62 +0,0 @@
|
||||
/* Concentrate all options use in bison,
|
||||
Copyright 2001 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of Bison, the GNU Compiler Compiler.
|
||||
|
||||
Bison 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.
|
||||
|
||||
Bison 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 Bison; see the file COPYING. If not, write to
|
||||
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef OPTIONS_H_
|
||||
# define OPTIONS_H_
|
||||
|
||||
/* opt_access_t and struct option_table_struct need to be declare
|
||||
here, for the parse_percent_token function in lex.c. */
|
||||
|
||||
/* Option accessibility. */
|
||||
typedef enum opt_access_e
|
||||
{
|
||||
opt_cmd_line = 1,
|
||||
opt_percent,
|
||||
opt_both
|
||||
} opt_access_t;
|
||||
|
||||
/* This is the general struct, which contains user's options from
|
||||
command line or in grammar with percent flag. */
|
||||
struct option_table_struct
|
||||
{
|
||||
/* Set the accessibility. */
|
||||
opt_access_t access;
|
||||
/* This name is used for long option et percent directives. */
|
||||
const char *name;
|
||||
/* Use for command line. */
|
||||
int has_arg;
|
||||
/* A set_flag value causes the named flag to be set. */
|
||||
int *set_flag;
|
||||
/* A retval action returns the code. */
|
||||
int ret_val;
|
||||
/* The short option value, frequently a letter. */
|
||||
int val;
|
||||
};
|
||||
|
||||
extern const char *shortopts;
|
||||
extern struct option *longopts;
|
||||
|
||||
/* Table which contain all options. */
|
||||
extern const struct option_table_struct option_table[];
|
||||
|
||||
/* Set the longopts variable from option_table. */
|
||||
void create_long_option_table PARAMS (());
|
||||
|
||||
#endif /* !OPTIONS_H_ */
|
||||
+432
-207
@@ -102,10 +102,11 @@
|
||||
#include "lalr.h"
|
||||
#include "reader.h"
|
||||
#include "conflicts.h"
|
||||
#include "muscle_tab.h"
|
||||
|
||||
extern void berror PARAMS((const char *));
|
||||
|
||||
|
||||
|
||||
static int nvectors;
|
||||
static int nentries;
|
||||
static short **froms = NULL;
|
||||
@@ -122,44 +123,189 @@ static short *check = NULL;
|
||||
static int lowzero;
|
||||
static int high;
|
||||
|
||||
struct obstack muscle_obstack;
|
||||
struct obstack output_obstack;
|
||||
|
||||
/* FIXME. */
|
||||
|
||||
static inline void
|
||||
output_table_data (struct obstack *oout,
|
||||
short *table_data,
|
||||
short first,
|
||||
short begin,
|
||||
short end)
|
||||
output_short_or_char_table (struct obstack *oout,
|
||||
const char *comment,
|
||||
const char *type,
|
||||
const char *table_name,
|
||||
short *short_table,
|
||||
short first_value,
|
||||
short begin, short end)
|
||||
{
|
||||
int i;
|
||||
int j = 1;
|
||||
int i, j;
|
||||
|
||||
obstack_fgrow1 (oout, "%6d", first);
|
||||
for (i = begin; i < end; ++i)
|
||||
if (comment)
|
||||
obstack_fgrow1 (oout, "/* %s. */\n", comment);
|
||||
|
||||
obstack_fgrow3 (oout, "static const %s %s[] =\n{\n %6d",
|
||||
type, table_name, first_value);
|
||||
|
||||
j = 1;
|
||||
for (i = begin; i < end; i++)
|
||||
{
|
||||
obstack_1grow (oout, ',');
|
||||
|
||||
if (j >= 10)
|
||||
{
|
||||
obstack_sgrow (oout, "\n ");
|
||||
j = 1;
|
||||
}
|
||||
else
|
||||
++j;
|
||||
obstack_fgrow1 (oout, "%6d", table_data[i]);
|
||||
{
|
||||
j++;
|
||||
}
|
||||
|
||||
obstack_fgrow1 (oout, "%6d", short_table[i]);
|
||||
}
|
||||
obstack_1grow (oout, 0);
|
||||
|
||||
obstack_sgrow (oout, "\n};\n");
|
||||
}
|
||||
|
||||
|
||||
static inline void
|
||||
output_short_table (struct obstack *oout,
|
||||
const char *comment,
|
||||
const char *table_name,
|
||||
short *short_table,
|
||||
short first_value,
|
||||
short begin, short end)
|
||||
{
|
||||
output_short_or_char_table (oout, comment, "short", table_name, short_table,
|
||||
first_value, begin, end);
|
||||
}
|
||||
|
||||
|
||||
/*--------------------------------------------------------------.
|
||||
| output_headers -- Output constant strings to the beginning of |
|
||||
| certain files. |
|
||||
`--------------------------------------------------------------*/
|
||||
|
||||
/* Don't put the `%s' insides quotes, since it quotearg puts them. */
|
||||
|
||||
#define GUARDSTR \
|
||||
"\n\
|
||||
#include %s\n\
|
||||
extern int yyerror;\n\
|
||||
extern int yycost;\n\
|
||||
extern char * yymsg;\n\
|
||||
extern YYSTYPE yyval;\n\
|
||||
\n\
|
||||
yyguard(n, yyvsp, yylsp)\n\
|
||||
register int n;\n\
|
||||
register YYSTYPE *yyvsp;\n\
|
||||
register YYLTYPE *yylsp;\n\
|
||||
{\n\
|
||||
yyerror = 0;\n\
|
||||
yycost = 0;\n\
|
||||
yymsg = 0;\n\
|
||||
switch (n)\n\
|
||||
{"
|
||||
|
||||
#define ACTSTR \
|
||||
"\n\
|
||||
#include %s\n\
|
||||
extern YYSTYPE yyval;\n\
|
||||
extern int yychar;\n\
|
||||
\n\
|
||||
yyaction(n, yyvsp, yylsp)\n\
|
||||
register int n;\n\
|
||||
register YYSTYPE *yyvsp;\n\
|
||||
register YYLTYPE *yylsp;\n\
|
||||
{\n\
|
||||
switch (n)\n\
|
||||
{"
|
||||
|
||||
#define ACTSTR_SIMPLE "\n switch (yyn) {\n"
|
||||
|
||||
void
|
||||
output_headers (void)
|
||||
{
|
||||
char *attrsfile_quoted = 0;
|
||||
|
||||
if (semantic_parser)
|
||||
{
|
||||
/* FIXME: This is *buggy*. ATTRSFILE is not computed yet, since
|
||||
we are waiting for the full input file to have been read to
|
||||
be sure of the output file name. So basically, here, a SEGV
|
||||
is guaranteed. OTOH, currently semantic parsers are not
|
||||
supported. */
|
||||
attrsfile_quoted = quotearg_style (c_quoting_style, attrsfile);
|
||||
obstack_fgrow1 (&guard_obstack, GUARDSTR, attrsfile_quoted);
|
||||
}
|
||||
|
||||
if (no_parser_flag)
|
||||
return;
|
||||
|
||||
if (semantic_parser)
|
||||
obstack_fgrow1 (&action_obstack, ACTSTR, attrsfile_quoted);
|
||||
else
|
||||
obstack_sgrow (&action_obstack, ACTSTR_SIMPLE);
|
||||
|
||||
/* Rename certain symbols if -p was specified. */
|
||||
if (spec_name_prefix)
|
||||
{
|
||||
obstack_fgrow1 (&table_obstack,
|
||||
"#define yyparse %sparse\n", spec_name_prefix);
|
||||
obstack_fgrow1 (&table_obstack,
|
||||
"#define yylex %slex\n", spec_name_prefix);
|
||||
obstack_fgrow1 (&table_obstack,
|
||||
"#define yyerror %serror\n", spec_name_prefix);
|
||||
obstack_fgrow1 (&table_obstack,
|
||||
"#define yylval %slval\n", spec_name_prefix);
|
||||
obstack_fgrow1 (&table_obstack,
|
||||
"#define yychar %schar\n", spec_name_prefix);
|
||||
obstack_fgrow1 (&table_obstack,
|
||||
"#define yydebug %sdebug\n", spec_name_prefix);
|
||||
obstack_fgrow1 (&table_obstack,
|
||||
"#define yynerrs %snerrs\n", spec_name_prefix);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------------.
|
||||
| Output constant strings to the ends of certain files. |
|
||||
`-------------------------------------------------------*/
|
||||
|
||||
void
|
||||
output_trailers (void)
|
||||
{
|
||||
if (semantic_parser)
|
||||
obstack_sgrow (&guard_obstack, "\n }\n}\n");
|
||||
|
||||
obstack_1grow (&action_obstack, '\n');
|
||||
|
||||
if (no_parser_flag)
|
||||
return;
|
||||
|
||||
if (semantic_parser)
|
||||
obstack_sgrow (&action_obstack, " }\n");
|
||||
|
||||
obstack_sgrow (&action_obstack, "}\n");
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void
|
||||
output_token_translations (void)
|
||||
{
|
||||
output_table_data (&output_obstack, token_translations,
|
||||
0, 1, max_user_token_number + 1);
|
||||
muscle_insert ("translate", obstack_finish (&output_obstack));
|
||||
obstack_sgrow (&table_obstack, "\
|
||||
\n\
|
||||
/* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */\n");
|
||||
|
||||
obstack_fgrow2 (&table_obstack,
|
||||
"#define YYTRANSLATE(x) ((unsigned)(x) <= %d ? yytranslate[x] : %d)\
|
||||
\n\
|
||||
\n",
|
||||
max_user_token_number, nsyms);
|
||||
|
||||
output_short_or_char_table (&table_obstack,
|
||||
"YYTRANSLATE[YYLEX] -- Bison token number corresponding to YYLEX",
|
||||
ntokens < 127 ? "char" : "short",
|
||||
"yytranslate", token_translations,
|
||||
0, 1, max_user_token_number + 1);
|
||||
|
||||
XFREE (token_translations);
|
||||
}
|
||||
|
||||
@@ -167,9 +313,14 @@ output_token_translations (void)
|
||||
static void
|
||||
output_gram (void)
|
||||
{
|
||||
output_table_data (&output_obstack, rrhs,
|
||||
0, 1, nrules + 1);
|
||||
muscle_insert ("prhs", obstack_finish (&output_obstack));
|
||||
/* With the ordinary parser,
|
||||
yyprhs and yyrhs are needed only for yydebug. */
|
||||
/* With the no_parser option, all tables are generated */
|
||||
if (!semantic_parser && !no_parser_flag)
|
||||
obstack_sgrow (&table_obstack, "\n#if YYDEBUG != 0\n");
|
||||
|
||||
output_short_table (&table_obstack, NULL, "yyprhs", rrhs,
|
||||
0, 1, nrules + 1);
|
||||
|
||||
{
|
||||
size_t yyrhs_size = 1;
|
||||
@@ -183,26 +334,21 @@ output_gram (void)
|
||||
for (sp = ritem + 1, i = 1; *sp; ++sp, ++i)
|
||||
yyrhs[i] = *sp > 0 ? *sp : 0;
|
||||
|
||||
output_table_data (&output_obstack, yyrhs,
|
||||
ritem[0], 1, yyrhs_size);
|
||||
muscle_insert ("rhs", obstack_finish (&output_obstack));
|
||||
|
||||
output_short_table (&table_obstack, NULL, "yyrhs", yyrhs,
|
||||
ritem[0], 1, yyrhs_size);
|
||||
XFREE (yyrhs);
|
||||
}
|
||||
|
||||
#if 0
|
||||
if (!semantic_parser && !no_parser_flag)
|
||||
obstack_sgrow (&table_obstack, "\n#endif\n");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
output_stos (void)
|
||||
{
|
||||
output_table_data (&output_obstack, accessing_symbol,
|
||||
0, 1, nstates);
|
||||
muscle_insert ("stos", obstack_finish (&output_obstack));
|
||||
output_short_table (&table_obstack, NULL, "yystos", accessing_symbol,
|
||||
0, 1, nstates);
|
||||
}
|
||||
|
||||
|
||||
@@ -213,9 +359,34 @@ output_rule_data (void)
|
||||
int j;
|
||||
short *short_tab = NULL;
|
||||
|
||||
output_table_data (&output_obstack, rline,
|
||||
0, 1, nrules + 1);
|
||||
muscle_insert ("rline", obstack_finish (&output_obstack));
|
||||
obstack_sgrow (&table_obstack, "\n\
|
||||
#if YYDEBUG != 0\n");
|
||||
|
||||
output_short_table (&table_obstack,
|
||||
"YYRLINE[YYN] -- source line where rule number YYN was defined",
|
||||
"yyrline", rline,
|
||||
0, 1, nrules + 1);
|
||||
|
||||
obstack_sgrow (&table_obstack, "#endif\n\n");
|
||||
|
||||
if (token_table_flag || no_parser_flag)
|
||||
{
|
||||
obstack_fgrow1 (&table_obstack, "#define YYNTOKENS %d\n", ntokens);
|
||||
obstack_fgrow1 (&table_obstack, "#define YYNNTS %d\n", nvars);
|
||||
obstack_fgrow1 (&table_obstack, "#define YYNRULES %d\n", nrules);
|
||||
obstack_fgrow1 (&table_obstack, "#define YYNSTATES %d\n", nstates);
|
||||
obstack_fgrow1 (&table_obstack, "#define YYMAXUTOK %d\n\n",
|
||||
max_user_token_number);
|
||||
}
|
||||
|
||||
/* Output the table of symbol names. */
|
||||
if (!token_table_flag && !no_parser_flag)
|
||||
obstack_sgrow (&table_obstack,
|
||||
"\n#if YYDEBUG != 0 || defined YYERROR_VERBOSE\n\n");
|
||||
obstack_sgrow (&table_obstack, "\
|
||||
/* YYTNAME[TOKEN_NUM] -- String name of the token TOKEN_NUM. */\n");
|
||||
obstack_sgrow (&table_obstack,
|
||||
"static const char *const yytname[] =\n{\n ");
|
||||
|
||||
j = 0;
|
||||
for (i = 0; i < nsyms; i++)
|
||||
@@ -238,61 +409,80 @@ output_rule_data (void)
|
||||
|
||||
if (j + strsize > 75)
|
||||
{
|
||||
obstack_sgrow (&output_obstack, "\n ");
|
||||
obstack_sgrow (&table_obstack, "\n ");
|
||||
j = 2;
|
||||
}
|
||||
|
||||
obstack_1grow (&output_obstack, '\"');
|
||||
obstack_1grow (&table_obstack, '\"');
|
||||
for (p = tags[i]; p && *p; p++)
|
||||
{
|
||||
if (*p == '"' || *p == '\\')
|
||||
obstack_fgrow1 (&output_obstack, "\\%c", *p);
|
||||
obstack_fgrow1 (&table_obstack, "\\%c", *p);
|
||||
else if (*p == '\n')
|
||||
obstack_sgrow (&output_obstack, "\\n");
|
||||
obstack_sgrow (&table_obstack, "\\n");
|
||||
else if (*p == '\t')
|
||||
obstack_sgrow (&output_obstack, "\\t");
|
||||
obstack_sgrow (&table_obstack, "\\t");
|
||||
else if (*p == '\b')
|
||||
obstack_sgrow (&output_obstack, "\\b");
|
||||
obstack_sgrow (&table_obstack, "\\b");
|
||||
else if (*p < 040 || *p >= 0177)
|
||||
obstack_fgrow1 (&output_obstack, "\\%03o", *p);
|
||||
obstack_fgrow1 (&table_obstack, "\\%03o", *p);
|
||||
else
|
||||
obstack_1grow (&output_obstack, *p);
|
||||
obstack_1grow (&table_obstack, *p);
|
||||
}
|
||||
|
||||
obstack_sgrow (&output_obstack, "\", ");
|
||||
obstack_sgrow (&table_obstack, "\", ");
|
||||
j += strsize;
|
||||
}
|
||||
/* add a NULL entry to list of tokens */
|
||||
obstack_sgrow (&output_obstack, "NULL");
|
||||
obstack_sgrow (&table_obstack, "NULL\n};\n");
|
||||
|
||||
/* Finish table and store. */
|
||||
obstack_1grow (&output_obstack, 0);
|
||||
muscle_insert ("tname", obstack_finish (&output_obstack));
|
||||
if (!token_table_flag && !no_parser_flag)
|
||||
obstack_sgrow (&table_obstack, "#endif\n\n");
|
||||
|
||||
/* Output YYTOKNUM. */
|
||||
output_table_data (&output_obstack, user_toknums,
|
||||
0, 1, ntokens + 1);
|
||||
muscle_insert ("toknum", obstack_finish (&output_obstack));
|
||||
if (token_table_flag)
|
||||
{
|
||||
output_short_table (&table_obstack,
|
||||
"YYTOKNUM[YYLEX] -- Index in YYTNAME corresponding to YYLEX",
|
||||
"yytoknum", user_toknums,
|
||||
0, 1, ntokens + 1);
|
||||
}
|
||||
|
||||
/* Output YYR1. */
|
||||
output_table_data (&output_obstack, rlhs,
|
||||
0, 1, nrules + 1);
|
||||
muscle_insert ("r1", obstack_finish (&output_obstack));
|
||||
output_short_table (&table_obstack,
|
||||
"YYR1[YYN] -- Symbol number of symbol that rule YYN derives",
|
||||
"yyr1", rlhs,
|
||||
0, 1, nrules + 1);
|
||||
XFREE (rlhs + 1);
|
||||
|
||||
obstack_1grow (&table_obstack, '\n');
|
||||
|
||||
/* Output YYR2. */
|
||||
short_tab = XMALLOC (short, nrules + 1);
|
||||
for (i = 1; i < nrules; i++)
|
||||
short_tab[i] = rrhs[i + 1] - rrhs[i] - 1;
|
||||
short_tab[nrules] = nitems - rrhs[nrules] - 1;
|
||||
output_table_data (&output_obstack, short_tab,
|
||||
0, 1, nrules + 1);
|
||||
muscle_insert ("r2", obstack_finish (&output_obstack));
|
||||
output_short_table (&table_obstack,
|
||||
"YYR2[YYN] -- Number of symbols composing right hand side of rule YYN",
|
||||
"yyr2", short_tab,
|
||||
0, 1, nrules + 1);
|
||||
obstack_1grow (&table_obstack, '\n');
|
||||
|
||||
XFREE (short_tab);
|
||||
|
||||
XFREE (rrhs + 1);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
output_defines (void)
|
||||
{
|
||||
obstack_fgrow1 (&table_obstack, "\n\n#define\tYYFINAL\t\t%d\n", final_state);
|
||||
obstack_fgrow1 (&table_obstack, "#define\tYYFLAG\t\t%d\n", MINSHORT);
|
||||
obstack_fgrow1 (&table_obstack, "#define\tYYNTBASE\t%d\n", ntokens);
|
||||
}
|
||||
|
||||
|
||||
/*------------------------------------------------------------------.
|
||||
| Decide what to do for each type of token if seen as the lookahead |
|
||||
| token in specified state. The value returned is used as the |
|
||||
@@ -533,12 +723,15 @@ token_actions (void)
|
||||
yydefact[i] = action_row (i);
|
||||
save_row (i);
|
||||
}
|
||||
|
||||
output_table_data (&output_obstack, yydefact,
|
||||
yydefact[0], 1, nstates);
|
||||
muscle_insert ("defact", obstack_finish (&output_obstack));
|
||||
|
||||
XFREE (actrow);
|
||||
|
||||
output_short_table (&table_obstack,
|
||||
"YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE\n\
|
||||
doesn't specify something else to do. Zero means the default is an\n\
|
||||
error",
|
||||
"yydefact", yydefact,
|
||||
yydefact[0], 1, nstates);
|
||||
obstack_1grow (&table_obstack, '\n');
|
||||
XFREE (yydefact);
|
||||
}
|
||||
|
||||
@@ -665,9 +858,10 @@ static void
|
||||
goto_actions (void)
|
||||
{
|
||||
int i;
|
||||
short *yydefgoto = XMALLOC (short, nsyms - ntokens);
|
||||
|
||||
short *yydefgoto = XMALLOC (short, nsyms - ntokens);
|
||||
state_count = XCALLOC (short, nstates);
|
||||
|
||||
for (i = ntokens; i < nsyms; ++i)
|
||||
{
|
||||
int default_state = default_goto (i);
|
||||
@@ -675,9 +869,8 @@ goto_actions (void)
|
||||
yydefgoto[i - ntokens] = default_state;
|
||||
}
|
||||
|
||||
output_table_data (&output_obstack, yydefgoto,
|
||||
yydefgoto[0], 1, nsyms - ntokens);
|
||||
muscle_insert ("defgoto", obstack_finish (&output_obstack));
|
||||
output_short_table (&table_obstack, NULL, "yydefgoto", yydefgoto,
|
||||
yydefgoto[0], 1, nsyms - ntokens);
|
||||
|
||||
XFREE (state_count);
|
||||
XFREE (yydefgoto);
|
||||
@@ -879,15 +1072,13 @@ pack_table (void)
|
||||
static void
|
||||
output_base (void)
|
||||
{
|
||||
/* Output pact. */
|
||||
output_table_data (&output_obstack, base,
|
||||
base[0], 1, nstates);
|
||||
muscle_insert ("pact", obstack_finish (&output_obstack));
|
||||
output_short_table (&table_obstack, NULL, "yypact", base,
|
||||
base[0], 1, nstates);
|
||||
|
||||
/* Output pgoto. */
|
||||
output_table_data (&output_obstack, base,
|
||||
base[nstates], nstates + 1, nvectors);
|
||||
muscle_insert ("pgoto", obstack_finish (&output_obstack));
|
||||
obstack_1grow (&table_obstack, '\n');
|
||||
|
||||
output_short_table (&table_obstack, NULL, "yypgoto", base,
|
||||
base[nstates], nstates + 1, nvectors);
|
||||
|
||||
XFREE (base);
|
||||
}
|
||||
@@ -896,9 +1087,9 @@ output_base (void)
|
||||
static void
|
||||
output_table (void)
|
||||
{
|
||||
output_table_data (&output_obstack, table,
|
||||
table[0], 1, high + 1);
|
||||
muscle_insert ("table", obstack_finish (&output_obstack));
|
||||
obstack_fgrow1 (&table_obstack, "\n\n#define\tYYLAST\t\t%d\n\n\n", high);
|
||||
output_short_table (&table_obstack, NULL, "yytable", table,
|
||||
table[0], 1, high + 1);
|
||||
XFREE (table);
|
||||
}
|
||||
|
||||
@@ -906,9 +1097,8 @@ output_table (void)
|
||||
static void
|
||||
output_check (void)
|
||||
{
|
||||
output_table_data (&output_obstack, check,
|
||||
check[0], 1, high + 1);
|
||||
muscle_insert ("check", obstack_finish (&output_obstack));
|
||||
output_short_table (&table_obstack, NULL, "yycheck", check,
|
||||
check[0], 1, high + 1);
|
||||
XFREE (check);
|
||||
}
|
||||
|
||||
@@ -940,81 +1130,29 @@ output_actions (void)
|
||||
|
||||
sort_actions ();
|
||||
pack_table ();
|
||||
|
||||
obstack_1grow (&table_obstack, '\n');
|
||||
output_base ();
|
||||
output_table ();
|
||||
|
||||
obstack_1grow (&table_obstack, '\n');
|
||||
output_check ();
|
||||
}
|
||||
|
||||
|
||||
/*------------------------------------------------------------.
|
||||
| Copy the parser code from SKEL_FILENAME into OOUT obstack. |
|
||||
| and do the muscle substitution. |
|
||||
`------------------------------------------------------------*/
|
||||
/*------------------------------------------.
|
||||
| Copy the parser code into TABLE_OBSTACK. |
|
||||
`------------------------------------------*/
|
||||
|
||||
static void
|
||||
output_parser (const char *skel_filename, struct obstack *oout)
|
||||
output_parser (void)
|
||||
{
|
||||
int c;
|
||||
FILE *fskel;
|
||||
size_t line;
|
||||
int actions_dumped = 0;
|
||||
|
||||
fskel = xfopen (skel_filename, "r");
|
||||
if (pure_parser)
|
||||
obstack_sgrow (&table_obstack, "#define YYPURE 1\n\n");
|
||||
|
||||
/* New output code. */
|
||||
line = 1;
|
||||
c = getc (fskel);
|
||||
while (c != EOF)
|
||||
{
|
||||
if (c != '%')
|
||||
{
|
||||
if (c == '\n')
|
||||
++line;
|
||||
obstack_1grow (oout, c);
|
||||
c = getc (fskel);
|
||||
}
|
||||
else if ((c = getc (fskel)) == '%')
|
||||
{
|
||||
/* Read the muscle. */
|
||||
const char *muscle_key = 0;
|
||||
const char *muscle_value = 0;
|
||||
|
||||
while (isalnum (c = getc (fskel)) || c == '_')
|
||||
obstack_1grow (&muscle_obstack, c);
|
||||
obstack_1grow (&muscle_obstack, 0);
|
||||
|
||||
/* Output the right value, or see if it's something special. */
|
||||
muscle_key = obstack_finish (&muscle_obstack);
|
||||
muscle_value = muscle_find (muscle_key);
|
||||
if (muscle_value)
|
||||
obstack_sgrow (oout, muscle_value);
|
||||
else if (!strcmp (muscle_key, "line"))
|
||||
obstack_fgrow1 (oout, "%d", line + 1);
|
||||
else if (!strcmp (muscle_key, "input_line"))
|
||||
obstack_fgrow1 (oout, "%d", lineno);
|
||||
/* FIXME: Insert the code to recognize %%sub-skeleton for exemple. */
|
||||
else
|
||||
{
|
||||
obstack_sgrow (oout, "%%");
|
||||
obstack_sgrow (oout, muscle_key);
|
||||
}
|
||||
}
|
||||
else
|
||||
obstack_1grow (oout, '%');
|
||||
}
|
||||
|
||||
/* End. */
|
||||
xfclose (fskel);
|
||||
}
|
||||
|
||||
/*----------------------------------------.
|
||||
| Prepare the master parser to be output |
|
||||
`----------------------------------------*/
|
||||
|
||||
static void
|
||||
output_master_parser (void)
|
||||
{
|
||||
/* Loop over lines in the standard parser file. */
|
||||
if (!skeleton)
|
||||
{
|
||||
if (semantic_parser)
|
||||
@@ -1022,7 +1160,130 @@ output_master_parser (void)
|
||||
else
|
||||
skeleton = skeleton_find ("BISON_SIMPLE", BISON_SIMPLE);
|
||||
}
|
||||
output_parser (skeleton, &table_obstack);
|
||||
fskel = xfopen (skeleton, "r");
|
||||
|
||||
/* Set LINE to 2, not 1: `#line LINENUM' -- Here LINENUM is a
|
||||
decimal integer constant. This specifies that the line number of
|
||||
the *following* line of input, in its original source file, was
|
||||
LINENUM. */
|
||||
line = 2;
|
||||
|
||||
while (1)
|
||||
{
|
||||
enum line_type_e
|
||||
{
|
||||
regular_line,
|
||||
sync_line, /* #line. */
|
||||
actions_line /* %% actions. */
|
||||
};
|
||||
enum line_type_e line_type = regular_line;
|
||||
|
||||
c = getc (fskel);
|
||||
|
||||
/* Is this line special? */
|
||||
if (c == '#')
|
||||
{
|
||||
/* See if it's a `#line' line. */
|
||||
if ((c = getc (fskel)) == 'l')
|
||||
if ((c = getc (fskel)) == 'i')
|
||||
if ((c = getc (fskel)) == 'n')
|
||||
if ((c = getc (fskel)) == 'e')
|
||||
line_type = sync_line;
|
||||
else
|
||||
obstack_sgrow (&table_obstack, "#lin");
|
||||
else
|
||||
obstack_sgrow (&table_obstack, "#li");
|
||||
else
|
||||
obstack_sgrow (&table_obstack, "#l");
|
||||
else
|
||||
obstack_sgrow (&table_obstack, "#");
|
||||
}
|
||||
else if (c == '%')
|
||||
{
|
||||
/* See if it's a `%% actions' line. */
|
||||
if ((c = getc (fskel)) == '%')
|
||||
if ((c = getc (fskel)) == ' ')
|
||||
if ((c = getc (fskel)) == 'a')
|
||||
if ((c = getc (fskel)) == 'c')
|
||||
if ((c = getc (fskel)) == 't')
|
||||
if ((c = getc (fskel)) == 'i')
|
||||
if ((c = getc (fskel)) == 'o')
|
||||
if ((c = getc (fskel)) == 'n')
|
||||
if ((c = getc (fskel)) == 's')
|
||||
line_type = actions_line;
|
||||
else
|
||||
obstack_sgrow (&table_obstack, "%% action");
|
||||
else
|
||||
obstack_sgrow (&table_obstack, "%% actio");
|
||||
else
|
||||
obstack_sgrow (&table_obstack, "%% acti");
|
||||
else
|
||||
obstack_sgrow (&table_obstack, "%% act");
|
||||
else
|
||||
obstack_sgrow (&table_obstack, "%% ac");
|
||||
else
|
||||
obstack_sgrow (&table_obstack, "%% a");
|
||||
else
|
||||
obstack_sgrow (&table_obstack, "%% ");
|
||||
else
|
||||
obstack_sgrow (&table_obstack, "%%");
|
||||
else
|
||||
obstack_sgrow (&table_obstack, "%");
|
||||
}
|
||||
|
||||
switch (line_type)
|
||||
{
|
||||
case sync_line:
|
||||
if (!no_lines_flag)
|
||||
obstack_fgrow2 (&table_obstack, "#line %d %s\n",
|
||||
line, quotearg_style (c_quoting_style, skeleton));
|
||||
|
||||
/* Skip the end of line. */
|
||||
for (; c != '\n' && c != EOF; c = getc (fskel))
|
||||
/* nothing */;
|
||||
break;
|
||||
|
||||
case actions_line:
|
||||
{
|
||||
size_t size = obstack_object_size (&action_obstack);
|
||||
|
||||
actions_dumped++;
|
||||
assert (actions_dumped == 1);
|
||||
obstack_grow (&table_obstack,
|
||||
obstack_finish (&action_obstack),
|
||||
size);
|
||||
}
|
||||
|
||||
/* Skip the end of line. */
|
||||
for (; c != '\n' && c != EOF; c = getc (fskel))
|
||||
/* nothing */;
|
||||
break;
|
||||
|
||||
case regular_line:
|
||||
for (; c != '\n' && c != EOF; c = getc (fskel))
|
||||
obstack_1grow (&table_obstack, c);
|
||||
}
|
||||
|
||||
if (c == EOF)
|
||||
break;
|
||||
obstack_1grow (&table_obstack, c);
|
||||
line++;
|
||||
}
|
||||
assert (actions_dumped == 1);
|
||||
xfclose (fskel);
|
||||
}
|
||||
|
||||
static void
|
||||
output_program (void)
|
||||
{
|
||||
int c;
|
||||
|
||||
if (!no_lines_flag)
|
||||
obstack_fgrow2 (&table_obstack, "#line %d %s\n",
|
||||
lineno, quotearg_style (c_quoting_style, infile));
|
||||
|
||||
while ((c = getc (finput)) != EOF)
|
||||
obstack_1grow (&table_obstack, c);
|
||||
}
|
||||
|
||||
|
||||
@@ -1040,55 +1301,6 @@ free_itemsets (void)
|
||||
}
|
||||
}
|
||||
|
||||
/* FIXME. */
|
||||
|
||||
#define MUSCLE_INSERT_INT(Key, Value) \
|
||||
{ \
|
||||
obstack_fgrow1 (&muscle_obstack, "%d", Value); \
|
||||
obstack_1grow (&muscle_obstack, 0); \
|
||||
muscle_insert (Key, obstack_finish (&muscle_obstack)); \
|
||||
}
|
||||
|
||||
#define MUSCLE_INSERT_STRING(Key, Value) \
|
||||
{ \
|
||||
obstack_sgrow (&muscle_obstack, Value); \
|
||||
obstack_1grow (&muscle_obstack, 0); \
|
||||
muscle_insert (Key, obstack_finish (&muscle_obstack)); \
|
||||
}
|
||||
|
||||
#define MUSCLE_INSERT_PREFIX(Key, Value) \
|
||||
{ \
|
||||
obstack_fgrow2 (&muscle_obstack, "%s%s", spec_name_prefix, Value); \
|
||||
obstack_1grow (&muscle_obstack, 0); \
|
||||
muscle_insert (Key, obstack_finish (&muscle_obstack)); \
|
||||
}
|
||||
|
||||
static void
|
||||
prepare (void)
|
||||
{
|
||||
MUSCLE_INSERT_INT ("last", high);
|
||||
MUSCLE_INSERT_INT ("flag", MINSHORT);
|
||||
MUSCLE_INSERT_INT ("pure", pure_parser);
|
||||
MUSCLE_INSERT_INT ("nsym", nsyms);
|
||||
MUSCLE_INSERT_INT ("debug", debug_flag);
|
||||
MUSCLE_INSERT_INT ("final", final_state);
|
||||
MUSCLE_INSERT_INT ("maxtok", max_user_token_number);
|
||||
MUSCLE_INSERT_INT ("ntbase", ntokens);
|
||||
MUSCLE_INSERT_INT ("verbose", 0);
|
||||
|
||||
MUSCLE_INSERT_INT ("nnts", nvars);
|
||||
MUSCLE_INSERT_INT ("nrules", nrules);
|
||||
MUSCLE_INSERT_INT ("nstates", nstates);
|
||||
MUSCLE_INSERT_INT ("ntokens", ntokens);
|
||||
|
||||
MUSCLE_INSERT_INT ("locations_flag", locations_flag);
|
||||
|
||||
/* We need to save the actions in the muscle %%action. */
|
||||
muscle_insert ("action", obstack_finish (&action_obstack));
|
||||
|
||||
if (spec_name_prefix)
|
||||
MUSCLE_INSERT_STRING ("prefix", spec_name_prefix);
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------.
|
||||
| Output the parsing tables and the parser code to ftable. |
|
||||
@@ -1097,29 +1309,42 @@ prepare (void)
|
||||
void
|
||||
output (void)
|
||||
{
|
||||
obstack_init (&output_obstack);
|
||||
/* output_token_defines(ftable); / * JF put out token defines FIRST */
|
||||
|
||||
/* If using a simple parser the definition of YYSTYPE are put into
|
||||
TABLE_OBSTACK. */
|
||||
if (!semantic_parser)
|
||||
{
|
||||
size_t size = obstack_object_size (&attrs_obstack);
|
||||
obstack_grow (&table_obstack, obstack_finish (&attrs_obstack), size);
|
||||
}
|
||||
reader_output_yylsp (&table_obstack);
|
||||
if (debug_flag)
|
||||
obstack_sgrow (&table_obstack, "\
|
||||
#ifndef YYDEBUG\n\
|
||||
# define YYDEBUG 1\n\
|
||||
#endif\n\
|
||||
\n");
|
||||
|
||||
if (semantic_parser)
|
||||
obstack_fgrow1 (&table_obstack, "#include %s\n",
|
||||
quotearg_style (c_quoting_style, attrsfile));
|
||||
|
||||
if (!no_parser_flag)
|
||||
obstack_sgrow (&table_obstack, "#include <stdio.h>\n\n");
|
||||
|
||||
free_itemsets ();
|
||||
|
||||
output_defines ();
|
||||
output_token_translations ();
|
||||
/* if (semantic_parser) */
|
||||
/* This is now unconditional because debugging printouts can use it. */
|
||||
output_gram ();
|
||||
|
||||
XFREE (ritem);
|
||||
if (semantic_parser)
|
||||
output_stos ();
|
||||
output_rule_data ();
|
||||
output_actions ();
|
||||
|
||||
#if 0
|
||||
if (!no_parser_flag) */
|
||||
#endif
|
||||
prepare ();
|
||||
/* Copy definitions in directive. */
|
||||
muscle_insert ("prologue", obstack_finish (&attrs_obstack));
|
||||
|
||||
output_master_parser ();
|
||||
|
||||
obstack_free (&muscle_obstack, 0);
|
||||
obstack_free (&output_obstack, 0);
|
||||
obstack_free (&action_obstack, 0);
|
||||
if (!no_parser_flag)
|
||||
output_parser ();
|
||||
output_program ();
|
||||
}
|
||||
|
||||
@@ -21,6 +21,12 @@
|
||||
#ifndef OUTPUT_H_
|
||||
# define OUTPUT_H_
|
||||
|
||||
/* Output constant strings to the beginning of certain files. */
|
||||
void output_headers PARAMS ((void));
|
||||
|
||||
/* Output constant strings to the ends of certain files. */
|
||||
void output_trailers PARAMS ((void));
|
||||
|
||||
/* Output the parsing tables and the parser code to FTABLE. */
|
||||
void output PARAMS ((void));
|
||||
|
||||
|
||||
+130
-138
@@ -27,14 +27,12 @@
|
||||
#include "getargs.h"
|
||||
#include "files.h"
|
||||
#include "symtab.h"
|
||||
#include "options.h"
|
||||
#include "lex.h"
|
||||
#include "gram.h"
|
||||
#include "complain.h"
|
||||
#include "output.h"
|
||||
#include "reader.h"
|
||||
#include "conflicts.h"
|
||||
#include "muscle_tab.h"
|
||||
|
||||
/* Number of slots allocated (but not necessarily used yet) in `rline' */
|
||||
static int rline_allocated;
|
||||
@@ -157,12 +155,11 @@ get_type_name (int n, symbol_list * rule)
|
||||
`------------------------------------------------------------*/
|
||||
|
||||
static inline void
|
||||
copy_string2 (FILE *fin, struct obstack *oout, int match, int store)
|
||||
copy_string (FILE *fin, struct obstack *oout, int match)
|
||||
{
|
||||
int c;
|
||||
|
||||
if (store)
|
||||
obstack_1grow (oout, match);
|
||||
obstack_1grow (oout, match);
|
||||
|
||||
c = getc (fin);
|
||||
|
||||
@@ -194,30 +191,9 @@ copy_string2 (FILE *fin, struct obstack *oout, int match, int store)
|
||||
c = getc (fin);
|
||||
}
|
||||
|
||||
if (store)
|
||||
obstack_1grow (oout, c);
|
||||
obstack_1grow (oout, c);
|
||||
}
|
||||
|
||||
/* FIXME. */
|
||||
|
||||
static inline void
|
||||
copy_string (FILE *fin, struct obstack *oout, int match)
|
||||
{
|
||||
copy_string2 (fin, oout, match, 1);
|
||||
}
|
||||
|
||||
/* FIXME. */
|
||||
|
||||
static inline void
|
||||
copy_identifier (FILE *fin, struct obstack *oout)
|
||||
{
|
||||
int c;
|
||||
|
||||
while (isalnum (c = getc (fin)) || c == '_')
|
||||
obstack_1grow (oout, c);
|
||||
|
||||
ungetc (c, fin);
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------.
|
||||
| Dump the wannabee comment from IN to OUT1 and OUT2 (which can be |
|
||||
@@ -426,14 +402,9 @@ copy_definition (void)
|
||||
/* -1 while reading a character if prev char was %. */
|
||||
int after_percent;
|
||||
|
||||
#if 0
|
||||
if (!no_lines_flag)
|
||||
{
|
||||
obstack_fgrow2 (&attrs_obstack, muscle_find ("linef"),
|
||||
lineno, quotearg_style (c_quoting_style,
|
||||
muscle_find("filename")));
|
||||
}
|
||||
#endif
|
||||
obstack_fgrow2 (&attrs_obstack, "#line %d %s\n",
|
||||
lineno, quotearg_style (c_quoting_style, infile));
|
||||
|
||||
after_percent = 0;
|
||||
|
||||
@@ -731,9 +702,9 @@ token_buffer);
|
||||
|
||||
|
||||
/*--------------------------------------------------------------.
|
||||
| Copy the union declaration into the stype muscle |
|
||||
| (and fdefines), where it is made into the definition of |
|
||||
| YYSTYPE, the type of elements of the parser value stack. |
|
||||
| Copy the union declaration into ATTRS_OBSTACK (and fdefines), |
|
||||
| where it is made into the definition of YYSTYPE, the type of |
|
||||
| elements of the parser value stack. |
|
||||
`--------------------------------------------------------------*/
|
||||
|
||||
static void
|
||||
@@ -741,18 +712,19 @@ parse_union_decl (void)
|
||||
{
|
||||
int c;
|
||||
int count = 0;
|
||||
struct obstack union_obstack;
|
||||
|
||||
if (typed)
|
||||
complain (_("multiple %s declarations"), "%union");
|
||||
|
||||
typed = 1;
|
||||
|
||||
if (no_lines_flag)
|
||||
if (!no_lines_flag)
|
||||
obstack_fgrow2 (&attrs_obstack, "\n#line %d %s\n",
|
||||
lineno, quotearg_style (c_quoting_style, infile));
|
||||
else
|
||||
obstack_1grow (&attrs_obstack, '\n');
|
||||
|
||||
obstack_init (&union_obstack);
|
||||
obstack_sgrow (&union_obstack, "union");
|
||||
obstack_sgrow (&attrs_obstack, "typedef union");
|
||||
if (defines_flag)
|
||||
obstack_sgrow (&defines_obstack, "typedef union");
|
||||
|
||||
@@ -760,6 +732,7 @@ parse_union_decl (void)
|
||||
|
||||
while (c != EOF)
|
||||
{
|
||||
|
||||
/* If C contains '/', it is output by copy_comment (). */
|
||||
if (c != '/')
|
||||
{
|
||||
@@ -775,7 +748,7 @@ parse_union_decl (void)
|
||||
break;
|
||||
|
||||
case '/':
|
||||
copy_comment2 (finput, &defines_obstack, &union_obstack);
|
||||
copy_comment2 (finput, &defines_obstack, &attrs_obstack);
|
||||
break;
|
||||
|
||||
case '{':
|
||||
@@ -788,21 +761,19 @@ parse_union_decl (void)
|
||||
count--;
|
||||
if (count <= 0)
|
||||
{
|
||||
obstack_sgrow (&attrs_obstack, " YYSTYPE;\n");
|
||||
if (defines_flag)
|
||||
obstack_sgrow (&defines_obstack, " YYSTYPE;\n");
|
||||
/* JF don't choke on trailing semi */
|
||||
c = skip_white_space ();
|
||||
if (c != ';')
|
||||
ungetc (c, finput);
|
||||
obstack_1grow (&union_obstack, 0);
|
||||
muscle_insert ("stype", obstack_finish (&union_obstack));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
c = getc (finput);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -903,56 +874,60 @@ parse_thong_decl (void)
|
||||
nsyms--;
|
||||
}
|
||||
|
||||
static void
|
||||
parse_muscle_decl (void)
|
||||
|
||||
/*-----------------------------------------------------------------------------.
|
||||
| Parse a double quoted parameter. It was used for %{source,header}_extension. |
|
||||
| For the moment, It is not used since extension features have been removed. |
|
||||
`-----------------------------------------------------------------------------*/
|
||||
|
||||
#if 0
|
||||
|
||||
static const char *
|
||||
parse_dquoted_param (const char *from)
|
||||
{
|
||||
int ch = ungetc (skip_white_space (), finput);
|
||||
char* muscle_key;
|
||||
char* muscle_value;
|
||||
char buff[32];
|
||||
int c;
|
||||
int i;
|
||||
|
||||
/* Read key. */
|
||||
if (!isalpha (ch) && ch != '_')
|
||||
c = skip_white_space ();
|
||||
|
||||
if (c != '"')
|
||||
{
|
||||
complain (_("invalid %s declaration"), "%define");
|
||||
skip_to_char ('%');
|
||||
return;
|
||||
ungetc (c, finput);
|
||||
complain (_("invalid %s declaration"), from);
|
||||
return NULL;
|
||||
}
|
||||
copy_identifier (finput, &muscle_obstack);
|
||||
obstack_1grow (&muscle_obstack, 0);
|
||||
muscle_key = obstack_finish (&muscle_obstack);
|
||||
|
||||
/* Read value. */
|
||||
ch = skip_white_space ();
|
||||
if (ch != '"')
|
||||
c = getc (finput);
|
||||
for (i = 0; (c >= '!') && (c <= '~'); i++)
|
||||
{
|
||||
ungetc (ch, finput);
|
||||
if (ch != EOF)
|
||||
if (c == '"')
|
||||
break;
|
||||
|
||||
if (c == '\\')
|
||||
{
|
||||
complain (_("invalid %s declaration"), "%define");
|
||||
skip_to_char ('%');
|
||||
return;
|
||||
c = getc (finput);
|
||||
if ((c < '!') && (c > '~'))
|
||||
break;
|
||||
}
|
||||
else
|
||||
fatal (_("Premature EOF after %s"), "\"");
|
||||
|
||||
buff[i] = c;
|
||||
c = getc (finput);
|
||||
}
|
||||
copy_string2 (finput, &muscle_obstack, '"', 0);
|
||||
obstack_1grow (&muscle_obstack, 0);
|
||||
muscle_value = obstack_finish (&muscle_obstack);
|
||||
buff[i] = '\0';
|
||||
|
||||
/* Store the (key, value) pair in the environment. */
|
||||
muscle_insert (muscle_key, muscle_value);
|
||||
if (c != '"')
|
||||
{
|
||||
ungetc (c, finput);
|
||||
complain (_("invalid %s declaration"), from);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return xstrdup (buff);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/*----------------------------------.
|
||||
| Parse what comes after %skeleton. |
|
||||
`----------------------------------*/
|
||||
|
||||
void
|
||||
parse_skel_decl (void)
|
||||
{
|
||||
/* Complete with parse_dquoted_param () on the CVS branch 1.29. */
|
||||
}
|
||||
|
||||
/*----------------------------------------------------------------.
|
||||
| Read from finput until `%%' is seen. Discard the `%%'. Handle |
|
||||
@@ -1023,14 +998,6 @@ read_declarations (void)
|
||||
parse_assoc_decl (non_assoc);
|
||||
break;
|
||||
|
||||
case tok_define:
|
||||
parse_muscle_decl ();
|
||||
break;
|
||||
|
||||
case tok_skel:
|
||||
parse_skel_decl ();
|
||||
break;
|
||||
|
||||
case tok_noop:
|
||||
break;
|
||||
|
||||
@@ -1069,13 +1036,14 @@ copy_action (symbol_list *rule, int stack_offset)
|
||||
if (semantic_parser)
|
||||
stack_offset = 0;
|
||||
|
||||
obstack_fgrow1 (&action_obstack, "\ncase %d:\n", nrules);
|
||||
sprintf (buf, "\ncase %d:\n", nrules);
|
||||
obstack_grow (&action_obstack, buf, strlen (buf));
|
||||
|
||||
if (!no_lines_flag)
|
||||
{
|
||||
obstack_fgrow2 (&action_obstack, muscle_find ("linef"),
|
||||
lineno, quotearg_style (c_quoting_style,
|
||||
muscle_find ("filename")));
|
||||
sprintf (buf, "#line %d %s\n",
|
||||
lineno, quotearg_style (c_quoting_style, infile));
|
||||
obstack_grow (&action_obstack, buf, strlen (buf));
|
||||
}
|
||||
obstack_1grow (&action_obstack, '{');
|
||||
|
||||
@@ -1161,9 +1129,8 @@ copy_guard (symbol_list *rule, int stack_offset)
|
||||
|
||||
obstack_fgrow1 (&guard_obstack, "\ncase %d:\n", nrules);
|
||||
if (!no_lines_flag)
|
||||
obstack_fgrow2 (&guard_obstack, muscle_find ("linef"),
|
||||
lineno, quotearg_style (c_quoting_style,
|
||||
muscle_find ("filename")));
|
||||
obstack_fgrow2 (&guard_obstack, "#line %d %s\n",
|
||||
lineno, quotearg_style (c_quoting_style, infile));
|
||||
obstack_1grow (&guard_obstack, '{');
|
||||
|
||||
count = 0;
|
||||
@@ -1614,6 +1581,22 @@ readgram (void)
|
||||
if (nrules == 0)
|
||||
fatal (_("no rules in the input grammar"));
|
||||
|
||||
/* JF put out same default YYSTYPE as YACC does */
|
||||
if (typed == 0
|
||||
&& !value_components_used)
|
||||
{
|
||||
/* We used to use `unsigned long' as YYSTYPE on MSDOS,
|
||||
but it seems better to be consistent.
|
||||
Most programs should declare their own type anyway. */
|
||||
obstack_sgrow (&attrs_obstack,
|
||||
"#ifndef YYSTYPE\n#define YYSTYPE int\n#endif\n");
|
||||
if (defines_flag)
|
||||
obstack_sgrow (&defines_obstack, "\
|
||||
# ifndef YYSTYPE\n\
|
||||
# define YYSTYPE int\n\
|
||||
# endif\n");
|
||||
}
|
||||
|
||||
/* Report any undefined symbols and consider them nonterminals. */
|
||||
|
||||
for (bp = firstsymbol; bp; bp = bp->next)
|
||||
@@ -1628,25 +1611,6 @@ readgram (void)
|
||||
|
||||
ntokens = nsyms - nvars;
|
||||
}
|
||||
|
||||
/* At the end of the grammar file, some C source code must
|
||||
be stored. It is going to be associated to the epilogue
|
||||
directive. */
|
||||
static void
|
||||
read_additionnal_code (void)
|
||||
{
|
||||
char c;
|
||||
struct obstack el_obstack;
|
||||
|
||||
obstack_init (&el_obstack);
|
||||
|
||||
while ((c = getc (finput)) != EOF)
|
||||
obstack_1grow (&el_obstack, c);
|
||||
|
||||
obstack_1grow (&el_obstack, 0);
|
||||
muscle_insert ("epilogue", obstack_finish (&el_obstack));
|
||||
}
|
||||
|
||||
|
||||
/*--------------------------------------------------------------.
|
||||
| For named tokens, but not literal ones, define the name. The |
|
||||
@@ -1694,6 +1658,8 @@ output_token_defines (struct obstack *oout)
|
||||
above. --akim. */
|
||||
obstack_fgrow2 (oout, "# define\tT%s\t%d\n", symbol, bp->value);
|
||||
}
|
||||
|
||||
obstack_1grow (oout, '\n');
|
||||
}
|
||||
|
||||
|
||||
@@ -1712,6 +1678,8 @@ packsymbols (void)
|
||||
int last_user_token_number;
|
||||
static char DOLLAR[] = "$";
|
||||
|
||||
/* int lossage = 0; JF set but not used */
|
||||
|
||||
tags = XCALLOC (char *, nsyms + 1);
|
||||
tags[0] = DOLLAR;
|
||||
user_toknums = XCALLOC (short, nsyms + 1);
|
||||
@@ -1807,19 +1775,8 @@ packsymbols (void)
|
||||
|
||||
error_token_number = errtoken->value;
|
||||
|
||||
{
|
||||
struct obstack tokendefs;
|
||||
obstack_init (&tokendefs);
|
||||
output_token_defines (&tokendefs);
|
||||
obstack_1grow (&tokendefs, 0);
|
||||
muscle_insert ("tokendef", xstrdup (obstack_finish (&tokendefs)));
|
||||
obstack_free (&tokendefs, NULL);
|
||||
}
|
||||
|
||||
#if 0
|
||||
if (!no_parser_flag)
|
||||
output_token_defines (&table_obstack);
|
||||
#endif
|
||||
|
||||
if (startval->class == unknown_sym)
|
||||
fatal (_("the start symbol %s is undefined"), startval->tag);
|
||||
@@ -1957,17 +1914,12 @@ reader (void)
|
||||
lex_init ();
|
||||
lineno = 1;
|
||||
|
||||
/* Initialize the muscle obstack. */
|
||||
obstack_init (&muscle_obstack);
|
||||
|
||||
/* Initialize the symbol table. */
|
||||
tabinit ();
|
||||
|
||||
/* Construct the error token */
|
||||
errtoken = getsym ("error");
|
||||
errtoken->class = token_sym;
|
||||
errtoken->user_token_number = 256; /* Value specified by POSIX. */
|
||||
|
||||
/* Construct a token that represents all undefined literal tokens.
|
||||
It is always token number 2. */
|
||||
undeftoken = getsym ("$undefined.");
|
||||
@@ -1977,20 +1929,60 @@ reader (void)
|
||||
/* Read the declaration section. Copy %{ ... %} groups to
|
||||
TABLE_OBSTACK and FDEFINES file. Also notice any %token, %left,
|
||||
etc. found there. */
|
||||
obstack_1grow (&table_obstack, '\n');
|
||||
obstack_fgrow3 (&table_obstack, "\
|
||||
/* %s, made from %s\n\
|
||||
by GNU bison %s. */\n\
|
||||
\n",
|
||||
no_parser_flag ? "Bison-generated parse tables" : "A Bison parser",
|
||||
infile, VERSION);
|
||||
|
||||
obstack_sgrow (&table_obstack,
|
||||
"#define YYBISON 1 /* Identify Bison output. */\n\n");
|
||||
read_declarations ();
|
||||
/* Start writing the guard and action files, if they are needed. */
|
||||
output_headers ();
|
||||
/* Read in the grammar, build grammar in list form. Write out
|
||||
guards and actions. */
|
||||
readgram ();
|
||||
/* Some C code is given at the end of the grammar file. */
|
||||
read_additionnal_code ();
|
||||
|
||||
/* Now we know whether we need the line-number stack. If we do,
|
||||
write its type into the .tab.h file.
|
||||
This is no longer need with header skeleton. */
|
||||
|
||||
write its type into the .tab.h file. */
|
||||
if (defines_flag)
|
||||
reader_output_yylsp (&defines_obstack);
|
||||
/* Write closing delimiters for actions and guards. */
|
||||
output_trailers ();
|
||||
if (locations_flag)
|
||||
obstack_sgrow (&table_obstack, "#define YYLSP_NEEDED 1\n\n");
|
||||
/* Assign the symbols their symbol numbers. Write #defines for the
|
||||
token symbols into FDEFINES if requested. */
|
||||
packsymbols ();
|
||||
/* Convert the grammar into the format described in gram.h. */
|
||||
packgram ();
|
||||
}
|
||||
|
||||
|
||||
/*------------------------------------------------------------------.
|
||||
| Define YYLTYPE. Cannot be in the skeleton since we might have to |
|
||||
| output it in the headers if --defines is used. |
|
||||
`------------------------------------------------------------------*/
|
||||
|
||||
void
|
||||
reader_output_yylsp (struct obstack *oout)
|
||||
{
|
||||
if (locations_flag)
|
||||
obstack_sgrow (oout, "\
|
||||
\n\
|
||||
#ifndef YYLTYPE\n\
|
||||
typedef struct yyltype\n\
|
||||
{\n\
|
||||
int first_line;\n\
|
||||
int first_column;\n\
|
||||
\n\
|
||||
int last_line;\n\
|
||||
int last_column;\n\
|
||||
} yyltype;\n\
|
||||
\n\
|
||||
# define YYLTYPE yyltype\n\
|
||||
#endif\n\
|
||||
\n");
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user