mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-09-21 15:57:06 +00:00
Compare commits
78
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
342b8b6e21 | ||
|
|
0150aabe35 | ||
|
|
8484abf02c | ||
|
|
bafbfdd24c | ||
|
|
20e0b9749c | ||
|
|
3a7bc75ff7 | ||
|
|
40b97583b8 | ||
|
|
c20e2bdcf1 | ||
|
|
1c8c2190b1 | ||
|
|
180d45ba81 | ||
|
|
c51d1a1973 | ||
|
|
577c6c8499 | ||
|
|
6f9344dadf | ||
|
|
652def8074 | ||
|
|
209215672e | ||
|
|
25b222faf6 | ||
|
|
6bc35ae56a | ||
|
|
31b53af2fa | ||
|
|
a474de9b9a | ||
|
|
c0629aa10f | ||
|
|
82b6d266fd | ||
|
|
75f5aaea27 | ||
|
|
f508cb0ac9 | ||
|
|
f3c383d683 | ||
|
|
13105fc158 | ||
|
|
b0c4483ed2 | ||
|
|
714720fcfe | ||
|
|
4766a52862 | ||
|
|
11d82f03b4 | ||
|
|
a0ed1cb86a | ||
|
|
f753cd6292 | ||
|
|
93a37297e6 | ||
|
|
4134cae3c5 | ||
|
|
682d48cd09 | ||
|
|
53cdf751a3 | ||
|
|
087c8fdae3 | ||
|
|
7a999fcb7b | ||
|
|
dda680cb80 | ||
|
|
6b7d911c5d | ||
|
|
9e644e648d | ||
|
|
17da6427fe | ||
|
|
01ed3db59b | ||
|
|
e8cb70b957 | ||
|
|
63c2d5de0f | ||
|
|
675bc4e954 | ||
|
|
d8cb51834b | ||
|
|
6c686258e3 | ||
|
|
c111e171cd | ||
|
|
8f451ef727 | ||
|
|
5086915ebd | ||
|
|
416bd7a9f3 | ||
|
|
997b6fd0c7 | ||
|
|
2ba3b73c58 | ||
|
|
ff48177d25 | ||
|
|
4e5caae2c6 | ||
|
|
b33160bf45 | ||
|
|
535c0e75d1 | ||
|
|
d1a2daf76a | ||
|
|
2b763dfe15 | ||
|
|
f1a87ef6ad | ||
|
|
cbd8990652 | ||
|
|
82e236e2d6 | ||
|
|
b0cfa28a12 | ||
|
|
6fc7423473 | ||
|
|
40a64a7a48 | ||
|
|
944bc6ce43 | ||
|
|
9c76d118cc | ||
|
|
a8289c62db | ||
|
|
b6610515d5 | ||
|
|
26f609ffc3 | ||
|
|
6f43b11362 | ||
|
|
dd3127cf7a | ||
|
|
aa321494cf | ||
|
|
68bd3b6bfa | ||
|
|
bbb5bcc6f8 | ||
|
|
667a550e7b | ||
|
|
713fa62a74 | ||
|
|
83cd972a1a |
@@ -9,4 +9,5 @@ patches
|
|||||||
*.patch *.log log patches applied
|
*.patch *.log log patches applied
|
||||||
*.prj
|
*.prj
|
||||||
releases
|
releases
|
||||||
|
*.flc
|
||||||
autom4te.cache
|
autom4te.cache
|
||||||
|
|||||||
@@ -1,324 +0,0 @@
|
|||||||
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 September
|
|
||||||
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 ja
|
|
||||||
+----------------------------------------------------+
|
|
||||||
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 | [] [] [] [] [] [] |
|
|
||||||
mysecretdiary | [] |
|
|
||||||
nano | [] [] [] |
|
|
||||||
opcodes | |
|
|
||||||
parted | [] [] [] |
|
|
||||||
ptx | [] [] [] [] [] [] [] |
|
|
||||||
python | |
|
|
||||||
recode | [] [] [] [] [] [] [] [] [] |
|
|
||||||
sed | [] [] [] [] [] [] [] [] [] [] [] [] |
|
|
||||||
sh-utils | [] [] [] [] [] [] [] [] [] [] |
|
|
||||||
sharutils | [] [] [] [] [] [] [] [] |
|
|
||||||
sketch | |
|
|
||||||
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 ja
|
|
||||||
0 14 24 32 11 1 8 23 13 1 33 22 4 0 7 9 18
|
|
||||||
|
|
||||||
ko lv nb nl nn no pl pt pt_BR ru sk sl sv tr uk zh
|
|
||||||
+----------------------------------------------------+
|
|
||||||
a2ps | [] [] [] | 6
|
|
||||||
bash | | 4
|
|
||||||
bfd | | 0
|
|
||||||
binutils | | 1
|
|
||||||
bison | [] | 6
|
|
||||||
clisp | [] | 5
|
|
||||||
cpio | [] [] [] [] [] | 10
|
|
||||||
diffutils | [] [] [] [] | 11
|
|
||||||
enscript | [] [] [] | 5
|
|
||||||
error | [] [] | 4
|
|
||||||
fetchmail | | 0
|
|
||||||
fileutils | [] [] [] [] [] [] [] [] [] | 17
|
|
||||||
findutils | [] [] [] [] [] [] [] [] | 16
|
|
||||||
flex | [] [] [] | 6
|
|
||||||
freetype | | 0
|
|
||||||
gas | | 0
|
|
||||||
gawk | [] | 3
|
|
||||||
gcal | | 0
|
|
||||||
gcc | | 0
|
|
||||||
gettext | [] [] [] [] [] [] [] [] | 18
|
|
||||||
gnupg | [] [] [] | 10
|
|
||||||
gprof | | 0
|
|
||||||
grep | [] [] [] [] | 12
|
|
||||||
hello | [] [] [] [] [] [] [] [] [] [] [] | 22
|
|
||||||
id-utils | [] [] [] | 6
|
|
||||||
indent | [] [] [] [] [] [] [] | 12
|
|
||||||
jpilot | | 1
|
|
||||||
kbd | [] | 1
|
|
||||||
ld | | 1
|
|
||||||
libc | [] [] [] [] [] [] [] [] | 16
|
|
||||||
lilypond | [] [] | 3
|
|
||||||
lynx | [] [] [] [] | 8
|
|
||||||
m4 | [] [] [] [] | 12
|
|
||||||
make | [] [] [] [] [] [] | 12
|
|
||||||
mysecretdiary | | 1
|
|
||||||
nano | [] | 4
|
|
||||||
opcodes | [] | 1
|
|
||||||
parted | [] [] | 5
|
|
||||||
ptx | [] [] [] [] [] [] [] [] | 15
|
|
||||||
python | | 0
|
|
||||||
recode | [] [] [] [] | 13
|
|
||||||
sed | [] [] [] [] [] [] [] | 19
|
|
||||||
sh-utils | [] [] [] [] [] [] [] [] [] [] [] | 21
|
|
||||||
sharutils | [] [] [] | 11
|
|
||||||
sketch | | 0
|
|
||||||
soundtracker | | 3
|
|
||||||
sp | | 0
|
|
||||||
tar | [] [] [] [] [] [] [] | 15
|
|
||||||
texinfo | [] | 7
|
|
||||||
textutils | [] [] [] [] [] [] [] [] | 16
|
|
||||||
util-linux | [] [] | 4
|
|
||||||
wdiff | [] [] [] [] | 7
|
|
||||||
wget | [] [] [] [] [] [] [] | 17
|
|
||||||
+----------------------------------------------------+
|
|
||||||
33 teams ko lv nb nl nn no pl pt pt_BR ru sk sl sv tr uk zh
|
|
||||||
53 domains 9 1 6 20 0 6 17 1 13 25 10 11 23 21 2 2 387
|
|
||||||
|
|
||||||
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 September 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 you have to respect the GNU Library General Public
|
|
||||||
License which covers the use of the GNU `gettext' library. This means
|
|
||||||
in particular that even non-free programs can use `libintl' as a shared
|
|
||||||
library, whereas only free software can use `libintl' as a static
|
|
||||||
library or use modified versions of `libintl'.
|
|
||||||
|
|
||||||
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,55 +1,62 @@
|
|||||||
2001-10-02 Akim Demaille <[email protected]>
|
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.
|
Bump 1.29d.
|
||||||
|
|
||||||
2001-10-02 Akim Demaille <[email protected]>
|
2001-10-02 Akim Demaille <[email protected]>
|
||||||
|
|
||||||
Version 1.29c.
|
Version 1.29c.
|
||||||
|
|
||||||
2001-10-02 Akim Demaille <[email protected]>
|
2001-10-02 Akim Demaille <[email protected]>
|
||||||
|
|
||||||
* tests/regression.at (Invalid CPP headers): New.
|
* tests/regression.at (Invalid CPP headers): New.
|
||||||
From Alexander Belopolsky.
|
From Alexander Belopolsky.
|
||||||
* src/files.c (compute_header_macro): Map non alnum chars to `_'.
|
* src/files.c (compute_header_macro): Map non alnum chars to `_'.
|
||||||
|
|
||||||
2001-10-02 Akim Demaille <[email protected]>
|
2001-10-02 Akim Demaille <[email protected]>
|
||||||
|
|
||||||
* tests/regression.at (Invalid input): New.
|
* tests/regression.at (Invalid input): New.
|
||||||
* src/lex.c (lex): Be sure to set `token_buffer' in any case.
|
* src/lex.c (lex): Be sure to set `token_buffer' in any case.
|
||||||
Reported by Shura.
|
Reported by Shura.
|
||||||
|
|
||||||
2001-10-02 Akim Demaille <[email protected]>
|
2001-10-02 Akim Demaille <[email protected]>
|
||||||
|
|
||||||
* tests/calc.at: Now that --debug works, the tests must be adjusted.
|
* tests/calc.at: Now that --debug works, the tests must be adjusted.
|
||||||
|
|
||||||
2001-10-02 Akim Demaille <[email protected]>
|
2001-10-02 Akim Demaille <[email protected]>
|
||||||
|
|
||||||
* src/output.c (output_parser): Assert `skeleton'.
|
* src/output.c (output_parser): Assert `skeleton'.
|
||||||
* src/files.c (skeleton_find): Look harder for skeletons on DOSish
|
* src/files.c (skeleton_find): Look harder for skeletons on DOSish
|
||||||
systems.
|
systems.
|
||||||
From Shura.
|
From Shura.
|
||||||
|
|
||||||
2001-10-01 Marc Autret <[email protected]>
|
2001-10-01 Marc Autret <[email protected]>
|
||||||
|
|
||||||
* src/lex.h: Echo modifications.
|
* src/lex.h: Echo modifications.
|
||||||
* src/lex.c (unlex): Parameter is now token_t.
|
* src/lex.c (unlex): Parameter is now token_t.
|
||||||
From Hans Aberg.
|
From Hans Aberg.
|
||||||
|
|
||||||
2001-10-01 Marc Autret <[email protected]>
|
2001-10-01 Marc Autret <[email protected]>
|
||||||
|
|
||||||
* src/main.c: Include lex.h.
|
* src/main.c: Include lex.h.
|
||||||
From Hans Aberg.
|
From Hans Aberg.
|
||||||
|
|
||||||
2001-09-29 Akim Demaille <[email protected]>
|
2001-09-29 Akim Demaille <[email protected]>
|
||||||
|
|
||||||
* src/getargs.c (longopts): `--debug' is `-t', not `-d'.
|
* src/getargs.c (longopts): `--debug' is `-t', not `-d'.
|
||||||
|
|
||||||
2001-09-28 Akim Demaille <[email protected]>
|
2001-09-28 Akim Demaille <[email protected]>
|
||||||
|
|
||||||
* tests/testsuite.at: Update to newer Autotest.
|
* tests/testsuite.at: Update to newer Autotest.
|
||||||
* tests/Makefile.am (EXTRA_DIST): bison is not to be shipped.
|
* tests/Makefile.am (EXTRA_DIST): bison is not to be shipped.
|
||||||
|
|
||||||
2001-09-27 Akim Demaille <[email protected]>
|
2001-09-27 Akim Demaille <[email protected]>
|
||||||
|
|
||||||
Position independent wrapper.
|
Position independent wrapper.
|
||||||
|
|
||||||
@@ -57,7 +64,7 @@
|
|||||||
* tests/bison.in: New.
|
* tests/bison.in: New.
|
||||||
* configure.in: Adjust.
|
* configure.in: Adjust.
|
||||||
|
|
||||||
2001-09-27 Paul Eggert <[email protected]>
|
2001-09-27 Paul Eggert <[email protected]>
|
||||||
|
|
||||||
Port quotearg fixes from tar 1.13.24.
|
Port quotearg fixes from tar 1.13.24.
|
||||||
|
|
||||||
@@ -71,15 +78,15 @@
|
|||||||
* m4/prereq.m4 (jm_PREREQ_QUOTEARG): Check for mbsinit and stddef.h.
|
* m4/prereq.m4 (jm_PREREQ_QUOTEARG): Check for mbsinit and stddef.h.
|
||||||
Use jm_FUNC_MBRTOWC instead of AC_CHECK_FUNCS(mbrtowc).
|
Use jm_FUNC_MBRTOWC instead of AC_CHECK_FUNCS(mbrtowc).
|
||||||
|
|
||||||
2001-09-27 Akim Demaille <[email protected]>
|
2001-09-27 Akim Demaille <[email protected]>
|
||||||
|
|
||||||
Bump to 1.29c.
|
Bump to 1.29c.
|
||||||
|
|
||||||
2001-09-27 Akim Demaille <[email protected]>
|
2001-09-27 Akim Demaille <[email protected]>
|
||||||
|
|
||||||
Version 1.29b.
|
Version 1.29b.
|
||||||
|
|
||||||
2001-09-25 Akim Demaille <[email protected]>
|
2001-09-25 Akim Demaille <[email protected]>
|
||||||
|
|
||||||
* src/system.h: Include `xalloc.h'.
|
* src/system.h: Include `xalloc.h'.
|
||||||
Remove it from the C files.
|
Remove it from the C files.
|
||||||
@@ -89,7 +96,7 @@
|
|||||||
(lex_free): New.
|
(lex_free): New.
|
||||||
* src/main.c (main): Use it.
|
* 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
|
* src/vcg.c (open_edge, close_edge, open_node, close_node): Change
|
||||||
to output informations in fout (FILE*).
|
to output informations in fout (FILE*).
|
||||||
@@ -103,11 +110,12 @@
|
|||||||
(open_files): Remove graph_obstack initialization.
|
(open_files): Remove graph_obstack initialization.
|
||||||
(output_files): Remove graph_obstack saving.
|
(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.
|
* 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/reader.c (reader): Remove call to free_symtab ().
|
||||||
* src/main.c (main): Call it here.
|
* src/main.c (main): Call it here.
|
||||||
@@ -122,28 +130,28 @@
|
|||||||
(output_files): Adjust.
|
(output_files): Adjust.
|
||||||
* src/main.c (main): 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
|
* src/files.c (compute_header_macro): Computes header macro name
|
||||||
from spec_defines_file when given.
|
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.
|
* 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...
|
* src/conflicts.c (finalize_conflicts): Rename as...
|
||||||
(free_conflicts): this.
|
(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...
|
* src/gram.c (gram_free): Rename back as...
|
||||||
(dummy): this.
|
(dummy): this.
|
||||||
(output_token_translations): Free `token_translations'.
|
(output_token_translations): Free `token_translations'.
|
||||||
* src/symtab.c (free_symtab): Free the tag field.
|
* 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.
|
Remove `translations' as it is always set to true.
|
||||||
|
|
||||||
@@ -156,14 +164,14 @@
|
|||||||
(dummy): Rename as...
|
(dummy): Rename as...
|
||||||
(gram_free): this.
|
(gram_free): this.
|
||||||
|
|
||||||
2001-09-22 Akim Demaille <[email protected]>
|
2001-09-22 Akim Demaille <[email protected]>
|
||||||
|
|
||||||
* configure.in: Invoke AM_LIB_DMALLOC.
|
* configure.in: Invoke AM_LIB_DMALLOC.
|
||||||
* src/system.h: Use dmalloc.
|
* src/system.h: Use dmalloc.
|
||||||
* src/LR0.c: Be sure to have pointers initialized to NULL.
|
* src/LR0.c: Be sure to have pointers initialized to NULL.
|
||||||
(allocate_itemsets): Allocate kernel_items only if needed.
|
(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.
|
* configure.in: Bump to 1.29b.
|
||||||
* tests/Makefile.am (DISTCLEANFILES): Add package.m4.
|
* tests/Makefile.am (DISTCLEANFILES): Add package.m4.
|
||||||
@@ -171,7 +179,7 @@
|
|||||||
need xmalloc.c in calc.y.
|
need xmalloc.c in calc.y.
|
||||||
From Pascal Bart.
|
From Pascal Bart.
|
||||||
|
|
||||||
2001-09-21 Akim Demaille <[email protected]>
|
2001-09-21 Akim Demaille <[email protected]>
|
||||||
|
|
||||||
Version 1.29a.
|
Version 1.29a.
|
||||||
* Makefile.maint, config/config.guess, config/config.sub,
|
* Makefile.maint, config/config.guess, config/config.sub,
|
||||||
@@ -180,12 +188,12 @@
|
|||||||
upon package.m4.
|
upon package.m4.
|
||||||
* configure.in (ALL_LINGUAS): Add `tr'.
|
* 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...
|
* tests/Makefile.am (package.m4): Move to...
|
||||||
($(srcdir)/$(TESTSUITE)): here.
|
($(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.
|
* 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.
|
Don't assume __STDC__ is defined to 1. Just test if it is defined.
|
||||||
@@ -194,7 +202,7 @@
|
|||||||
Remove the unused variable `n'.
|
Remove the unused variable `n'.
|
||||||
From Albert Chin-A-Young.
|
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.1: Update.
|
||||||
* doc/bison.texinfo (Bison Options): Update --defines and --graph
|
* doc/bison.texinfo (Bison Options): Update --defines and --graph
|
||||||
@@ -202,32 +210,32 @@
|
|||||||
(Option Cross Key): Update.
|
(Option Cross Key): Update.
|
||||||
Add --graph.
|
Add --graph.
|
||||||
|
|
||||||
2001-09-18 Marc Autret <[email protected]>
|
2001-09-18 Marc Autret <[email protected]>
|
||||||
|
|
||||||
* tests/regression.at: New test (comment in %union).
|
* 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
|
* src/reader.c (parse_union_decl): Do not output '/'. Let copy_comment
|
||||||
do that.
|
do that.
|
||||||
Reported by Keith Browne.
|
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.
|
* 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.
|
* 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/Makefile.am (package.m4): New.
|
||||||
* tests/calc.at (_AT_CHECK_CALC): Just run `calc input'.
|
* tests/calc.at (_AT_CHECK_CALC): Just run `calc input'.
|
||||||
(_AT_CHECK_CALC_ERROR): Likewise.
|
(_AT_CHECK_CALC_ERROR): Likewise.
|
||||||
Factor the `, ' part of verbose error messages.
|
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
|
* src/getargs.c (longopts): Declare --defines and --graph as options
|
||||||
with optional arguments.
|
with optional arguments.
|
||||||
@@ -236,7 +244,7 @@
|
|||||||
(output_files): Update.
|
(output_files): Update.
|
||||||
Remove CPP-outed code.
|
Remove CPP-outed code.
|
||||||
|
|
||||||
2001-09-18 Marc Autret <[email protected]>
|
2001-09-18 Marc Autret <[email protected]>
|
||||||
|
|
||||||
Turn off %{source,header}_extension feature.
|
Turn off %{source,header}_extension feature.
|
||||||
|
|
||||||
@@ -251,19 +259,20 @@
|
|||||||
* src/lex.c (percent_table): Remove {header,source}_extension entries.
|
* src/lex.c (percent_table): Remove {header,source}_extension entries.
|
||||||
* src/lex.h (token_t): Remove tok_hdrext and tok_srcext.
|
* 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):
|
* tests/output.at (AT_CHECK_BISON_FLAGS, AT_CHECK_BISON_PERCENT):
|
||||||
(AT_CHECK_BISON_PERCENT_FLAGS): Merge into...
|
(AT_CHECK_BISON_PERCENT_FLAGS): Merge into...
|
||||||
(AT_CHECK_OUTPUT): this.
|
(AT_CHECK_OUTPUT): this.
|
||||||
Merely check ls' exit status, its output is useless.
|
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.
|
* tests/calc.at: Use m4_match.
|
||||||
(_AT_DATA_CALC_Y): Check `yyin != NULL', not `stdin != NULL'.
|
(_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
|
* src/vcg.h (graph_s): color, textcolor, bordercolor are now
|
||||||
enum color_e.
|
enum color_e.
|
||||||
@@ -279,15 +288,15 @@
|
|||||||
part.
|
part.
|
||||||
(unlexed): Is a token_t.
|
(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.
|
* configure.in: Bump to 1.29a.
|
||||||
|
|
||||||
2001-09-07 Akim Demaille <[email protected]>
|
2001-09-07 Akim Demaille <[email protected]>
|
||||||
|
|
||||||
Version 1.29.
|
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.
|
* tests/atgeneral.m4, tests/atconfig.in, tests/suite.at: Remove.
|
||||||
* m4/atconfig.m4: Remove.
|
* m4/atconfig.m4: Remove.
|
||||||
@@ -298,61 +307,61 @@
|
|||||||
* tests/calc.at (_AT_CHECK_CALC, _AT_CHECK_CALC_ERROR): Use an
|
* tests/calc.at (_AT_CHECK_CALC, _AT_CHECK_CALC_ERROR): Use an
|
||||||
`input' file instead of echo.
|
`input' file instead of echo.
|
||||||
|
|
||||||
2001-08-29 Akim Demaille <[email protected]>
|
2001-08-29 Akim Demaille <[email protected]>
|
||||||
|
|
||||||
Bump to 1.28e.
|
Bump to 1.28e.
|
||||||
|
|
||||||
2001-08-29 Akim Demaille <[email protected]>
|
2001-08-29 Akim Demaille <[email protected]>
|
||||||
|
|
||||||
Version 1.28d.
|
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
|
* src/bison.simple (yyparse): Don't take the address of an
|
||||||
item before the start of an array, as that doesn't conform to
|
item before the start of an array, as that doesn't conform to
|
||||||
the C Standard.
|
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.
|
* 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
|
* src/output.c (output): Do not define const, as this now
|
||||||
causes more problems than it cures.
|
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
|
* doc/bison.texinfo: Modernize `@node' and `@top' use: just name
|
||||||
the nodes.
|
the nodes.
|
||||||
Be sure to tag the `detailmenu'.
|
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:
|
* Makefile.maint (do-po-update): Wget refuses to overwrite files:
|
||||||
download in a tmp dir.
|
download in a tmp dir.
|
||||||
|
|
||||||
2001-08-28 Marc Autret <[email protected]>
|
2001-08-28 Marc Autret <[email protected]>
|
||||||
|
|
||||||
* config/depcomp: New file.
|
* config/depcomp: New file.
|
||||||
|
|
||||||
2001-08-28 Marc Autret <[email protected]>
|
2001-08-28 Marc Autret <[email protected]>
|
||||||
|
|
||||||
* doc/bison.1 (mandoc): Adjust.
|
* doc/bison.1 (mandoc): Adjust.
|
||||||
From Juan Manuel Guerrero.
|
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.
|
* 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
|
* src/vcg.h (classname_s, infoname_s, node_s): Constify the
|
||||||
char * members.
|
char * members.
|
||||||
Echo modifications to the functions prototypes.
|
Echo modifications to the functions prototypes.
|
||||||
* src/vcg.c (add_classname, add_infoname): Adjust arguments.
|
* 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'.
|
* src/vcg.c: Include `xalloc.h'.
|
||||||
(add_colorentry): New.
|
(add_colorentry): New.
|
||||||
@@ -360,22 +369,22 @@
|
|||||||
(add_infoname): New.
|
(add_infoname): New.
|
||||||
* src/vcg.h: Add new prototypes.
|
* 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.
|
* 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.
|
* Makefile.maint: Formatting changes.
|
||||||
(po-update, cvs-update, update): New targets.
|
(po-update, cvs-update, update): New targets.
|
||||||
(AMTAR): Remove.
|
(AMTAR): Remove.
|
||||||
|
|
||||||
2001-08-27 Akim Demaille <[email protected]>
|
2001-08-27 Akim Demaille <[email protected]>
|
||||||
|
|
||||||
* Makefile.am (AUTOMAKE_OPTIONS): 1.5.
|
* Makefile.am (AUTOMAKE_OPTIONS): 1.5.
|
||||||
* Makefile.maint: Sync. with CVS Autoconf.
|
* 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.
|
* src/vcg.h (struct infoname_s): New.
|
||||||
(struct colorentry_s): New.
|
(struct colorentry_s): New.
|
||||||
@@ -390,35 +399,35 @@
|
|||||||
Add output of `infoname'.
|
Add output of `infoname'.
|
||||||
Add output of `colorentry'.
|
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'.
|
* src/reader.c (parse_dquoted_param): Rename variable `index' to `i'.
|
||||||
This one shadowed a global parameter.
|
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,
|
* src/print_graph.c (node_output_size): Declared POSIX `size_t' type,
|
||||||
instead of `unsigned'.
|
instead of `unsigned'.
|
||||||
(print_state): Do not call obstack_object_size () in obstack_grow ()
|
(print_state): Do not call obstack_object_size () in obstack_grow ()
|
||||||
to avoid macro variables shadowing.
|
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/.
|
* src/lex.c (percent_table): Typo: s/naem/name/.
|
||||||
Add graph option.
|
Add graph option.
|
||||||
Normalize new options declarations.
|
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.
|
* 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.
|
* src/reader.c (parse_dquoted_param): New.
|
||||||
(parse_header_extension_decl): Use it.
|
(parse_header_extension_decl): Use it.
|
||||||
(parse_source_extension_decl): Likewise.
|
(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'.
|
* src/vcg.c: Remove includes of `complain.h' and `xalloc.h'.
|
||||||
(get_xxxx_str): Use assert () instead of complain ().
|
(get_xxxx_str): Use assert () instead of complain ().
|
||||||
@@ -427,16 +436,378 @@
|
|||||||
Echo modifications on calls.
|
Echo modifications on calls.
|
||||||
(output_graph): Fix.
|
(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''.
|
* 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'.
|
* doc/bison.texinfo (Bison Options): Add items `-g', `--graph'.
|
||||||
(Option Cross Key): Likewise.
|
(Option Cross Key): Likewise.
|
||||||
* doc/bison.1: Update.
|
* 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]>
|
2001-08-15 Akim Demaille <[email protected]>
|
||||||
|
|
||||||
Version 1.28c.
|
Version 1.28c.
|
||||||
|
|||||||
-459
@@ -1,459 +0,0 @@
|
|||||||
# 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 dist-bzip2
|
|
||||||
|
|
||||||
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/mbrtowc.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 $(distdir)/tests
|
|
||||||
@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)
|
|
||||||
|
|
||||||
dist-bzip2: distdir
|
|
||||||
$(AMTAR) chof - $(distdir) | bzip2 -9 -c >$(distdir).tar.bz2
|
|
||||||
-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
|
|
||||||
$(AMTAR) chof - $(distdir) | bzip2 -9 -c >$(distdir).tar.bz2
|
|
||||||
-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 dist-bzip2 \
|
|
||||||
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:
|
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
-*- 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
-1535
File diff suppressed because it is too large
Load Diff
-292
@@ -1,292 +0,0 @@
|
|||||||
/* 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 to 1 if mbrtowc and mbstate_t are properly declared. */
|
|
||||||
#undef HAVE_MBRTOWC
|
|
||||||
|
|
||||||
/* Define if you have the `mbsinit' function. */
|
|
||||||
#undef HAVE_MBSINIT
|
|
||||||
|
|
||||||
/* 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
|
|
||||||
@@ -1,218 +0,0 @@
|
|||||||
# 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:
|
|
||||||
Vendored
-1309
File diff suppressed because it is too large
Load Diff
Vendored
-1412
File diff suppressed because it is too large
Load Diff
-336
@@ -1,336 +0,0 @@
|
|||||||
#! /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
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
#! /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
|
|
||||||
-398
@@ -1,398 +0,0 @@
|
|||||||
# 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
@@ -1,145 +0,0 @@
|
|||||||
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
+52
-53
@@ -191,7 +191,7 @@ Examples
|
|||||||
|
|
||||||
Reverse Polish Notation Calculator
|
Reverse Polish Notation Calculator
|
||||||
|
|
||||||
* Decls: Rpcalc Decls. Bison and C declarations for rpcalc.
|
* Decls: Rpcalc Decls. Prologue (declarations) for rpcalc.
|
||||||
* Rules: Rpcalc Rules. Grammar Rules for rpcalc, with explanation.
|
* Rules: Rpcalc Rules. Grammar Rules for rpcalc, with explanation.
|
||||||
* Lexer: Rpcalc Lexer. The lexical analyzer.
|
* Lexer: Rpcalc Lexer. The lexical analyzer.
|
||||||
* Main: Rpcalc Main. The controlling function.
|
* Main: Rpcalc Main. The controlling function.
|
||||||
@@ -229,10 +229,10 @@ Bison Grammar Files
|
|||||||
|
|
||||||
Outline of a Bison Grammar
|
Outline of a Bison Grammar
|
||||||
|
|
||||||
* C Declarations:: Syntax and usage of the C declarations section.
|
* Prologue:: Syntax and usage of the prologue (declarations section).
|
||||||
* Bison Declarations:: Syntax and usage of the Bison declarations section.
|
* Bison Declarations:: Syntax and usage of the Bison declarations section.
|
||||||
* Grammar Rules:: Syntax and usage of the grammar rules section.
|
* Grammar Rules:: Syntax and usage of the grammar rules section.
|
||||||
* C Code:: Syntax and usage of the additional C code section.
|
* Epilogue:: Syntax and usage of the epilogue (additional code section).
|
||||||
|
|
||||||
Defining Language Semantics
|
Defining Language Semantics
|
||||||
|
|
||||||
@@ -746,7 +746,7 @@ general form of a Bison grammar file is as follows:
|
|||||||
|
|
||||||
@example
|
@example
|
||||||
%@{
|
%@{
|
||||||
@var{C declarations}
|
@var{Prologue (declarations)}
|
||||||
%@}
|
%@}
|
||||||
|
|
||||||
@var{Bison declarations}
|
@var{Bison declarations}
|
||||||
@@ -754,15 +754,15 @@ general form of a Bison grammar file is as follows:
|
|||||||
%%
|
%%
|
||||||
@var{Grammar rules}
|
@var{Grammar rules}
|
||||||
%%
|
%%
|
||||||
@var{Additional C code}
|
@var{Epilogue (additional code)}
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@noindent
|
@noindent
|
||||||
The @samp{%%}, @samp{%@{} and @samp{%@}} are punctuation that appears
|
The @samp{%%}, @samp{%@{} and @samp{%@}} are punctuation that appears
|
||||||
in every Bison grammar file to separate the sections.
|
in every Bison grammar file to separate the sections.
|
||||||
|
|
||||||
The C declarations may define types and variables used in the actions.
|
The prologue may define types and variables used in the actions. You can
|
||||||
You can also use preprocessor commands to define macros used there, and use
|
also use preprocessor commands to define macros used there, and use
|
||||||
@code{#include} to include header files that do any of these things.
|
@code{#include} to include header files that do any of these things.
|
||||||
|
|
||||||
The Bison declarations declare the names of the terminal and nonterminal
|
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
|
The grammar rules define how to construct each nonterminal symbol from its
|
||||||
parts.
|
parts.
|
||||||
|
|
||||||
The additional C code can contain any C code you want to use. Often the
|
The epilogue can contain any code you want to use. Often the definition of
|
||||||
definition of the lexical analyzer @code{yylex} goes here, plus subroutines
|
the lexical analyzer @code{yylex} goes here, plus subroutines called by the
|
||||||
called by the actions in the grammar rules. In a simple program, all the
|
actions in the grammar rules. In a simple program, all the rest of the
|
||||||
rest of the program can go here.
|
program can go here.
|
||||||
|
|
||||||
@node Examples
|
@node Examples
|
||||||
@chapter 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.
|
@samp{.y} extension is a convention used for Bison input files.
|
||||||
|
|
||||||
@menu
|
@menu
|
||||||
* Decls: Rpcalc Decls. Bison and C declarations for rpcalc.
|
* Decls: Rpcalc Decls. Prologue (declarations) for rpcalc.
|
||||||
* Rules: Rpcalc Rules. Grammar Rules for rpcalc, with explanation.
|
* Rules: Rpcalc Rules. Grammar Rules for rpcalc, with explanation.
|
||||||
* Lexer: Rpcalc Lexer. The lexical analyzer.
|
* Lexer: Rpcalc Lexer. The lexical analyzer.
|
||||||
* Main: Rpcalc Main. The controlling function.
|
* 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 */
|
%% /* Grammar rules and actions follow */
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
The C declarations section (@pxref{C Declarations, ,The C Declarations Section}) contains two
|
The declarations section (@pxref{Prologue, , The prologue}) contains two
|
||||||
preprocessor directives.
|
preprocessor directives.
|
||||||
|
|
||||||
The @code{#define} directive defines the macro @code{YYSTYPE}, thus
|
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
|
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
|
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
|
definitions of @code{yylex}, @code{yyerror} and @code{main} go at the
|
||||||
end, in the ``additional C code'' section of the file (@pxref{Grammar
|
end, in the epilogue of the file
|
||||||
Layout, ,The Overall Layout of a Bison Grammar}).
|
(@pxref{Grammar Layout, ,The Overall Layout of a Bison Grammar}).
|
||||||
|
|
||||||
For a large project, you would probably have several source files, and use
|
For a large project, you would probably have several source files, and use
|
||||||
@code{make} to arrange to recompile them.
|
@code{make} to arrange to recompile them.
|
||||||
@@ -1988,7 +1988,7 @@ appropriate delimiters:
|
|||||||
|
|
||||||
@example
|
@example
|
||||||
%@{
|
%@{
|
||||||
@var{C declarations}
|
@var{Prologue}
|
||||||
%@}
|
%@}
|
||||||
|
|
||||||
@var{Bison declarations}
|
@var{Bison declarations}
|
||||||
@@ -1997,24 +1997,25 @@ appropriate delimiters:
|
|||||||
@var{Grammar rules}
|
@var{Grammar rules}
|
||||||
%%
|
%%
|
||||||
|
|
||||||
@var{Additional C code}
|
@var{Epilogue}
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
Comments enclosed in @samp{/* @dots{} */} may appear in any of the sections.
|
Comments enclosed in @samp{/* @dots{} */} may appear in any of the sections.
|
||||||
|
|
||||||
@menu
|
@menu
|
||||||
* C Declarations:: Syntax and usage of the C declarations section.
|
* Prologue:: Syntax and usage of the prologue.
|
||||||
* Bison Declarations:: Syntax and usage of the Bison declarations section.
|
* Bison Declarations:: Syntax and usage of the Bison declarations section.
|
||||||
* Grammar Rules:: Syntax and usage of the grammar rules section.
|
* Grammar Rules:: Syntax and usage of the grammar rules section.
|
||||||
* C Code:: Syntax and usage of the additional C code section.
|
* Epilogue:: Syntax and usage of the epilogue.
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
@node C Declarations
|
@node Prologue, Bison Declarations, , Grammar Outline
|
||||||
@subsection The C Declarations Section
|
@subsection The prologue
|
||||||
@cindex C declarations section
|
@cindex declarations section
|
||||||
@cindex declarations, C
|
@cindex Prologue
|
||||||
|
@cindex declarations
|
||||||
|
|
||||||
The @var{C declarations} section contains macro definitions and
|
The @var{prologue} section contains macro definitions and
|
||||||
declarations of functions and variables that are used in the actions in the
|
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
|
grammar rules. These are copied to the beginning of the parser file so
|
||||||
that they precede the definition of @code{yyparse}. You can use
|
that they precede the definition of @code{yyparse}. You can use
|
||||||
@@ -2044,18 +2045,18 @@ There must always be at least one grammar rule, and the first
|
|||||||
@samp{%%} (which precedes the grammar rules) may never be omitted even
|
@samp{%%} (which precedes the grammar rules) may never be omitted even
|
||||||
if it is the first thing in the file.
|
if it is the first thing in the file.
|
||||||
|
|
||||||
@node C Code
|
@node Epilogue, , Grammar Rules, Grammar Outline
|
||||||
@subsection The Additional C Code Section
|
@subsection The epilogue
|
||||||
@cindex additional C code section
|
@cindex additional C code section
|
||||||
|
@cindex epilogue
|
||||||
@cindex C code, section for additional
|
@cindex C code, section for additional
|
||||||
|
|
||||||
The @var{additional C code} section is copied verbatim to the end of the
|
The @var{epilogue} is copied verbatim to the end of the parser file, just as
|
||||||
parser file, just as the @var{C declarations} section is copied to the
|
the @var{prologue} is copied to the beginning. This is the most convenient
|
||||||
beginning. This is the most convenient place to put anything that you
|
place to put anything that you want to have in the parser file but which need
|
||||||
want to have in the parser file but which need not come before the
|
not come before the definition of @code{yyparse}. For example, the
|
||||||
definition of @code{yyparse}. For example, the definitions of
|
definitions of @code{yylex} and @code{yyerror} often go here.
|
||||||
@code{yylex} and @code{yyerror} often go here. @xref{Interface, ,Parser
|
@xref{Interface, ,Parser C-Language Interface}.
|
||||||
C-Language Interface}.
|
|
||||||
|
|
||||||
If the last section is empty, you may omit the @samp{%%} that separates it
|
If the last section is empty, you may omit the @samp{%%} that separates it
|
||||||
from the grammar rules.
|
from the grammar rules.
|
||||||
@@ -2063,7 +2064,7 @@ from the grammar rules.
|
|||||||
The Bison parser itself contains many static variables whose names start
|
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
|
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
|
good idea to avoid using any such names (except those documented in this
|
||||||
manual) in the additional C code section of the grammar file.
|
manual) in the epilogue of the grammar file.
|
||||||
|
|
||||||
@node Symbols
|
@node Symbols
|
||||||
@section Symbols, Terminal and Nonterminal
|
@section Symbols, Terminal and Nonterminal
|
||||||
@@ -2384,8 +2385,8 @@ specify some other type, define @code{YYSTYPE} as a macro, like this:
|
|||||||
@end example
|
@end example
|
||||||
|
|
||||||
@noindent
|
@noindent
|
||||||
This macro definition must go in the C declarations section of the grammar
|
This macro definition must go in the prologue of the grammar file
|
||||||
file (@pxref{Grammar Outline, ,Outline of a Bison Grammar}).
|
(@pxref{Grammar Outline, ,Outline of a Bison Grammar}).
|
||||||
|
|
||||||
@node Multiple Types
|
@node Multiple Types
|
||||||
@subsection More Than One Value Type
|
@subsection More Than One Value Type
|
||||||
@@ -3359,8 +3360,8 @@ functions that it needs to use.
|
|||||||
|
|
||||||
Keep in mind that the parser uses many C identifiers starting with
|
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
|
@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 additional
|
identifier (aside from those in this manual) in an action or in epilogue
|
||||||
C code in the grammar file, you are likely to run into trouble.
|
in the grammar file, you are likely to run into trouble.
|
||||||
|
|
||||||
@menu
|
@menu
|
||||||
* Parser Function:: How to call @code{yyparse} and what it returns.
|
* Parser Function:: How to call @code{yyparse} and what it returns.
|
||||||
@@ -4804,10 +4805,9 @@ 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
|
it is nonzero, all integers are parsed in hexadecimal, and tokens starting
|
||||||
with letters are parsed as integers if possible.
|
with letters are parsed as integers if possible.
|
||||||
|
|
||||||
The declaration of @code{hexflag} shown in the C declarations section of
|
The declaration of @code{hexflag} shown in the prologue of the parser file
|
||||||
the parser file is needed to make it accessible to the actions
|
is needed to make it accessible to the actions (@pxref{Prologue, ,The Prologue}).
|
||||||
(@pxref{C Declarations, ,The C Declarations Section}). You must also write the code in @code{yylex}
|
You must also write the code in @code{yylex} to obey the flag.
|
||||||
to obey the flag.
|
|
||||||
|
|
||||||
@node Tie-in Recovery
|
@node Tie-in Recovery
|
||||||
@section Lexical Tie-ins and Error Recovery
|
@section Lexical Tie-ins and Error Recovery
|
||||||
@@ -4875,15 +4875,14 @@ 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.
|
runs, the @code{yydebug} parser-trace feature can help you figure out why.
|
||||||
|
|
||||||
To enable compilation of trace facilities, you must define the macro
|
To enable compilation of trace facilities, you must define the macro
|
||||||
@code{YYDEBUG} when you compile the parser. You could use
|
@code{YYDEBUG} when you compile the parser. You could use @samp{-DYYDEBUG=1}
|
||||||
@samp{-DYYDEBUG=1} as a compiler option or you could put @samp{#define
|
as a compiler option or you could put @samp{#define YYDEBUG 1} in the prologue
|
||||||
YYDEBUG 1} in the C declarations section of the grammar file
|
of the grammar file (@pxref{Prologue, , The Prologue}). Alternatively, use the
|
||||||
(@pxref{C Declarations, ,The C Declarations Section}). Alternatively, use the @samp{-t} option when
|
@samp{-t} option when you run Bison (@pxref{Invocation, ,Invoking Bison}).
|
||||||
you run Bison (@pxref{Invocation, ,Invoking Bison}). We always define @code{YYDEBUG} so that
|
We always define @code{YYDEBUG} so that debugging is always possible.
|
||||||
debugging is always possible.
|
|
||||||
|
|
||||||
The trace facility uses @code{stderr}, so you must add @w{@code{#include
|
The trace facility uses @code{stderr}, so you must add
|
||||||
<stdio.h>}} to the C declarations section unless it is already there.
|
@w{@code{#include <stdio.h>}} to the prologue unless it is already there.
|
||||||
|
|
||||||
Once you have compiled the program with trace facilities, the way to
|
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}.
|
request a trace is to store a nonzero value in the variable @code{yydebug}.
|
||||||
@@ -5417,13 +5416,13 @@ These are the punctuation and delimiters used in Bison input:
|
|||||||
@table @samp
|
@table @samp
|
||||||
@item %%
|
@item %%
|
||||||
Delimiter used to separate the grammar rule section from the
|
Delimiter used to separate the grammar rule section from the
|
||||||
Bison declarations section or the additional C code section.
|
Bison declarations section or the epilogue.
|
||||||
@xref{Grammar Layout, ,The Overall Layout of a Bison Grammar}.
|
@xref{Grammar Layout, ,The Overall Layout of a Bison Grammar}.
|
||||||
|
|
||||||
@item %@{ %@}
|
@item %@{ %@}
|
||||||
All code listed between @samp{%@{} and @samp{%@}} is copied directly to
|
All code listed between @samp{%@{} and @samp{%@}} is copied directly to
|
||||||
the output file uninterpreted. Such code forms the ``C declarations''
|
the output file uninterpreted. Such code forms the prologue of the input
|
||||||
section of the input file. @xref{Grammar Outline, ,Outline of a Bison
|
file. @xref{Grammar Outline, ,Outline of a Bison
|
||||||
Grammar}.
|
Grammar}.
|
||||||
|
|
||||||
@item /*@dots{}*/
|
@item /*@dots{}*/
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
@set UPDATED 20 September 2001
|
|
||||||
@set UPDATED-MONTH September 2001
|
|
||||||
@set EDITION 1.29d
|
|
||||||
@set VERSION 1.29d
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
@set UPDATED 20 September 2001
|
|
||||||
@set UPDATED-MONTH September 2001
|
|
||||||
@set EDITION 1.29d
|
|
||||||
@set VERSION 1.29d
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
2001-09-13 GNU <[email protected]>
|
|
||||||
|
|
||||||
* Version 0.10.40 released.
|
|
||||||
|
|
||||||
@@ -1,313 +0,0 @@
|
|||||||
# 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 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.
|
|
||||||
|
|
||||||
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 = COPYING.LIB-2 COPYING.LIB-2.1 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="COPYING.LIB-2 COPYING.LIB-2.1 $(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 COPYING.LIB-2 COPYING.LIB-2.1 $(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:
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
GNU gettext library from gettext-0.10.40
|
|
||||||
@@ -1,369 +0,0 @@
|
|||||||
/* 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 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. */
|
|
||||||
|
|
||||||
#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
|
|
||||||
@@ -1,438 +0,0 @@
|
|||||||
#! /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
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
/* 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 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. */
|
|
||||||
|
|
||||||
#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
|
|
||||||
-1259
File diff suppressed because it is too large
Load Diff
@@ -1,60 +0,0 @@
|
|||||||
/* 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 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. */
|
|
||||||
|
|
||||||
#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
|
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
/* 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 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. */
|
|
||||||
|
|
||||||
#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
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
/* 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 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. */
|
|
||||||
|
|
||||||
#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
|
|
||||||
@@ -1,192 +0,0 @@
|
|||||||
/* 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 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. */
|
|
||||||
|
|
||||||
#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;
|
|
||||||
}
|
|
||||||
@@ -1,198 +0,0 @@
|
|||||||
/* 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 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. */
|
|
||||||
|
|
||||||
#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
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
/* 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 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. */
|
|
||||||
|
|
||||||
#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
|
|
||||||
-102
@@ -1,102 +0,0 @@
|
|||||||
/* 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 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. */
|
|
||||||
|
|
||||||
#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 */
|
|
||||||
-252
@@ -1,252 +0,0 @@
|
|||||||
/* 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 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. */
|
|
||||||
|
|
||||||
#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 */
|
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
/* 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 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. */
|
|
||||||
|
|
||||||
/* @@ 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;
|
|
||||||
}
|
|
||||||
@@ -1,166 +0,0 @@
|
|||||||
/* 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 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. */
|
|
||||||
|
|
||||||
#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);
|
|
||||||
}
|
|
||||||
@@ -1,405 +0,0 @@
|
|||||||
/* 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 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. */
|
|
||||||
|
|
||||||
/* 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
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
/* 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 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. */
|
|
||||||
|
|
||||||
#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 */
|
|
||||||
@@ -1,128 +0,0 @@
|
|||||||
/* 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 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. */
|
|
||||||
|
|
||||||
#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 */
|
|
||||||
-109
@@ -1,109 +0,0 @@
|
|||||||
/* 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 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. */
|
|
||||||
|
|
||||||
#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 */
|
|
||||||
@@ -1,567 +0,0 @@
|
|||||||
/* 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 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. */
|
|
||||||
|
|
||||||
/* 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
|
|
||||||
@@ -1,271 +0,0 @@
|
|||||||
/* 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;
|
|
||||||
}
|
|
||||||
@@ -1,78 +0,0 @@
|
|||||||
# 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 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 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 he_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
|
|
||||||
@@ -1,404 +0,0 @@
|
|||||||
/* 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 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. */
|
|
||||||
|
|
||||||
/* 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
|
|
||||||
}
|
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
/* 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 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. */
|
|
||||||
|
|
||||||
#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
|
|
||||||
-1326
File diff suppressed because it is too large
Load Diff
-413
@@ -1,413 +0,0 @@
|
|||||||
%{
|
|
||||||
/* 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 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 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. */
|
|
||||||
}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
# 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:/
|
|
||||||
}
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
# 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:/
|
|
||||||
}
|
|
||||||
@@ -1,142 +0,0 @@
|
|||||||
/* 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 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. */
|
|
||||||
|
|
||||||
#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
|
|
||||||
+2
-1
@@ -4,7 +4,7 @@ AUTOMAKE_OPTIONS = ansi2knr
|
|||||||
|
|
||||||
noinst_LIBRARIES = libbison.a
|
noinst_LIBRARIES = libbison.a
|
||||||
|
|
||||||
INCLUDES = -I.. -I$(srcdir) -I../intl
|
INCLUDES = -I.. -I$(srcdir) -I$(top_srcdir)/src -I../intl
|
||||||
|
|
||||||
# Heck, we are still using an old version of Automake which does not
|
# Heck, we are still using an old version of Automake which does not
|
||||||
# understand LIBOBJ additions using $objext...
|
# understand LIBOBJ additions using $objext...
|
||||||
@@ -14,6 +14,7 @@ EXTRA_DIST = malloc.c realloc.c
|
|||||||
libbison_a_SOURCES = \
|
libbison_a_SOURCES = \
|
||||||
error.c error.h \
|
error.c error.h \
|
||||||
getopt.h getopt.c getopt1.c \
|
getopt.h getopt.c getopt1.c \
|
||||||
|
hash.h hash.c \
|
||||||
obstack.h obstack.c \
|
obstack.h obstack.c \
|
||||||
quote.h quote.c quotearg.h quotearg.c \
|
quote.h quote.c quotearg.h quotearg.c \
|
||||||
xalloc.h xmalloc.c xstrdup.c
|
xalloc.h xmalloc.c xstrdup.c
|
||||||
|
|||||||
-397
@@ -1,397 +0,0 @@
|
|||||||
# 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
@@ -0,0 +1,293 @@
|
|||||||
|
/* 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
@@ -0,0 +1,144 @@
|
|||||||
|
/* 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_ */
|
||||||
-236
@@ -1,236 +0,0 @@
|
|||||||
# 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 \
|
|
||||||
mbrtowc.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,3 +1,8 @@
|
|||||||
|
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]>
|
2001-09-27 gettextize <[email protected]>
|
||||||
|
|
||||||
* Makefile.in.in: Upgrade to gettext-0.10.40.
|
* Makefile.in.in: Upgrade to gettext-0.10.40.
|
||||||
|
|||||||
@@ -3,3 +3,4 @@
|
|||||||
Makefile
|
Makefile
|
||||||
bison
|
bison
|
||||||
*.log
|
*.log
|
||||||
|
*.flc
|
||||||
+7
-5
@@ -13,17 +13,19 @@ bin_PROGRAMS = bison
|
|||||||
bison_SOURCES = LR0.c closure.c complain.c conflicts.c \
|
bison_SOURCES = LR0.c closure.c complain.c conflicts.c \
|
||||||
derives.c \
|
derives.c \
|
||||||
files.c getargs.c gram.c lalr.c lex.c main.c nullable.c \
|
files.c getargs.c gram.c lalr.c lex.c main.c nullable.c \
|
||||||
output.c \
|
output.c print_graph.c \
|
||||||
print.c reader.c reduce.c symtab.c warshall.c vcg.c print_graph.c
|
muscle_tab.c options.c \
|
||||||
|
print.c reader.c reduce.c symtab.c warshall.c vcg.c
|
||||||
|
|
||||||
EXTRA_bison_SOURCES = vmsgetargs.c
|
EXTRA_bison_SOURCES = vmsgetargs.c
|
||||||
|
|
||||||
noinst_HEADERS = LR0.h closure.h complain.h conflicts.h \
|
noinst_HEADERS = LR0.h closure.h complain.h conflicts.h \
|
||||||
derives.h \
|
derives.h \
|
||||||
files.h getargs.h gram.h lalr.h lex.h nullable.h \
|
files.h getargs.h gram.h lalr.h lex.h nullable.h \
|
||||||
output.h state.h \
|
output.h print_graph.h \
|
||||||
print.h reader.h reduce.h symtab.h warshall.h system.h types.h \
|
muscle_tab.h options.h \
|
||||||
vcg.h vcg_defaults.h print_graph.h
|
print.h reader.h reduce.h state.h symtab.h warshall.h system.h \
|
||||||
|
types.h vcg.h vcg_defaults.h
|
||||||
|
|
||||||
pkgdata_DATA = bison.simple bison.hairy
|
pkgdata_DATA = bison.simple bison.hairy
|
||||||
|
|
||||||
|
|||||||
-468
@@ -1,468 +0,0 @@
|
|||||||
# 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:
|
|
||||||
+202
-38
@@ -1,5 +1,8 @@
|
|||||||
/* -*-C-*- Note some compilers choke on comments on `#line' lines. */
|
/* -*- C -*- */
|
||||||
#line
|
|
||||||
|
/* A Bison parser, made from %%filename
|
||||||
|
by GNU bison %%version. */
|
||||||
|
|
||||||
/* Skeleton output parser for bison,
|
/* Skeleton output parser for bison,
|
||||||
Copyright 1984, 1989, 1990, 2000, 2001 Free Software Foundation, Inc.
|
Copyright 1984, 1989, 1990, 2000, 2001 Free Software Foundation, Inc.
|
||||||
|
|
||||||
@@ -28,6 +31,29 @@
|
|||||||
It was written by Richard Stallman by simplifying the hairy parser
|
It was written by Richard Stallman by simplifying the hairy parser
|
||||||
used when %semantic_parser is specified. */
|
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
|
#ifndef YYSTACK_USE_ALLOCA
|
||||||
# ifdef alloca
|
# ifdef alloca
|
||||||
# define YYSTACK_USE_ALLOCA 1
|
# define YYSTACK_USE_ALLOCA 1
|
||||||
@@ -78,31 +104,163 @@
|
|||||||
# define YYSTACK_ALLOC malloc
|
# define YYSTACK_ALLOC malloc
|
||||||
#endif
|
#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 yyerrok (yyerrstatus = 0)
|
||||||
#define yyclearin (yychar = YYEMPTY)
|
#define yyclearin (yychar = YYEMPTY)
|
||||||
#define YYEMPTY -2
|
#define YYEMPTY -2
|
||||||
#define YYEOF 0
|
#define YYEOF 0
|
||||||
|
|
||||||
#define YYACCEPT goto yyacceptlab
|
#define YYACCEPT goto yyacceptlab
|
||||||
#define YYABORT goto yyabortlab
|
#define YYABORT goto yyabortlab
|
||||||
#define YYERROR goto yyerrlab1
|
#define YYERROR goto yyerrlab1
|
||||||
|
|
||||||
/* Like YYERROR except do call yyerror. This remains here temporarily
|
/* Like YYERROR except do call yyerror. This remains here temporarily
|
||||||
to ease the transition to the new meaning of YYERROR, for GCC.
|
to ease the transition to the new meaning of YYERROR, for GCC.
|
||||||
Once GCC version 2 has supplanted version 1, this can go. */
|
Once GCC version 2 has supplanted version 1, this can go. */
|
||||||
|
|
||||||
#define YYFAIL goto yyerrlab
|
#define YYFAIL goto yyerrlab
|
||||||
|
|
||||||
#define YYRECOVERING() (!!yyerrstatus)
|
#define YYRECOVERING() (!!yyerrstatus)
|
||||||
|
|
||||||
#define YYBACKUP(Token, Value) \
|
#define YYBACKUP(Token, Value) \
|
||||||
do \
|
do \
|
||||||
if (yychar == YYEMPTY && yylen == 1) \
|
if (yychar == YYEMPTY && yylen == 1) \
|
||||||
{ \
|
{ \
|
||||||
yychar = (Token); \
|
yychar = (Token); \
|
||||||
yylval = (Value); \
|
yylval = (Value); \
|
||||||
yychar1 = YYTRANSLATE (yychar); \
|
yychar1 = YYTRANSLATE (yychar); \
|
||||||
YYPOPSTACK; \
|
YYPOPSTACK; \
|
||||||
goto yybackup; \
|
goto yybackup; \
|
||||||
} \
|
} \
|
||||||
else \
|
else \
|
||||||
{ \
|
{ \
|
||||||
yyerror ("syntax error: cannot back up"); \
|
yyerror ("syntax error: cannot back up"); \
|
||||||
YYERROR; \
|
YYERROR; \
|
||||||
} \
|
} \
|
||||||
while (0)
|
while (0)
|
||||||
@@ -110,7 +268,6 @@ while (0)
|
|||||||
#define YYTERROR 1
|
#define YYTERROR 1
|
||||||
#define YYERRCODE 256
|
#define YYERRCODE 256
|
||||||
|
|
||||||
|
|
||||||
/* YYLLOC_DEFAULT -- Compute the default location (before the actions
|
/* YYLLOC_DEFAULT -- Compute the default location (before the actions
|
||||||
are run).
|
are run).
|
||||||
|
|
||||||
@@ -124,6 +281,8 @@ while (0)
|
|||||||
Current.last_column = Rhs[N].last_column;
|
Current.last_column = Rhs[N].last_column;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Definition of YYLSP_NEEDED. */
|
||||||
|
#define YYLSP_NEEDED %%locations_flag
|
||||||
|
|
||||||
/* YYLEX -- calling `yylex' with the right arguments. */
|
/* YYLEX -- calling `yylex' with the right arguments. */
|
||||||
|
|
||||||
@@ -145,7 +304,6 @@ while (0)
|
|||||||
# define YYLEX yylex ()
|
# define YYLEX yylex ()
|
||||||
#endif /* !YYPURE */
|
#endif /* !YYPURE */
|
||||||
|
|
||||||
|
|
||||||
/* Enable debugging if requested. */
|
/* Enable debugging if requested. */
|
||||||
#if YYDEBUG
|
#if YYDEBUG
|
||||||
# define YYDPRINTF(Args) \
|
# define YYDPRINTF(Args) \
|
||||||
@@ -164,7 +322,7 @@ int yydebug;
|
|||||||
|
|
||||||
/* YYINITDEPTH -- initial size of the parser's stacks. */
|
/* YYINITDEPTH -- initial size of the parser's stacks. */
|
||||||
#ifndef YYINITDEPTH
|
#ifndef YYINITDEPTH
|
||||||
# define YYINITDEPTH 200
|
# define YYINITDEPTH %%initdepth
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
|
/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
|
||||||
@@ -174,9 +332,11 @@ int yydebug;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef YYMAXDEPTH
|
#ifndef YYMAXDEPTH
|
||||||
# define YYMAXDEPTH 10000
|
# define YYMAXDEPTH %%maxdepth
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Define __yy_memcpy. Note that the size argument
|
/* Define __yy_memcpy. Note that the size argument
|
||||||
should be passed with type unsigned int, because that is what the non-GCC
|
should be passed with type unsigned int, because that is what the non-GCC
|
||||||
definitions require. With GCC, __builtin_memcpy takes an arg
|
definitions require. With GCC, __builtin_memcpy takes an arg
|
||||||
@@ -205,10 +365,11 @@ __yy_memcpy (char *to, const char *from, unsigned int count)
|
|||||||
while (i-- > 0)
|
while (i-- > 0)
|
||||||
*t++ = *f++;
|
*t++ = *f++;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#line
|
|
||||||
|
#line %%line "%%skeleton"
|
||||||
|
|
||||||
/* The user can define YYPARSE_PARAM as the name of an argument to be passed
|
/* The user can define YYPARSE_PARAM as the name of an argument to be passed
|
||||||
into yyparse. The argument should have type void *.
|
into yyparse. The argument should have type void *.
|
||||||
@@ -245,7 +406,7 @@ int yyparse (void);
|
|||||||
/* The lookahead symbol. */ \
|
/* The lookahead symbol. */ \
|
||||||
int yychar; \
|
int yychar; \
|
||||||
\
|
\
|
||||||
/* The semantic value of the lookahead symbol. */ \
|
/* The semantic value of the lookahead symbol. */ \
|
||||||
YYSTYPE yylval; \
|
YYSTYPE yylval; \
|
||||||
\
|
\
|
||||||
/* Number of parse errors so far. */ \
|
/* Number of parse errors so far. */ \
|
||||||
@@ -262,8 +423,7 @@ YYLTYPE yylloc;
|
|||||||
_YY_DECL_VARIABLES
|
_YY_DECL_VARIABLES
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* If nonreentrant, generate the variables here. */
|
||||||
/* If nonreentrant, generate the variables here. */
|
|
||||||
|
|
||||||
#if !YYPURE
|
#if !YYPURE
|
||||||
YY_DECL_VARIABLES
|
YY_DECL_VARIABLES
|
||||||
@@ -273,7 +433,7 @@ int
|
|||||||
yyparse (YYPARSE_PARAM_ARG)
|
yyparse (YYPARSE_PARAM_ARG)
|
||||||
YYPARSE_PARAM_DECL
|
YYPARSE_PARAM_DECL
|
||||||
{
|
{
|
||||||
/* If reentrant, generate the variables here. */
|
/* If reentrant, generate the variables here. */
|
||||||
#if YYPURE
|
#if YYPURE
|
||||||
YY_DECL_VARIABLES
|
YY_DECL_VARIABLES
|
||||||
#endif /* !YYPURE */
|
#endif /* !YYPURE */
|
||||||
@@ -293,7 +453,7 @@ yyparse (YYPARSE_PARAM_ARG)
|
|||||||
Refer to the stacks thru separate pointers, to allow yyoverflow
|
Refer to the stacks thru separate pointers, to allow yyoverflow
|
||||||
to reallocate them elsewhere. */
|
to reallocate them elsewhere. */
|
||||||
|
|
||||||
/* The state stack. */
|
/* The state stack. */
|
||||||
short yyssa[YYINITDEPTH];
|
short yyssa[YYINITDEPTH];
|
||||||
short *yyss = yyssa;
|
short *yyss = yyssa;
|
||||||
register short *yyssp;
|
register short *yyssp;
|
||||||
@@ -319,7 +479,6 @@ yyparse (YYPARSE_PARAM_ARG)
|
|||||||
int yystacksize = YYINITDEPTH;
|
int yystacksize = YYINITDEPTH;
|
||||||
int yyfree_stacks = 0;
|
int yyfree_stacks = 0;
|
||||||
|
|
||||||
|
|
||||||
/* The variables used to return semantic value and location from the
|
/* The variables used to return semantic value and location from the
|
||||||
action routines. */
|
action routines. */
|
||||||
YYSTYPE yyval;
|
YYSTYPE yyval;
|
||||||
@@ -328,7 +487,7 @@ yyparse (YYPARSE_PARAM_ARG)
|
|||||||
# endif
|
# endif
|
||||||
|
|
||||||
/* When reducing, the number of symbols on the RHS of the reduced
|
/* When reducing, the number of symbols on the RHS of the reduced
|
||||||
rule. */
|
rule. */
|
||||||
int yylen;
|
int yylen;
|
||||||
|
|
||||||
YYDPRINTF ((stderr, "Starting parse\n"));
|
YYDPRINTF ((stderr, "Starting parse\n"));
|
||||||
@@ -416,7 +575,7 @@ yyparse (YYPARSE_PARAM_ARG)
|
|||||||
yystacksize *= 2;
|
yystacksize *= 2;
|
||||||
if (yystacksize > YYMAXDEPTH)
|
if (yystacksize > YYMAXDEPTH)
|
||||||
yystacksize = YYMAXDEPTH;
|
yystacksize = YYMAXDEPTH;
|
||||||
# ifndef YYSTACK_USE_ALLOCA
|
# if !YYSTACK_USE_ALLOCA
|
||||||
yyfree_stacks = 1;
|
yyfree_stacks = 1;
|
||||||
# endif
|
# endif
|
||||||
yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
|
yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
|
||||||
@@ -448,7 +607,6 @@ yyparse (YYPARSE_PARAM_ARG)
|
|||||||
|
|
||||||
goto yybackup;
|
goto yybackup;
|
||||||
|
|
||||||
|
|
||||||
/*-----------.
|
/*-----------.
|
||||||
| yybackup. |
|
| yybackup. |
|
||||||
`-----------*/
|
`-----------*/
|
||||||
@@ -475,12 +633,12 @@ yybackup:
|
|||||||
yychar = YYLEX;
|
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;
|
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"));
|
YYDPRINTF ((stderr, "Now at end of input.\n"));
|
||||||
}
|
}
|
||||||
@@ -601,8 +759,11 @@ yyreduce:
|
|||||||
fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
|
fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
%% actions /* The action file replaces this line. */
|
switch (yyn)
|
||||||
#line
|
{
|
||||||
|
%%action
|
||||||
|
}
|
||||||
|
#line %%line "%%skeleton"
|
||||||
|
|
||||||
yyvsp -= yylen;
|
yyvsp -= yylen;
|
||||||
yyssp -= yylen;
|
yyssp -= yylen;
|
||||||
@@ -650,7 +811,7 @@ yyerrlab:
|
|||||||
{
|
{
|
||||||
++yynerrs;
|
++yynerrs;
|
||||||
|
|
||||||
#ifdef YYERROR_VERBOSE
|
#if YYERROR_VERBOSE
|
||||||
yyn = yypact[yystate];
|
yyn = yypact[yystate];
|
||||||
|
|
||||||
if (yyn > YYFLAG && yyn < YYLAST)
|
if (yyn > YYFLAG && yyn < YYLAST)
|
||||||
@@ -678,11 +839,11 @@ yyerrlab:
|
|||||||
{
|
{
|
||||||
count = 0;
|
count = 0;
|
||||||
for (x = (yyn < 0 ? -yyn : 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)
|
if (yycheck[x + yyn] == x)
|
||||||
{
|
{
|
||||||
strcat (msg, count == 0 ? ", expecting `" : " or `");
|
strcat (msg, count == 0 ? ", expecting `" : " or `");
|
||||||
strcat (msg, yytname[x]);
|
strcat (msg, yytname[x]);
|
||||||
strcat (msg, "'");
|
strcat (msg, "'");
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
@@ -690,26 +851,26 @@ yyerrlab:
|
|||||||
yyerror (msg);
|
yyerror (msg);
|
||||||
free (msg);
|
free (msg);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
yyerror ("parse error; also virtual memory exceeded");
|
yyerror ("parse error; also virtual memory exceeded");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif /* YYERROR_VERBOSE */
|
#endif /* YYERROR_VERBOSE */
|
||||||
yyerror ("parse error");
|
yyerror ("parse error");
|
||||||
}
|
}
|
||||||
goto yyerrlab1;
|
goto yyerrlab1;
|
||||||
|
|
||||||
|
|
||||||
/*--------------------------------------------------.
|
/*----------------------------------------------------.
|
||||||
| yyerrlab1 -- error raised explicitly by an action |
|
| yyerrlab1 -- error raised explicitly by an action. |
|
||||||
`--------------------------------------------------*/
|
`----------------------------------------------------*/
|
||||||
yyerrlab1:
|
yyerrlab1:
|
||||||
if (yyerrstatus == 3)
|
if (yyerrstatus == 3)
|
||||||
{
|
{
|
||||||
/* If just tried and failed to reuse lookahead token after an
|
/* If just tried and failed to reuse lookahead token after an
|
||||||
error, discard it. */
|
error, discard it. */
|
||||||
|
|
||||||
/* return failure if at end of input */
|
/* Return failure if at end of input. */
|
||||||
if (yychar == YYEOF)
|
if (yychar == YYEOF)
|
||||||
YYABORT;
|
YYABORT;
|
||||||
YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
|
YYDPRINTF ((stderr, "Discarding token %d (%s).\n",
|
||||||
@@ -720,7 +881,7 @@ yyerrlab1:
|
|||||||
/* Else will try to reuse lookahead token after shifting the error
|
/* Else will try to reuse lookahead token after shifting the error
|
||||||
token. */
|
token. */
|
||||||
|
|
||||||
yyerrstatus = 3; /* Each real token shifted decrements this */
|
yyerrstatus = 3; /* Each real token shifted decrements this. */
|
||||||
|
|
||||||
goto yyerrhandle;
|
goto yyerrhandle;
|
||||||
|
|
||||||
@@ -743,7 +904,7 @@ yyerrdefault:
|
|||||||
|
|
||||||
/*---------------------------------------------------------------.
|
/*---------------------------------------------------------------.
|
||||||
| yyerrpop -- pop the current state because it cannot handle the |
|
| yyerrpop -- pop the current state because it cannot handle the |
|
||||||
| error token |
|
| error token. |
|
||||||
`---------------------------------------------------------------*/
|
`---------------------------------------------------------------*/
|
||||||
yyerrpop:
|
yyerrpop:
|
||||||
if (yyssp == yyss)
|
if (yyssp == yyss)
|
||||||
@@ -831,3 +992,6 @@ yyabortlab:
|
|||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#line %%input_line "%%filename"
|
||||||
|
%%epilogue
|
||||||
|
|||||||
@@ -495,10 +495,14 @@ output_files (void)
|
|||||||
defines_obstack_save (spec_defines_file);
|
defines_obstack_save (spec_defines_file);
|
||||||
obstack_free (&defines_obstack, NULL);
|
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 we output only the table, dump the actions in ACTFILE. */
|
||||||
if (no_parser_flag)
|
if (no_parser_flag)
|
||||||
obstack_save (&action_obstack, stringappend (short_base_name, ".act"));
|
obstack_save (&action_obstack, stringappend (short_base_name, ".act"));
|
||||||
obstack_free (&action_obstack, NULL);
|
obstack_free (&action_obstack, NULL);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* If we produced a semantic parser ATTRS_OBSTACK must be dumped
|
/* If we produced a semantic parser ATTRS_OBSTACK must be dumped
|
||||||
into its own file, ATTTRSFILE. */
|
into its own file, ATTTRSFILE. */
|
||||||
|
|||||||
+4
-31
@@ -24,6 +24,8 @@
|
|||||||
#include "files.h"
|
#include "files.h"
|
||||||
#include "complain.h"
|
#include "complain.h"
|
||||||
#include "getargs.h"
|
#include "getargs.h"
|
||||||
|
#include "xalloc.h"
|
||||||
|
#include "options.h"
|
||||||
|
|
||||||
int debug_flag = 0;
|
int debug_flag = 0;
|
||||||
int defines_flag = 0;
|
int defines_flag = 0;
|
||||||
@@ -39,37 +41,6 @@ int graph_flag = 0;
|
|||||||
const char *skeleton = NULL;
|
const char *skeleton = NULL;
|
||||||
|
|
||||||
extern char *program_name;
|
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, 't'},
|
|
||||||
{"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. |
|
| Display the help message. |
|
||||||
@@ -163,6 +134,7 @@ getargs (int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
|
create_long_option_table ();
|
||||||
while ((c = getopt_long (argc, argv, shortopts, longopts, NULL)) != EOF)
|
while ((c = getopt_long (argc, argv, shortopts, longopts, NULL)) != EOF)
|
||||||
switch (c)
|
switch (c)
|
||||||
{
|
{
|
||||||
@@ -240,6 +212,7 @@ getargs (int argc, char *argv[])
|
|||||||
exit (1);
|
exit (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
XFREE (longopts);
|
||||||
if (optind == argc)
|
if (optind == argc)
|
||||||
{
|
{
|
||||||
fprintf (stderr, _("%s: no grammar file given\n"), program_name);
|
fprintf (stderr, _("%s: no grammar file given\n"), program_name);
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
#include "files.h"
|
#include "files.h"
|
||||||
#include "getopt.h" /* for optarg */
|
#include "getopt.h" /* for optarg */
|
||||||
#include "symtab.h"
|
#include "symtab.h"
|
||||||
|
#include "options.h"
|
||||||
#include "lex.h"
|
#include "lex.h"
|
||||||
#include "complain.h"
|
#include "complain.h"
|
||||||
#include "gram.h"
|
#include "gram.h"
|
||||||
@@ -526,57 +527,24 @@ lex (void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* the following table dictates the action taken for the various %
|
/* This function is a strcmp, which doesn't differentiate `-' and `_'
|
||||||
directives. A set_flag value causes the named flag to be set. A
|
chars. */
|
||||||
retval action returns the code. */
|
|
||||||
struct percent_table_struct
|
|
||||||
{
|
|
||||||
const char *name;
|
|
||||||
void *set_flag;
|
|
||||||
token_t retval;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct percent_table_struct percent_table[] =
|
static int
|
||||||
|
option_strcmp (const char *left, const char *right)
|
||||||
{
|
{
|
||||||
{ "token", NULL, tok_token },
|
const unsigned char *l, *r;
|
||||||
{ "term", NULL, tok_token },
|
int c;
|
||||||
{ "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}
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
/* Parse a token which starts with %.
|
/* Parse a token which starts with %.
|
||||||
Assumes the % has already been read and discarded. */
|
Assumes the % has already been read and discarded. */
|
||||||
@@ -584,7 +552,7 @@ struct percent_table_struct percent_table[] =
|
|||||||
token_t
|
token_t
|
||||||
parse_percent_token (void)
|
parse_percent_token (void)
|
||||||
{
|
{
|
||||||
struct percent_table_struct *tx;
|
const struct option_table_struct *tx;
|
||||||
|
|
||||||
int c = getc (finput);
|
int c = getc (finput);
|
||||||
|
|
||||||
@@ -618,8 +586,8 @@ parse_percent_token (void)
|
|||||||
obstack_1grow (&token_obstack, '%');
|
obstack_1grow (&token_obstack, '%');
|
||||||
while (isalpha (c) || c == '_' || c == '-')
|
while (isalpha (c) || c == '_' || c == '-')
|
||||||
{
|
{
|
||||||
if (c == '-')
|
if (c == '_')
|
||||||
c = '_';
|
c = '-';
|
||||||
obstack_1grow (&token_obstack, c);
|
obstack_1grow (&token_obstack, c);
|
||||||
c = getc (finput);
|
c = getc (finput);
|
||||||
}
|
}
|
||||||
@@ -629,8 +597,9 @@ parse_percent_token (void)
|
|||||||
token_buffer = obstack_finish (&token_obstack);
|
token_buffer = obstack_finish (&token_obstack);
|
||||||
|
|
||||||
/* table lookup % directive */
|
/* table lookup % directive */
|
||||||
for (tx = percent_table; tx->name; tx++)
|
for (tx = option_table; tx->name; tx++)
|
||||||
if (strcmp (token_buffer + 1, tx->name) == 0)
|
if ((tx->access == opt_percent || tx->access == opt_both)
|
||||||
|
&& option_strcmp (token_buffer + 1, tx->name) == 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (tx->set_flag)
|
if (tx->set_flag)
|
||||||
@@ -639,7 +608,7 @@ parse_percent_token (void)
|
|||||||
return tok_noop;
|
return tok_noop;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (tx->retval)
|
switch (tx->ret_val)
|
||||||
{
|
{
|
||||||
case tok_setopt:
|
case tok_setopt:
|
||||||
*((char **) (tx->set_flag)) = optarg;
|
*((char **) (tx->set_flag)) = optarg;
|
||||||
@@ -655,5 +624,5 @@ parse_percent_token (void)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return tx->retval;
|
return tx->ret_val;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,6 +48,8 @@ typedef enum token_e
|
|||||||
tok_number,
|
tok_number,
|
||||||
tok_expect,
|
tok_expect,
|
||||||
tok_thong,
|
tok_thong,
|
||||||
|
tok_define,
|
||||||
|
tok_skel,
|
||||||
tok_noop,
|
tok_noop,
|
||||||
tok_setopt,
|
tok_setopt,
|
||||||
tok_illegal,
|
tok_illegal,
|
||||||
|
|||||||
+4
-2
@@ -1,5 +1,5 @@
|
|||||||
/* Top level entry point of bison,
|
/* Top level entry point of bison,
|
||||||
Copyright 1984, 1986, 1989, 1992, 1995, 2000
|
Copyright 1984, 1986, 1989, 1992, 1995, 2000, 2001
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of Bison, the GNU Compiler Compiler.
|
This file is part of Bison, the GNU Compiler Compiler.
|
||||||
@@ -34,6 +34,7 @@
|
|||||||
#include "LR0.h"
|
#include "LR0.h"
|
||||||
#include "conflicts.h"
|
#include "conflicts.h"
|
||||||
#include "print_graph.h"
|
#include "print_graph.h"
|
||||||
|
#include "muscle_tab.h"
|
||||||
#include "symtab.h"
|
#include "symtab.h"
|
||||||
#include "lex.h"
|
#include "lex.h"
|
||||||
|
|
||||||
@@ -53,6 +54,7 @@ main (int argc, char *argv[])
|
|||||||
lineno = 0;
|
lineno = 0;
|
||||||
getargs (argc, argv);
|
getargs (argc, argv);
|
||||||
|
|
||||||
|
muscle_init ();
|
||||||
open_files ();
|
open_files ();
|
||||||
|
|
||||||
/* Read the input. Copy some parts of it to FGUARD, FACTION, FTABLE
|
/* Read the input. Copy some parts of it to FGUARD, FACTION, FTABLE
|
||||||
@@ -94,7 +96,7 @@ main (int argc, char *argv[])
|
|||||||
/* Print information about results, if requested. */
|
/* Print information about results, if requested. */
|
||||||
print_results ();
|
print_results ();
|
||||||
|
|
||||||
/* Output the VCG graph. */
|
/* Output the VCG graph. */
|
||||||
print_graph ();
|
print_graph ();
|
||||||
|
|
||||||
/* Output the tables and the parser to ftable. In file output. */
|
/* Output the tables and the parser to ftable. In file output. */
|
||||||
|
|||||||
@@ -0,0 +1,126 @@
|
|||||||
|
/* 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;
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
/* 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
@@ -0,0 +1,152 @@
|
|||||||
|
/* 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;
|
||||||
|
}
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
/* 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_ */
|
||||||
+207
-433
@@ -102,11 +102,10 @@
|
|||||||
#include "lalr.h"
|
#include "lalr.h"
|
||||||
#include "reader.h"
|
#include "reader.h"
|
||||||
#include "conflicts.h"
|
#include "conflicts.h"
|
||||||
|
#include "muscle_tab.h"
|
||||||
|
|
||||||
extern void berror PARAMS((const char *));
|
extern void berror PARAMS((const char *));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int nvectors;
|
static int nvectors;
|
||||||
static int nentries;
|
static int nentries;
|
||||||
static short **froms = NULL;
|
static short **froms = NULL;
|
||||||
@@ -123,189 +122,44 @@ static short *check = NULL;
|
|||||||
static int lowzero;
|
static int lowzero;
|
||||||
static int high;
|
static int high;
|
||||||
|
|
||||||
|
struct obstack muscle_obstack;
|
||||||
|
struct obstack output_obstack;
|
||||||
|
|
||||||
|
/* FIXME. */
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
output_short_or_char_table (struct obstack *oout,
|
output_table_data (struct obstack *oout,
|
||||||
const char *comment,
|
short *table_data,
|
||||||
const char *type,
|
short first,
|
||||||
const char *table_name,
|
short begin,
|
||||||
short *short_table,
|
short end)
|
||||||
short first_value,
|
|
||||||
short begin, short end)
|
|
||||||
{
|
{
|
||||||
int i, j;
|
int i;
|
||||||
|
int j = 1;
|
||||||
|
|
||||||
if (comment)
|
obstack_fgrow1 (oout, "%6d", first);
|
||||||
obstack_fgrow1 (oout, "/* %s. */\n", comment);
|
for (i = begin; i < end; ++i)
|
||||||
|
|
||||||
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, ',');
|
obstack_1grow (oout, ',');
|
||||||
|
|
||||||
if (j >= 10)
|
if (j >= 10)
|
||||||
{
|
{
|
||||||
obstack_sgrow (oout, "\n ");
|
obstack_sgrow (oout, "\n ");
|
||||||
j = 1;
|
j = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
++j;
|
||||||
j++;
|
obstack_fgrow1 (oout, "%6d", table_data[i]);
|
||||||
}
|
|
||||||
|
|
||||||
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
|
static void
|
||||||
output_token_translations (void)
|
output_token_translations (void)
|
||||||
{
|
{
|
||||||
obstack_sgrow (&table_obstack, "\
|
output_table_data (&output_obstack, token_translations,
|
||||||
\n\
|
0, 1, max_user_token_number + 1);
|
||||||
/* YYTRANSLATE(YYLEX) -- Bison token number corresponding to YYLEX. */\n");
|
muscle_insert ("translate", obstack_finish (&output_obstack));
|
||||||
|
|
||||||
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);
|
XFREE (token_translations);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -313,14 +167,9 @@ output_token_translations (void)
|
|||||||
static void
|
static void
|
||||||
output_gram (void)
|
output_gram (void)
|
||||||
{
|
{
|
||||||
/* With the ordinary parser,
|
output_table_data (&output_obstack, rrhs,
|
||||||
yyprhs and yyrhs are needed only for yydebug. */
|
0, 1, nrules + 1);
|
||||||
/* With the no_parser option, all tables are generated */
|
muscle_insert ("prhs", obstack_finish (&output_obstack));
|
||||||
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;
|
size_t yyrhs_size = 1;
|
||||||
@@ -334,21 +183,26 @@ output_gram (void)
|
|||||||
for (sp = ritem + 1, i = 1; *sp; ++sp, ++i)
|
for (sp = ritem + 1, i = 1; *sp; ++sp, ++i)
|
||||||
yyrhs[i] = *sp > 0 ? *sp : 0;
|
yyrhs[i] = *sp > 0 ? *sp : 0;
|
||||||
|
|
||||||
output_short_table (&table_obstack, NULL, "yyrhs", yyrhs,
|
output_table_data (&output_obstack, yyrhs,
|
||||||
ritem[0], 1, yyrhs_size);
|
ritem[0], 1, yyrhs_size);
|
||||||
|
muscle_insert ("rhs", obstack_finish (&output_obstack));
|
||||||
|
|
||||||
XFREE (yyrhs);
|
XFREE (yyrhs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
if (!semantic_parser && !no_parser_flag)
|
if (!semantic_parser && !no_parser_flag)
|
||||||
obstack_sgrow (&table_obstack, "\n#endif\n");
|
obstack_sgrow (&table_obstack, "\n#endif\n");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
output_stos (void)
|
output_stos (void)
|
||||||
{
|
{
|
||||||
output_short_table (&table_obstack, NULL, "yystos", accessing_symbol,
|
output_table_data (&output_obstack, accessing_symbol,
|
||||||
0, 1, nstates);
|
0, 1, nstates);
|
||||||
|
muscle_insert ("stos", obstack_finish (&output_obstack));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -359,34 +213,9 @@ output_rule_data (void)
|
|||||||
int j;
|
int j;
|
||||||
short *short_tab = NULL;
|
short *short_tab = NULL;
|
||||||
|
|
||||||
obstack_sgrow (&table_obstack, "\n\
|
output_table_data (&output_obstack, rline,
|
||||||
#if YYDEBUG != 0\n");
|
0, 1, nrules + 1);
|
||||||
|
muscle_insert ("rline", obstack_finish (&output_obstack));
|
||||||
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;
|
j = 0;
|
||||||
for (i = 0; i < nsyms; i++)
|
for (i = 0; i < nsyms; i++)
|
||||||
@@ -409,80 +238,61 @@ output_rule_data (void)
|
|||||||
|
|
||||||
if (j + strsize > 75)
|
if (j + strsize > 75)
|
||||||
{
|
{
|
||||||
obstack_sgrow (&table_obstack, "\n ");
|
obstack_sgrow (&output_obstack, "\n ");
|
||||||
j = 2;
|
j = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
obstack_1grow (&table_obstack, '\"');
|
obstack_1grow (&output_obstack, '\"');
|
||||||
for (p = tags[i]; p && *p; p++)
|
for (p = tags[i]; p && *p; p++)
|
||||||
{
|
{
|
||||||
if (*p == '"' || *p == '\\')
|
if (*p == '"' || *p == '\\')
|
||||||
obstack_fgrow1 (&table_obstack, "\\%c", *p);
|
obstack_fgrow1 (&output_obstack, "\\%c", *p);
|
||||||
else if (*p == '\n')
|
else if (*p == '\n')
|
||||||
obstack_sgrow (&table_obstack, "\\n");
|
obstack_sgrow (&output_obstack, "\\n");
|
||||||
else if (*p == '\t')
|
else if (*p == '\t')
|
||||||
obstack_sgrow (&table_obstack, "\\t");
|
obstack_sgrow (&output_obstack, "\\t");
|
||||||
else if (*p == '\b')
|
else if (*p == '\b')
|
||||||
obstack_sgrow (&table_obstack, "\\b");
|
obstack_sgrow (&output_obstack, "\\b");
|
||||||
else if (*p < 040 || *p >= 0177)
|
else if (*p < 040 || *p >= 0177)
|
||||||
obstack_fgrow1 (&table_obstack, "\\%03o", *p);
|
obstack_fgrow1 (&output_obstack, "\\%03o", *p);
|
||||||
else
|
else
|
||||||
obstack_1grow (&table_obstack, *p);
|
obstack_1grow (&output_obstack, *p);
|
||||||
}
|
}
|
||||||
|
|
||||||
obstack_sgrow (&table_obstack, "\", ");
|
obstack_sgrow (&output_obstack, "\", ");
|
||||||
j += strsize;
|
j += strsize;
|
||||||
}
|
}
|
||||||
/* add a NULL entry to list of tokens */
|
/* add a NULL entry to list of tokens */
|
||||||
obstack_sgrow (&table_obstack, "NULL\n};\n");
|
obstack_sgrow (&output_obstack, "NULL");
|
||||||
|
|
||||||
if (!token_table_flag && !no_parser_flag)
|
/* Finish table and store. */
|
||||||
obstack_sgrow (&table_obstack, "#endif\n\n");
|
obstack_1grow (&output_obstack, 0);
|
||||||
|
muscle_insert ("tname", obstack_finish (&output_obstack));
|
||||||
|
|
||||||
/* Output YYTOKNUM. */
|
/* Output YYTOKNUM. */
|
||||||
if (token_table_flag)
|
output_table_data (&output_obstack, user_toknums,
|
||||||
{
|
0, 1, ntokens + 1);
|
||||||
output_short_table (&table_obstack,
|
muscle_insert ("toknum", obstack_finish (&output_obstack));
|
||||||
"YYTOKNUM[YYLEX] -- Index in YYTNAME corresponding to YYLEX",
|
|
||||||
"yytoknum", user_toknums,
|
|
||||||
0, 1, ntokens + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Output YYR1. */
|
/* Output YYR1. */
|
||||||
output_short_table (&table_obstack,
|
output_table_data (&output_obstack, rlhs,
|
||||||
"YYR1[YYN] -- Symbol number of symbol that rule YYN derives",
|
0, 1, nrules + 1);
|
||||||
"yyr1", rlhs,
|
muscle_insert ("r1", obstack_finish (&output_obstack));
|
||||||
0, 1, nrules + 1);
|
|
||||||
XFREE (rlhs + 1);
|
XFREE (rlhs + 1);
|
||||||
|
|
||||||
obstack_1grow (&table_obstack, '\n');
|
|
||||||
|
|
||||||
/* Output YYR2. */
|
/* Output YYR2. */
|
||||||
short_tab = XMALLOC (short, nrules + 1);
|
short_tab = XMALLOC (short, nrules + 1);
|
||||||
for (i = 1; i < nrules; i++)
|
for (i = 1; i < nrules; i++)
|
||||||
short_tab[i] = rrhs[i + 1] - rrhs[i] - 1;
|
short_tab[i] = rrhs[i + 1] - rrhs[i] - 1;
|
||||||
short_tab[nrules] = nitems - rrhs[nrules] - 1;
|
short_tab[nrules] = nitems - rrhs[nrules] - 1;
|
||||||
output_short_table (&table_obstack,
|
output_table_data (&output_obstack, short_tab,
|
||||||
"YYR2[YYN] -- Number of symbols composing right hand side of rule YYN",
|
0, 1, nrules + 1);
|
||||||
"yyr2", short_tab,
|
muscle_insert ("r2", obstack_finish (&output_obstack));
|
||||||
0, 1, nrules + 1);
|
|
||||||
obstack_1grow (&table_obstack, '\n');
|
|
||||||
|
|
||||||
XFREE (short_tab);
|
XFREE (short_tab);
|
||||||
|
|
||||||
XFREE (rrhs + 1);
|
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 |
|
| 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 |
|
| token in specified state. The value returned is used as the |
|
||||||
@@ -723,15 +533,12 @@ token_actions (void)
|
|||||||
yydefact[i] = action_row (i);
|
yydefact[i] = action_row (i);
|
||||||
save_row (i);
|
save_row (i);
|
||||||
}
|
}
|
||||||
XFREE (actrow);
|
|
||||||
|
|
||||||
output_short_table (&table_obstack,
|
output_table_data (&output_obstack, yydefact,
|
||||||
"YYDEFACT[S] -- default rule to reduce with in state S when YYTABLE\n\
|
yydefact[0], 1, nstates);
|
||||||
doesn't specify something else to do. Zero means the default is an\n\
|
muscle_insert ("defact", obstack_finish (&output_obstack));
|
||||||
error",
|
|
||||||
"yydefact", yydefact,
|
XFREE (actrow);
|
||||||
yydefact[0], 1, nstates);
|
|
||||||
obstack_1grow (&table_obstack, '\n');
|
|
||||||
XFREE (yydefact);
|
XFREE (yydefact);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -858,10 +665,9 @@ static void
|
|||||||
goto_actions (void)
|
goto_actions (void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
short *yydefgoto = XMALLOC (short, nsyms - ntokens);
|
short *yydefgoto = XMALLOC (short, nsyms - ntokens);
|
||||||
state_count = XCALLOC (short, nstates);
|
|
||||||
|
|
||||||
|
state_count = XCALLOC (short, nstates);
|
||||||
for (i = ntokens; i < nsyms; ++i)
|
for (i = ntokens; i < nsyms; ++i)
|
||||||
{
|
{
|
||||||
int default_state = default_goto (i);
|
int default_state = default_goto (i);
|
||||||
@@ -869,8 +675,9 @@ goto_actions (void)
|
|||||||
yydefgoto[i - ntokens] = default_state;
|
yydefgoto[i - ntokens] = default_state;
|
||||||
}
|
}
|
||||||
|
|
||||||
output_short_table (&table_obstack, NULL, "yydefgoto", yydefgoto,
|
output_table_data (&output_obstack, yydefgoto,
|
||||||
yydefgoto[0], 1, nsyms - ntokens);
|
yydefgoto[0], 1, nsyms - ntokens);
|
||||||
|
muscle_insert ("defgoto", obstack_finish (&output_obstack));
|
||||||
|
|
||||||
XFREE (state_count);
|
XFREE (state_count);
|
||||||
XFREE (yydefgoto);
|
XFREE (yydefgoto);
|
||||||
@@ -1072,13 +879,15 @@ pack_table (void)
|
|||||||
static void
|
static void
|
||||||
output_base (void)
|
output_base (void)
|
||||||
{
|
{
|
||||||
output_short_table (&table_obstack, NULL, "yypact", base,
|
/* Output pact. */
|
||||||
base[0], 1, nstates);
|
output_table_data (&output_obstack, base,
|
||||||
|
base[0], 1, nstates);
|
||||||
|
muscle_insert ("pact", obstack_finish (&output_obstack));
|
||||||
|
|
||||||
obstack_1grow (&table_obstack, '\n');
|
/* Output pgoto. */
|
||||||
|
output_table_data (&output_obstack, base,
|
||||||
output_short_table (&table_obstack, NULL, "yypgoto", base,
|
base[nstates], nstates + 1, nvectors);
|
||||||
base[nstates], nstates + 1, nvectors);
|
muscle_insert ("pgoto", obstack_finish (&output_obstack));
|
||||||
|
|
||||||
XFREE (base);
|
XFREE (base);
|
||||||
}
|
}
|
||||||
@@ -1087,9 +896,9 @@ output_base (void)
|
|||||||
static void
|
static void
|
||||||
output_table (void)
|
output_table (void)
|
||||||
{
|
{
|
||||||
obstack_fgrow1 (&table_obstack, "\n\n#define\tYYLAST\t\t%d\n\n\n", high);
|
output_table_data (&output_obstack, table,
|
||||||
output_short_table (&table_obstack, NULL, "yytable", table,
|
table[0], 1, high + 1);
|
||||||
table[0], 1, high + 1);
|
muscle_insert ("table", obstack_finish (&output_obstack));
|
||||||
XFREE (table);
|
XFREE (table);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1097,8 +906,9 @@ output_table (void)
|
|||||||
static void
|
static void
|
||||||
output_check (void)
|
output_check (void)
|
||||||
{
|
{
|
||||||
output_short_table (&table_obstack, NULL, "yycheck", check,
|
output_table_data (&output_obstack, check,
|
||||||
check[0], 1, high + 1);
|
check[0], 1, high + 1);
|
||||||
|
muscle_insert ("check", obstack_finish (&output_obstack));
|
||||||
XFREE (check);
|
XFREE (check);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1130,29 +940,81 @@ output_actions (void)
|
|||||||
|
|
||||||
sort_actions ();
|
sort_actions ();
|
||||||
pack_table ();
|
pack_table ();
|
||||||
obstack_1grow (&table_obstack, '\n');
|
|
||||||
output_base ();
|
output_base ();
|
||||||
output_table ();
|
output_table ();
|
||||||
obstack_1grow (&table_obstack, '\n');
|
|
||||||
output_check ();
|
output_check ();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*------------------------------------------.
|
|
||||||
| Copy the parser code into TABLE_OBSTACK. |
|
/*------------------------------------------------------------.
|
||||||
`------------------------------------------*/
|
| Copy the parser code from SKEL_FILENAME into OOUT obstack. |
|
||||||
|
| and do the muscle substitution. |
|
||||||
|
`------------------------------------------------------------*/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
output_parser (void)
|
output_parser (const char *skel_filename, struct obstack *oout)
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
FILE *fskel;
|
FILE *fskel;
|
||||||
size_t line;
|
size_t line;
|
||||||
int actions_dumped = 0;
|
|
||||||
|
|
||||||
if (pure_parser)
|
fskel = xfopen (skel_filename, "r");
|
||||||
obstack_sgrow (&table_obstack, "#define YYPURE 1\n\n");
|
|
||||||
|
|
||||||
/* Loop over lines in the standard parser file. */
|
/* 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)
|
||||||
|
{
|
||||||
if (!skeleton)
|
if (!skeleton)
|
||||||
{
|
{
|
||||||
if (semantic_parser)
|
if (semantic_parser)
|
||||||
@@ -1160,131 +1022,7 @@ output_parser (void)
|
|||||||
else
|
else
|
||||||
skeleton = skeleton_find ("BISON_SIMPLE", BISON_SIMPLE);
|
skeleton = skeleton_find ("BISON_SIMPLE", BISON_SIMPLE);
|
||||||
}
|
}
|
||||||
assert (skeleton);
|
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1302,6 +1040,55 @@ 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. |
|
| Output the parsing tables and the parser code to ftable. |
|
||||||
@@ -1310,42 +1097,29 @@ free_itemsets (void)
|
|||||||
void
|
void
|
||||||
output (void)
|
output (void)
|
||||||
{
|
{
|
||||||
/* output_token_defines(ftable); / * JF put out token defines FIRST */
|
obstack_init (&output_obstack);
|
||||||
|
|
||||||
/* 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 ();
|
free_itemsets ();
|
||||||
output_defines ();
|
|
||||||
output_token_translations ();
|
output_token_translations ();
|
||||||
/* if (semantic_parser) */
|
|
||||||
/* This is now unconditional because debugging printouts can use it. */
|
|
||||||
output_gram ();
|
output_gram ();
|
||||||
|
|
||||||
XFREE (ritem);
|
XFREE (ritem);
|
||||||
if (semantic_parser)
|
if (semantic_parser)
|
||||||
output_stos ();
|
output_stos ();
|
||||||
output_rule_data ();
|
output_rule_data ();
|
||||||
output_actions ();
|
output_actions ();
|
||||||
if (!no_parser_flag)
|
|
||||||
output_parser ();
|
#if 0
|
||||||
output_program ();
|
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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,12 +21,6 @@
|
|||||||
#ifndef OUTPUT_H_
|
#ifndef OUTPUT_H_
|
||||||
# define 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. */
|
/* Output the parsing tables and the parser code to FTABLE. */
|
||||||
void output PARAMS ((void));
|
void output PARAMS ((void));
|
||||||
|
|
||||||
|
|||||||
+138
-130
@@ -27,12 +27,14 @@
|
|||||||
#include "getargs.h"
|
#include "getargs.h"
|
||||||
#include "files.h"
|
#include "files.h"
|
||||||
#include "symtab.h"
|
#include "symtab.h"
|
||||||
|
#include "options.h"
|
||||||
#include "lex.h"
|
#include "lex.h"
|
||||||
#include "gram.h"
|
#include "gram.h"
|
||||||
#include "complain.h"
|
#include "complain.h"
|
||||||
#include "output.h"
|
#include "output.h"
|
||||||
#include "reader.h"
|
#include "reader.h"
|
||||||
#include "conflicts.h"
|
#include "conflicts.h"
|
||||||
|
#include "muscle_tab.h"
|
||||||
|
|
||||||
/* Number of slots allocated (but not necessarily used yet) in `rline' */
|
/* Number of slots allocated (but not necessarily used yet) in `rline' */
|
||||||
static int rline_allocated;
|
static int rline_allocated;
|
||||||
@@ -155,11 +157,12 @@ get_type_name (int n, symbol_list * rule)
|
|||||||
`------------------------------------------------------------*/
|
`------------------------------------------------------------*/
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
copy_string (FILE *fin, struct obstack *oout, int match)
|
copy_string2 (FILE *fin, struct obstack *oout, int match, int store)
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
obstack_1grow (oout, match);
|
if (store)
|
||||||
|
obstack_1grow (oout, match);
|
||||||
|
|
||||||
c = getc (fin);
|
c = getc (fin);
|
||||||
|
|
||||||
@@ -191,9 +194,30 @@ copy_string (FILE *fin, struct obstack *oout, int match)
|
|||||||
c = getc (fin);
|
c = getc (fin);
|
||||||
}
|
}
|
||||||
|
|
||||||
obstack_1grow (oout, c);
|
if (store)
|
||||||
|
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 |
|
| Dump the wannabee comment from IN to OUT1 and OUT2 (which can be |
|
||||||
@@ -402,9 +426,14 @@ copy_definition (void)
|
|||||||
/* -1 while reading a character if prev char was %. */
|
/* -1 while reading a character if prev char was %. */
|
||||||
int after_percent;
|
int after_percent;
|
||||||
|
|
||||||
|
#if 0
|
||||||
if (!no_lines_flag)
|
if (!no_lines_flag)
|
||||||
obstack_fgrow2 (&attrs_obstack, "#line %d %s\n",
|
{
|
||||||
lineno, quotearg_style (c_quoting_style, infile));
|
obstack_fgrow2 (&attrs_obstack, muscle_find ("linef"),
|
||||||
|
lineno, quotearg_style (c_quoting_style,
|
||||||
|
muscle_find("filename")));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
after_percent = 0;
|
after_percent = 0;
|
||||||
|
|
||||||
@@ -702,9 +731,9 @@ token_buffer);
|
|||||||
|
|
||||||
|
|
||||||
/*--------------------------------------------------------------.
|
/*--------------------------------------------------------------.
|
||||||
| Copy the union declaration into ATTRS_OBSTACK (and fdefines), |
|
| Copy the union declaration into the stype muscle |
|
||||||
| where it is made into the definition of YYSTYPE, the type of |
|
| (and fdefines), where it is made into the definition of |
|
||||||
| elements of the parser value stack. |
|
| YYSTYPE, the type of elements of the parser value stack. |
|
||||||
`--------------------------------------------------------------*/
|
`--------------------------------------------------------------*/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -712,19 +741,18 @@ parse_union_decl (void)
|
|||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
struct obstack union_obstack;
|
||||||
|
|
||||||
if (typed)
|
if (typed)
|
||||||
complain (_("multiple %s declarations"), "%union");
|
complain (_("multiple %s declarations"), "%union");
|
||||||
|
|
||||||
typed = 1;
|
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_1grow (&attrs_obstack, '\n');
|
||||||
|
|
||||||
obstack_sgrow (&attrs_obstack, "typedef union");
|
obstack_init (&union_obstack);
|
||||||
|
obstack_sgrow (&union_obstack, "union");
|
||||||
if (defines_flag)
|
if (defines_flag)
|
||||||
obstack_sgrow (&defines_obstack, "typedef union");
|
obstack_sgrow (&defines_obstack, "typedef union");
|
||||||
|
|
||||||
@@ -732,7 +760,6 @@ parse_union_decl (void)
|
|||||||
|
|
||||||
while (c != EOF)
|
while (c != EOF)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* If C contains '/', it is output by copy_comment (). */
|
/* If C contains '/', it is output by copy_comment (). */
|
||||||
if (c != '/')
|
if (c != '/')
|
||||||
{
|
{
|
||||||
@@ -748,7 +775,7 @@ parse_union_decl (void)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case '/':
|
case '/':
|
||||||
copy_comment2 (finput, &defines_obstack, &attrs_obstack);
|
copy_comment2 (finput, &defines_obstack, &union_obstack);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '{':
|
case '{':
|
||||||
@@ -761,19 +788,21 @@ parse_union_decl (void)
|
|||||||
count--;
|
count--;
|
||||||
if (count <= 0)
|
if (count <= 0)
|
||||||
{
|
{
|
||||||
obstack_sgrow (&attrs_obstack, " YYSTYPE;\n");
|
|
||||||
if (defines_flag)
|
if (defines_flag)
|
||||||
obstack_sgrow (&defines_obstack, " YYSTYPE;\n");
|
obstack_sgrow (&defines_obstack, " YYSTYPE;\n");
|
||||||
/* JF don't choke on trailing semi */
|
/* JF don't choke on trailing semi */
|
||||||
c = skip_white_space ();
|
c = skip_white_space ();
|
||||||
if (c != ';')
|
if (c != ';')
|
||||||
ungetc (c, finput);
|
ungetc (c, finput);
|
||||||
|
obstack_1grow (&union_obstack, 0);
|
||||||
|
muscle_insert ("stype", obstack_finish (&union_obstack));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
c = getc (finput);
|
c = getc (finput);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -874,60 +903,56 @@ parse_thong_decl (void)
|
|||||||
nsyms--;
|
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)
|
|
||||||
{
|
{
|
||||||
char buff[32];
|
int ch = ungetc (skip_white_space (), finput);
|
||||||
int c;
|
char* muscle_key;
|
||||||
int i;
|
char* muscle_value;
|
||||||
|
|
||||||
c = skip_white_space ();
|
/* Read key. */
|
||||||
|
if (!isalpha (ch) && ch != '_')
|
||||||
if (c != '"')
|
|
||||||
{
|
{
|
||||||
ungetc (c, finput);
|
complain (_("invalid %s declaration"), "%define");
|
||||||
complain (_("invalid %s declaration"), from);
|
skip_to_char ('%');
|
||||||
return NULL;
|
return;
|
||||||
}
|
}
|
||||||
|
copy_identifier (finput, &muscle_obstack);
|
||||||
|
obstack_1grow (&muscle_obstack, 0);
|
||||||
|
muscle_key = obstack_finish (&muscle_obstack);
|
||||||
|
|
||||||
c = getc (finput);
|
/* Read value. */
|
||||||
for (i = 0; (c >= '!') && (c <= '~'); i++)
|
ch = skip_white_space ();
|
||||||
|
if (ch != '"')
|
||||||
{
|
{
|
||||||
if (c == '"')
|
ungetc (ch, finput);
|
||||||
break;
|
if (ch != EOF)
|
||||||
|
|
||||||
if (c == '\\')
|
|
||||||
{
|
{
|
||||||
c = getc (finput);
|
complain (_("invalid %s declaration"), "%define");
|
||||||
if ((c < '!') && (c > '~'))
|
skip_to_char ('%');
|
||||||
break;
|
return;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
buff[i] = c;
|
fatal (_("Premature EOF after %s"), "\"");
|
||||||
c = getc (finput);
|
|
||||||
}
|
}
|
||||||
buff[i] = '\0';
|
copy_string2 (finput, &muscle_obstack, '"', 0);
|
||||||
|
obstack_1grow (&muscle_obstack, 0);
|
||||||
|
muscle_value = obstack_finish (&muscle_obstack);
|
||||||
|
|
||||||
if (c != '"')
|
/* Store the (key, value) pair in the environment. */
|
||||||
{
|
muscle_insert (muscle_key, muscle_value);
|
||||||
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 |
|
| Read from finput until `%%' is seen. Discard the `%%'. Handle |
|
||||||
@@ -998,6 +1023,14 @@ read_declarations (void)
|
|||||||
parse_assoc_decl (non_assoc);
|
parse_assoc_decl (non_assoc);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case tok_define:
|
||||||
|
parse_muscle_decl ();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case tok_skel:
|
||||||
|
parse_skel_decl ();
|
||||||
|
break;
|
||||||
|
|
||||||
case tok_noop:
|
case tok_noop:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1036,14 +1069,13 @@ copy_action (symbol_list *rule, int stack_offset)
|
|||||||
if (semantic_parser)
|
if (semantic_parser)
|
||||||
stack_offset = 0;
|
stack_offset = 0;
|
||||||
|
|
||||||
sprintf (buf, "\ncase %d:\n", nrules);
|
obstack_fgrow1 (&action_obstack, "\ncase %d:\n", nrules);
|
||||||
obstack_grow (&action_obstack, buf, strlen (buf));
|
|
||||||
|
|
||||||
if (!no_lines_flag)
|
if (!no_lines_flag)
|
||||||
{
|
{
|
||||||
sprintf (buf, "#line %d %s\n",
|
obstack_fgrow2 (&action_obstack, muscle_find ("linef"),
|
||||||
lineno, quotearg_style (c_quoting_style, infile));
|
lineno, quotearg_style (c_quoting_style,
|
||||||
obstack_grow (&action_obstack, buf, strlen (buf));
|
muscle_find ("filename")));
|
||||||
}
|
}
|
||||||
obstack_1grow (&action_obstack, '{');
|
obstack_1grow (&action_obstack, '{');
|
||||||
|
|
||||||
@@ -1129,8 +1161,9 @@ copy_guard (symbol_list *rule, int stack_offset)
|
|||||||
|
|
||||||
obstack_fgrow1 (&guard_obstack, "\ncase %d:\n", nrules);
|
obstack_fgrow1 (&guard_obstack, "\ncase %d:\n", nrules);
|
||||||
if (!no_lines_flag)
|
if (!no_lines_flag)
|
||||||
obstack_fgrow2 (&guard_obstack, "#line %d %s\n",
|
obstack_fgrow2 (&guard_obstack, muscle_find ("linef"),
|
||||||
lineno, quotearg_style (c_quoting_style, infile));
|
lineno, quotearg_style (c_quoting_style,
|
||||||
|
muscle_find ("filename")));
|
||||||
obstack_1grow (&guard_obstack, '{');
|
obstack_1grow (&guard_obstack, '{');
|
||||||
|
|
||||||
count = 0;
|
count = 0;
|
||||||
@@ -1581,22 +1614,6 @@ readgram (void)
|
|||||||
if (nrules == 0)
|
if (nrules == 0)
|
||||||
fatal (_("no rules in the input grammar"));
|
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. */
|
/* Report any undefined symbols and consider them nonterminals. */
|
||||||
|
|
||||||
for (bp = firstsymbol; bp; bp = bp->next)
|
for (bp = firstsymbol; bp; bp = bp->next)
|
||||||
@@ -1611,6 +1628,25 @@ readgram (void)
|
|||||||
|
|
||||||
ntokens = nsyms - nvars;
|
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 |
|
| For named tokens, but not literal ones, define the name. The |
|
||||||
@@ -1658,8 +1694,6 @@ output_token_defines (struct obstack *oout)
|
|||||||
above. --akim. */
|
above. --akim. */
|
||||||
obstack_fgrow2 (oout, "# define\tT%s\t%d\n", symbol, bp->value);
|
obstack_fgrow2 (oout, "# define\tT%s\t%d\n", symbol, bp->value);
|
||||||
}
|
}
|
||||||
|
|
||||||
obstack_1grow (oout, '\n');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1678,8 +1712,6 @@ packsymbols (void)
|
|||||||
int last_user_token_number;
|
int last_user_token_number;
|
||||||
static char DOLLAR[] = "$";
|
static char DOLLAR[] = "$";
|
||||||
|
|
||||||
/* int lossage = 0; JF set but not used */
|
|
||||||
|
|
||||||
tags = XCALLOC (char *, nsyms + 1);
|
tags = XCALLOC (char *, nsyms + 1);
|
||||||
tags[0] = DOLLAR;
|
tags[0] = DOLLAR;
|
||||||
user_toknums = XCALLOC (short, nsyms + 1);
|
user_toknums = XCALLOC (short, nsyms + 1);
|
||||||
@@ -1775,8 +1807,19 @@ packsymbols (void)
|
|||||||
|
|
||||||
error_token_number = errtoken->value;
|
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)
|
if (!no_parser_flag)
|
||||||
output_token_defines (&table_obstack);
|
output_token_defines (&table_obstack);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (startval->class == unknown_sym)
|
if (startval->class == unknown_sym)
|
||||||
fatal (_("the start symbol %s is undefined"), startval->tag);
|
fatal (_("the start symbol %s is undefined"), startval->tag);
|
||||||
@@ -1914,12 +1957,17 @@ reader (void)
|
|||||||
lex_init ();
|
lex_init ();
|
||||||
lineno = 1;
|
lineno = 1;
|
||||||
|
|
||||||
|
/* Initialize the muscle obstack. */
|
||||||
|
obstack_init (&muscle_obstack);
|
||||||
|
|
||||||
/* Initialize the symbol table. */
|
/* Initialize the symbol table. */
|
||||||
tabinit ();
|
tabinit ();
|
||||||
|
|
||||||
/* Construct the error token */
|
/* Construct the error token */
|
||||||
errtoken = getsym ("error");
|
errtoken = getsym ("error");
|
||||||
errtoken->class = token_sym;
|
errtoken->class = token_sym;
|
||||||
errtoken->user_token_number = 256; /* Value specified by POSIX. */
|
errtoken->user_token_number = 256; /* Value specified by POSIX. */
|
||||||
|
|
||||||
/* Construct a token that represents all undefined literal tokens.
|
/* Construct a token that represents all undefined literal tokens.
|
||||||
It is always token number 2. */
|
It is always token number 2. */
|
||||||
undeftoken = getsym ("$undefined.");
|
undeftoken = getsym ("$undefined.");
|
||||||
@@ -1929,60 +1977,20 @@ reader (void)
|
|||||||
/* Read the declaration section. Copy %{ ... %} groups to
|
/* Read the declaration section. Copy %{ ... %} groups to
|
||||||
TABLE_OBSTACK and FDEFINES file. Also notice any %token, %left,
|
TABLE_OBSTACK and FDEFINES file. Also notice any %token, %left,
|
||||||
etc. found there. */
|
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 ();
|
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
|
/* Read in the grammar, build grammar in list form. Write out
|
||||||
guards and actions. */
|
guards and actions. */
|
||||||
readgram ();
|
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,
|
/* Now we know whether we need the line-number stack. If we do,
|
||||||
write its type into the .tab.h file. */
|
write its type into the .tab.h file.
|
||||||
if (defines_flag)
|
This is no longer need with header skeleton. */
|
||||||
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
|
/* Assign the symbols their symbol numbers. Write #defines for the
|
||||||
token symbols into FDEFINES if requested. */
|
token symbols into FDEFINES if requested. */
|
||||||
packsymbols ();
|
packsymbols ();
|
||||||
/* Convert the grammar into the format described in gram.h. */
|
/* Convert the grammar into the format described in gram.h. */
|
||||||
packgram ();
|
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");
|
|
||||||
}
|
|
||||||
|
|||||||
+2
-2
@@ -30,10 +30,10 @@
|
|||||||
extern void reader PARAMS ((void));
|
extern void reader PARAMS ((void));
|
||||||
|
|
||||||
|
|
||||||
extern void reader_output_yylsp PARAMS ((struct obstack *));
|
|
||||||
|
|
||||||
extern int lineno;
|
extern int lineno;
|
||||||
extern char **tags;
|
extern char **tags;
|
||||||
extern short *user_toknums;
|
extern short *user_toknums;
|
||||||
|
|
||||||
|
extern struct obstack muscle_obstack;
|
||||||
|
|
||||||
#endif /* !READER_H_ */
|
#endif /* !READER_H_ */
|
||||||
|
|||||||
@@ -1,254 +0,0 @@
|
|||||||
# 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 = atlocal.in $(TESTSUITE_AT) testsuite
|
|
||||||
|
|
||||||
DISTCLEANFILES = atconfig atlocal bison package.m4
|
|
||||||
MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE)
|
|
||||||
|
|
||||||
TESTSUITE_AT = \
|
|
||||||
testsuite.at \
|
|
||||||
output.at calc.at regression.at
|
|
||||||
|
|
||||||
TESTSUITE = $(srcdir)/testsuite
|
|
||||||
|
|
||||||
AUTOM4TE = autom4te
|
|
||||||
AUTOTEST = $(AUTOM4TE) --language=autotest
|
|
||||||
subdir = tests
|
|
||||||
mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
|
|
||||||
CONFIG_HEADER = $(top_builddir)/config.h
|
|
||||||
CONFIG_CLEAN_FILES = bison
|
|
||||||
DIST_SOURCES =
|
|
||||||
DIST_COMMON = Makefile.am Makefile.in bison.in
|
|
||||||
all: all-am
|
|
||||||
|
|
||||||
.SUFFIXES:
|
|
||||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
|
||||||
cd $(top_srcdir) && \
|
|
||||||
$(AUTOMAKE) --gnu tests/Makefile
|
|
||||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
|
||||||
cd $(top_builddir) && \
|
|
||||||
CONFIG_HEADERS= CONFIG_LINKS= \
|
|
||||||
CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status
|
|
||||||
bison: $(top_builddir)/config.status bison.in
|
|
||||||
cd $(top_builddir) && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= CONFIG_LINKS= $(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
|
|
||||||
$(MAKE) $(AM_MAKEFLAGS) check-local
|
|
||||||
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]*
|
|
||||||
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
|
|
||||||
|
|
||||||
maintainer-clean-generic:
|
|
||||||
@echo "This command is intended for maintainers to use"
|
|
||||||
@echo "it deletes files that may require special tools to rebuild."
|
|
||||||
-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
|
|
||||||
clean: clean-am
|
|
||||||
|
|
||||||
clean-am: clean-generic clean-local 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: installcheck-local
|
|
||||||
|
|
||||||
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 check-local clean clean-generic \
|
|
||||||
clean-local 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 \
|
|
||||||
installcheck-local installdirs maintainer-clean \
|
|
||||||
maintainer-clean-generic mostlyclean mostlyclean-generic \
|
|
||||||
uninstall uninstall-am uninstall-info-am
|
|
||||||
|
|
||||||
$(srcdir)/$(TESTSUITE): $(TESTSUITE_AT)
|
|
||||||
$(AUTOTEST) -I $(srcdir) testsuite.at -o $@.tmp
|
|
||||||
mv $@.tmp $@
|
|
||||||
|
|
||||||
atconfig: $(top_builddir)/config.status
|
|
||||||
cd $(top_builddir) && ./config.status tests/$@
|
|
||||||
|
|
||||||
atlocal: $(srcdir)/atlocal.in $(top_builddir)/config.status
|
|
||||||
cd $(top_builddir) && ./config.status tests/$@
|
|
||||||
|
|
||||||
clean-local:
|
|
||||||
$(SHELL) $(TESTSUITE) --clean
|
|
||||||
|
|
||||||
check-local: atconfig atlocal $(TESTSUITE)
|
|
||||||
$(SHELL) $(TESTSUITE)
|
|
||||||
|
|
||||||
# Run the test suite on the *installed* tree.
|
|
||||||
installcheck-local:
|
|
||||||
$(SHELL) $(TESTSUITE) AUTOTEST_PATH=$(exec_prefix)/bin
|
|
||||||
# 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
-1
@@ -257,7 +257,7 @@ main (int argc, const char **argv)
|
|||||||
m4_define([AT_DATA_CALC_Y],
|
m4_define([AT_DATA_CALC_Y],
|
||||||
[_AT_DATA_CALC_Y($[1], $[2], $[3],
|
[_AT_DATA_CALC_Y($[1], $[2], $[3],
|
||||||
[m4_match([$1], [--yyerror-verbose],
|
[m4_match([$1], [--yyerror-verbose],
|
||||||
[[#define YYERROR_VERBOSE]])])])
|
[[#define YYERROR_VERBOSE 1]])])])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user