Compare commits
108 commits
upstream/1
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c14863878e | ||
|
|
72c0b016d0 | ||
|
|
464df78ca9 | ||
|
|
32e725a2c0 | ||
|
|
038933e7fc | ||
|
|
6932380624 | ||
|
|
10b8518c22 | ||
|
|
b511a112e6 | ||
|
|
bc8ca65653 | ||
|
|
87cef22421 | ||
|
|
aa10d88732 | ||
|
|
1813f3157e | ||
|
|
60cff3039b | ||
|
|
f5c641f5cc | ||
|
|
2ebbac3278 | ||
|
|
26033edb96 | ||
|
|
ff64081061 | ||
|
|
36f0d3c816 | ||
|
|
34d5939212 | ||
|
|
ecd1f6f67a | ||
|
|
02de1cd2f1 | ||
|
|
a04a7bcd67 | ||
|
|
f8e1f5a528 | ||
|
|
b28bb7b29b | ||
|
|
66e86a419b | ||
|
|
5969674c46 | ||
|
|
ac78971aab | ||
|
|
e0e55285b8 | ||
|
|
2989322746 | ||
|
|
81ce06b6c9 | ||
|
|
11d9efef1b | ||
|
|
1077a20a8c | ||
|
|
dcd38ec07d | ||
|
|
502cecde93 | ||
|
|
e537caa7b1 | ||
|
|
02fdd053f1 | ||
|
|
d08a5d8f0b | ||
|
|
a83439b023 | ||
|
|
eed44cd331 | ||
|
|
c167efd01b | ||
|
|
b33a93f7f6 | ||
|
|
088ed763df | ||
|
|
4d11e18342 | ||
|
|
45b80e247e | ||
|
|
1e23c12b1d | ||
|
|
c0d04cc168 | ||
|
|
a0bb9d443f | ||
|
|
cce24e0be4 | ||
|
|
e53cefdf85 | ||
|
|
413f90b815 | ||
|
|
d7b49da4e6 | ||
|
|
c09679c3ba | ||
|
|
854118c85f | ||
|
|
a7e5217cf7 | ||
|
|
8dab3abc97 | ||
|
|
e8daab5950 | ||
|
|
37abcfc1ea | ||
|
|
6698135e07 | ||
|
|
4343b5a2fa | ||
|
|
a797a94c81 | ||
|
|
cc0493ea17 | ||
|
|
d131e9a06f | ||
|
|
06acdce080 | ||
|
|
e5d35e092f | ||
|
|
8ce89f6ef0 | ||
|
|
c63e635d89 | ||
|
|
c078db2fd8 | ||
|
|
b9a1c8df12 | ||
|
|
94e6f906d5 | ||
|
|
bb1aebd963 | ||
|
|
5a84bb737c | ||
|
|
d09cb3d82a | ||
|
|
2ad1dc3fd7 | ||
|
|
3f653aaa2d | ||
|
|
d906f6f9b0 | ||
|
|
f01c927470 | ||
|
|
3f0ae998e8 | ||
|
|
dc781ea51d | ||
|
|
0fd2ac248d | ||
|
|
2006358f32 | ||
|
|
3cfe4d82fb | ||
|
|
c54d214bf2 | ||
|
|
0dd8a42607 | ||
|
|
08ed40f17e | ||
|
|
7e336e415f | ||
|
|
b96e4c6b19 | ||
|
|
23bd9e9d53 | ||
|
|
445df16805 | ||
|
|
fa871d431d | ||
|
|
4812d2eb3d | ||
|
|
5d002cc66a | ||
|
|
19f25e5e7d | ||
|
|
6276954b04 | ||
|
|
74be525b2f | ||
|
|
77e8278660 | ||
|
|
be5fbb7e93 | ||
|
|
b030f7d21e | ||
|
|
bcb4501d84 | ||
|
|
a18165833b | ||
|
|
c473eb1653 | ||
|
|
2cb3185582 | ||
|
|
23459e1237 | ||
|
|
392ff555ea | ||
|
|
458d509a4f | ||
|
|
c12028eeaa | ||
|
|
64f9c3df1b | ||
|
|
6f5ff440c9 | ||
|
|
0f3c45c5cc |
238 changed files with 52504 additions and 44235 deletions
324
ABOUT-NLS
324
ABOUT-NLS
|
|
@ -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 `sv-request@li.org', 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 `translation@iro.umontreal.ca' 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
|
|
||||||
`translation@iro.umontreal.ca' to make the `.pot' files available to
|
|
||||||
the translation teams.
|
|
||||||
|
|
||||||
18
AUTHORS
18
AUTHORS
|
|
@ -1,11 +1,25 @@
|
||||||
Main tinc authors:
|
Main tinc authors:
|
||||||
Guus Sliepen <guus@sliepen.warande.net>
|
- Guus Sliepen <guus@tinc-vpn.org>
|
||||||
Ivo Timmermans <itimmermans@bigfoot.com>
|
- Ivo Timmermans (inactive)
|
||||||
|
|
||||||
|
Significant contributions from:
|
||||||
|
- Michael Tokarev <mjt@tls.msk.ru>
|
||||||
|
- Florian Forster <octo@verplant.org>
|
||||||
|
- Grzegorz Dymarek <gregd72002@googlemail.com>
|
||||||
|
- Max Rijevski <maksuf@gmail.com>
|
||||||
|
- Scott Lamb <slamb@slamb.org>
|
||||||
|
- Julien Muchembled <jm@jmuchemb.eu>
|
||||||
|
- Timothy Redaelli <timothy@redaelli.eu>
|
||||||
|
- Brandon Black <blblack@gmail.com>
|
||||||
|
- Loïc Grenié <loic.grenie@gmail.com>
|
||||||
|
|
||||||
These files are from other sources:
|
These files are from other sources:
|
||||||
* lib/pidfile.h and lib/pidfile.c are by Martin Schulze, taken from
|
* lib/pidfile.h and lib/pidfile.c are by Martin Schulze, taken from
|
||||||
the syslog 1.3 sources.
|
the syslog 1.3 sources.
|
||||||
|
|
||||||
|
* src/bsd/tunemu.c and tunemu.h are by Friedrich Schöller
|
||||||
|
<friedrich.schoeller@gmail.com>
|
||||||
|
|
||||||
Also some of the macro files in the directory m4, and their
|
Also some of the macro files in the directory m4, and their
|
||||||
accompanying files in lib, were taken from GNU fileutils.
|
accompanying files in lib, were taken from GNU fileutils.
|
||||||
|
|
||||||
|
|
|
||||||
82
COPYING
82
COPYING
|
|
@ -1,8 +1,17 @@
|
||||||
|
Copyright (C) 1998-2019 Ivo Timmermans, Guus Sliepen and others.
|
||||||
|
See the AUTHORS file for a complete list.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it under
|
||||||
|
the terms of the GNU General Public License as published by the Free Software
|
||||||
|
Foundation; either version 2 of the License, or (at your option) any later
|
||||||
|
version.
|
||||||
|
|
||||||
|
|
||||||
GNU GENERAL PUBLIC LICENSE
|
GNU GENERAL PUBLIC LICENSE
|
||||||
Version 2, June 1991
|
Version 2, June 1991
|
||||||
|
|
||||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||||
675 Mass Ave, Cambridge, MA 02139, USA
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
of this license document, but changing it is not allowed.
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
|
@ -15,7 +24,7 @@ software--to make sure the software is free for all its users. This
|
||||||
General Public License applies to most of the Free Software
|
General Public License applies to most of the Free Software
|
||||||
Foundation's software and to any other program whose authors commit to
|
Foundation's software and to any other program whose authors commit to
|
||||||
using it. (Some other Free Software Foundation software is covered by
|
using it. (Some other Free Software Foundation software is covered by
|
||||||
the GNU Library General Public License instead.) You can apply it to
|
the GNU Lesser General Public License instead.) You can apply it to
|
||||||
your programs, too.
|
your programs, too.
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom, not
|
When we speak of free software, we are referring to freedom, not
|
||||||
|
|
@ -55,7 +64,7 @@ patent must be licensed for everyone's free use or not licensed at all.
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
The precise terms and conditions for copying, distribution and
|
||||||
modification follow.
|
modification follow.
|
||||||
|
|
||||||
GNU GENERAL PUBLIC LICENSE
|
GNU GENERAL PUBLIC LICENSE
|
||||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
|
@ -110,7 +119,7 @@ above, provided that you also meet all of these conditions:
|
||||||
License. (Exception: if the Program itself is interactive but
|
License. (Exception: if the Program itself is interactive but
|
||||||
does not normally print such an announcement, your work based on
|
does not normally print such an announcement, your work based on
|
||||||
the Program is not required to print an announcement.)
|
the Program is not required to print an announcement.)
|
||||||
|
|
||||||
These requirements apply to the modified work as a whole. If
|
These requirements apply to the modified work as a whole. If
|
||||||
identifiable sections of that work are not derived from the Program,
|
identifiable sections of that work are not derived from the Program,
|
||||||
and can be reasonably considered independent and separate works in
|
and can be reasonably considered independent and separate works in
|
||||||
|
|
@ -168,7 +177,7 @@ access to copy from a designated place, then offering equivalent
|
||||||
access to copy the source code from the same place counts as
|
access to copy the source code from the same place counts as
|
||||||
distribution of the source code, even though third parties are not
|
distribution of the source code, even though third parties are not
|
||||||
compelled to copy the source along with the object code.
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
4. You may not copy, modify, sublicense, or distribute the Program
|
4. You may not copy, modify, sublicense, or distribute the Program
|
||||||
except as expressly provided under this License. Any attempt
|
except as expressly provided under this License. Any attempt
|
||||||
otherwise to copy, modify, sublicense or distribute the Program is
|
otherwise to copy, modify, sublicense or distribute the Program is
|
||||||
|
|
@ -225,7 +234,7 @@ impose that choice.
|
||||||
|
|
||||||
This section is intended to make thoroughly clear what is believed to
|
This section is intended to make thoroughly clear what is believed to
|
||||||
be a consequence of the rest of this License.
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
8. If the distribution and/or use of the Program is restricted in
|
8. If the distribution and/or use of the Program is restricted in
|
||||||
certain countries either by patents or by copyrighted interfaces, the
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
original copyright holder who places the Program under this License
|
original copyright holder who places the Program under this License
|
||||||
|
|
@ -278,62 +287,3 @@ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||||
POSSIBILITY OF SUCH DAMAGES.
|
POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
Appendix: How to Apply These Terms to Your New Programs
|
|
||||||
|
|
||||||
If you develop a new program, and you want it to be of the greatest
|
|
||||||
possible use to the public, the best way to achieve this is to make it
|
|
||||||
free software which everyone can redistribute and change under these terms.
|
|
||||||
|
|
||||||
To do so, attach the following notices to the program. It is safest
|
|
||||||
to attach them to the start of each source file to most effectively
|
|
||||||
convey the exclusion of warranty; and each file should have at least
|
|
||||||
the "copyright" line and a pointer to where the full notice is found.
|
|
||||||
|
|
||||||
<one line to give the program's name and a brief idea of what it does.>
|
|
||||||
Copyright (C) 19yy <name of author>
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
|
||||||
|
|
||||||
If the program is interactive, make it output a short notice like this
|
|
||||||
when it starts in an interactive mode:
|
|
||||||
|
|
||||||
Gnomovision version 69, Copyright (C) 19yy name of author
|
|
||||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
|
||||||
This is free software, and you are welcome to redistribute it
|
|
||||||
under certain conditions; type `show c' for details.
|
|
||||||
|
|
||||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
|
||||||
parts of the General Public License. Of course, the commands you use may
|
|
||||||
be called something other than `show w' and `show c'; they could even be
|
|
||||||
mouse-clicks or menu items--whatever suits your program.
|
|
||||||
|
|
||||||
You should also get your employer (if you work as a programmer) or your
|
|
||||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
|
||||||
necessary. Here is a sample; alter the names:
|
|
||||||
|
|
||||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
|
||||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
|
||||||
|
|
||||||
<signature of Ty Coon>, 1 April 1989
|
|
||||||
Ty Coon, President of Vice
|
|
||||||
|
|
||||||
This General Public License does not permit incorporating your program into
|
|
||||||
proprietary programs. If your program is a subroutine library, you may
|
|
||||||
consider it more useful to permit linking proprietary applications with the
|
|
||||||
library. If this is what you want to do, use the GNU Library General
|
|
||||||
Public License instead of this License.
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,19 @@
|
||||||
This program is released under the GPL with the additional exemption
|
The following applies to tinc:
|
||||||
that compiling, linking, and/or using OpenSSL is allowed. You may
|
|
||||||
provide binary packages linked to the OpenSSL libraries, provided that
|
This program is released under the GPL with the additional exemption that
|
||||||
all other requirements of the GPL are met.
|
compiling, linking, and/or using OpenSSL is allowed. You may provide binary
|
||||||
|
packages linked to the OpenSSL libraries, provided that all other requirements
|
||||||
|
of the GPL are met.
|
||||||
|
|
||||||
|
The following applies to the LZO library:
|
||||||
|
|
||||||
|
Hereby I grant a special exception to the tinc VPN project
|
||||||
|
(http://tinc.nl.linux.org/) to link the LZO library with the OpenSSL library
|
||||||
|
(http://www.openssl.org).
|
||||||
|
|
||||||
|
Markus F.X.J. Oberhumer
|
||||||
|
|
||||||
|
When tinc is compiled with the --enable-tunemu option, the resulting binary
|
||||||
|
falls under the GPL version 3 or later.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
412
INSTALL
412
INSTALL
|
|
@ -1,182 +1,368 @@
|
||||||
|
Installation Instructions
|
||||||
|
*************************
|
||||||
|
|
||||||
|
Copyright (C) 1994-1996, 1999-2002, 2004-2016 Free Software
|
||||||
|
Foundation, Inc.
|
||||||
|
|
||||||
|
Copying and distribution of this file, with or without modification,
|
||||||
|
are permitted in any medium without royalty provided the copyright
|
||||||
|
notice and this notice are preserved. This file is offered as-is,
|
||||||
|
without warranty of any kind.
|
||||||
|
|
||||||
Basic Installation
|
Basic Installation
|
||||||
==================
|
==================
|
||||||
|
|
||||||
These are generic installation instructions.
|
Briefly, the shell command './configure && make && make install'
|
||||||
|
should configure, build, and install this package. The following
|
||||||
|
more-detailed instructions are generic; see the 'README' file for
|
||||||
|
instructions specific to this package. Some packages provide this
|
||||||
|
'INSTALL' file but do not implement all of the features documented
|
||||||
|
below. The lack of an optional feature in a given package is not
|
||||||
|
necessarily a bug. More recommendations for GNU packages can be found
|
||||||
|
in *note Makefile Conventions: (standards)Makefile Conventions.
|
||||||
|
|
||||||
The `configure' shell script attempts to guess correct values for
|
The 'configure' shell script attempts to guess correct values for
|
||||||
various system-dependent variables used during compilation. It uses
|
various system-dependent variables used during compilation. It uses
|
||||||
those values to create a `Makefile' in each directory of the package.
|
those values to create a 'Makefile' in each directory of the package.
|
||||||
It may also create one or more `.h' files containing system-dependent
|
It may also create one or more '.h' files containing system-dependent
|
||||||
definitions. Finally, it creates a shell script `config.status' that
|
definitions. Finally, it creates a shell script 'config.status' that
|
||||||
you can run in the future to recreate the current configuration, a file
|
you can run in the future to recreate the current configuration, and a
|
||||||
`config.cache' that saves the results of its tests to speed up
|
file 'config.log' containing compiler output (useful mainly for
|
||||||
reconfiguring, and a file `config.log' containing compiler output
|
debugging 'configure').
|
||||||
(useful mainly for debugging `configure').
|
|
||||||
|
It can also use an optional file (typically called 'config.cache' and
|
||||||
|
enabled with '--cache-file=config.cache' or simply '-C') that saves the
|
||||||
|
results of its tests to speed up reconfiguring. Caching is disabled by
|
||||||
|
default to prevent problems with accidental use of stale cache files.
|
||||||
|
|
||||||
If you need to do unusual things to compile the package, please try
|
If you need to do unusual things to compile the package, please try
|
||||||
to figure out how `configure' could check whether to do them, and mail
|
to figure out how 'configure' could check whether to do them, and mail
|
||||||
diffs or instructions to the address given in the `README' so they can
|
diffs or instructions to the address given in the 'README' so they can
|
||||||
be considered for the next release. If at some point `config.cache'
|
be considered for the next release. If you are using the cache, and at
|
||||||
contains results you don't want to keep, you may remove or edit it.
|
some point 'config.cache' contains results you don't want to keep, you
|
||||||
|
may remove or edit it.
|
||||||
|
|
||||||
The file `configure.in' is used to create `configure' by a program
|
The file 'configure.ac' (or 'configure.in') is used to create
|
||||||
called `autoconf'. You only need `configure.in' if you want to change
|
'configure' by a program called 'autoconf'. You need 'configure.ac' if
|
||||||
it or regenerate `configure' using a newer version of `autoconf'.
|
you want to change it or regenerate 'configure' using a newer version of
|
||||||
|
'autoconf'.
|
||||||
|
|
||||||
The simplest way to compile this package is:
|
The simplest way to compile this package is:
|
||||||
|
|
||||||
1. `cd' to the directory containing the package's source code and type
|
1. 'cd' to the directory containing the package's source code and type
|
||||||
`./configure' to configure the package for your system. If you're
|
'./configure' to configure the package for your system.
|
||||||
using `csh' on an old version of System V, you might need to type
|
|
||||||
`sh ./configure' instead to prevent `csh' from trying to execute
|
|
||||||
`configure' itself.
|
|
||||||
|
|
||||||
Running `configure' takes awhile. While running, it prints some
|
Running 'configure' might take a while. While running, it prints
|
||||||
messages telling which features it is checking for.
|
some messages telling which features it is checking for.
|
||||||
|
|
||||||
2. Type `make' to compile the package.
|
2. Type 'make' to compile the package.
|
||||||
|
|
||||||
3. Optionally, type `make check' to run any self-tests that come with
|
3. Optionally, type 'make check' to run any self-tests that come with
|
||||||
the package.
|
the package, generally using the just-built uninstalled binaries.
|
||||||
|
|
||||||
4. Type `make install' to install the programs and any data files and
|
4. Type 'make install' to install the programs and any data files and
|
||||||
documentation.
|
documentation. When installing into a prefix owned by root, it is
|
||||||
|
recommended that the package be configured and built as a regular
|
||||||
|
user, and only the 'make install' phase executed with root
|
||||||
|
privileges.
|
||||||
|
|
||||||
5. You can remove the program binaries and object files from the
|
5. Optionally, type 'make installcheck' to repeat any self-tests, but
|
||||||
source code directory by typing `make clean'. To also remove the
|
this time using the binaries in their final installed location.
|
||||||
files that `configure' created (so you can compile the package for
|
This target does not install anything. Running this target as a
|
||||||
a different kind of computer), type `make distclean'. There is
|
regular user, particularly if the prior 'make install' required
|
||||||
also a `make maintainer-clean' target, but that is intended mainly
|
root privileges, verifies that the installation completed
|
||||||
|
correctly.
|
||||||
|
|
||||||
|
6. You can remove the program binaries and object files from the
|
||||||
|
source code directory by typing 'make clean'. To also remove the
|
||||||
|
files that 'configure' created (so you can compile the package for
|
||||||
|
a different kind of computer), type 'make distclean'. There is
|
||||||
|
also a 'make maintainer-clean' target, but that is intended mainly
|
||||||
for the package's developers. If you use it, you may have to get
|
for the package's developers. If you use it, you may have to get
|
||||||
all sorts of other programs in order to regenerate files that came
|
all sorts of other programs in order to regenerate files that came
|
||||||
with the distribution.
|
with the distribution.
|
||||||
|
|
||||||
|
7. Often, you can also type 'make uninstall' to remove the installed
|
||||||
|
files again. In practice, not all packages have tested that
|
||||||
|
uninstallation works correctly, even though it is required by the
|
||||||
|
GNU Coding Standards.
|
||||||
|
|
||||||
|
8. Some packages, particularly those that use Automake, provide 'make
|
||||||
|
distcheck', which can by used by developers to test that all other
|
||||||
|
targets like 'make install' and 'make uninstall' work correctly.
|
||||||
|
This target is generally not run by end users.
|
||||||
|
|
||||||
Compilers and Options
|
Compilers and Options
|
||||||
=====================
|
=====================
|
||||||
|
|
||||||
Some systems require unusual options for compilation or linking that
|
Some systems require unusual options for compilation or linking that
|
||||||
the `configure' script does not know about. You can give `configure'
|
the 'configure' script does not know about. Run './configure --help'
|
||||||
initial values for variables by setting them in the environment. Using
|
for details on some of the pertinent environment variables.
|
||||||
a Bourne-compatible shell, you can do that on the command line like
|
|
||||||
this:
|
|
||||||
CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure
|
|
||||||
|
|
||||||
Or on systems that have the `env' program, you can do it like this:
|
You can give 'configure' initial values for configuration parameters
|
||||||
env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure
|
by setting variables in the command line or in the environment. Here is
|
||||||
|
an example:
|
||||||
|
|
||||||
|
./configure CC=c99 CFLAGS=-g LIBS=-lposix
|
||||||
|
|
||||||
|
*Note Defining Variables::, for more details.
|
||||||
|
|
||||||
Compiling For Multiple Architectures
|
Compiling For Multiple Architectures
|
||||||
====================================
|
====================================
|
||||||
|
|
||||||
You can compile the package for more than one kind of computer at the
|
You can compile the package for more than one kind of computer at the
|
||||||
same time, by placing the object files for each architecture in their
|
same time, by placing the object files for each architecture in their
|
||||||
own directory. To do this, you must use a version of `make' that
|
own directory. To do this, you can use GNU 'make'. 'cd' to the
|
||||||
supports the `VPATH' variable, such as GNU `make'. `cd' to the
|
|
||||||
directory where you want the object files and executables to go and run
|
directory where you want the object files and executables to go and run
|
||||||
the `configure' script. `configure' automatically checks for the
|
the 'configure' script. 'configure' automatically checks for the source
|
||||||
source code in the directory that `configure' is in and in `..'.
|
code in the directory that 'configure' is in and in '..'. This is known
|
||||||
|
as a "VPATH" build.
|
||||||
|
|
||||||
If you have to use a `make' that does not supports the `VPATH'
|
With a non-GNU 'make', it is safer to compile the package for one
|
||||||
variable, you have to compile the package for one architecture at a time
|
architecture at a time in the source code directory. After you have
|
||||||
in the source code directory. After you have installed the package for
|
installed the package for one architecture, use 'make distclean' before
|
||||||
one architecture, use `make distclean' before reconfiguring for another
|
reconfiguring for another architecture.
|
||||||
architecture.
|
|
||||||
|
On MacOS X 10.5 and later systems, you can create libraries and
|
||||||
|
executables that work on multiple system types--known as "fat" or
|
||||||
|
"universal" binaries--by specifying multiple '-arch' options to the
|
||||||
|
compiler but only a single '-arch' option to the preprocessor. Like
|
||||||
|
this:
|
||||||
|
|
||||||
|
./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
|
||||||
|
CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
|
||||||
|
CPP="gcc -E" CXXCPP="g++ -E"
|
||||||
|
|
||||||
|
This is not guaranteed to produce working output in all cases, you
|
||||||
|
may have to build one architecture at a time and combine the results
|
||||||
|
using the 'lipo' tool if you have problems.
|
||||||
|
|
||||||
Installation Names
|
Installation Names
|
||||||
==================
|
==================
|
||||||
|
|
||||||
By default, `make install' will install the package's files in
|
By default, 'make install' installs the package's commands under
|
||||||
`/usr/local/bin', `/usr/local/man', etc. You can specify an
|
'/usr/local/bin', include files under '/usr/local/include', etc. You
|
||||||
installation prefix other than `/usr/local' by giving `configure' the
|
can specify an installation prefix other than '/usr/local' by giving
|
||||||
option `--prefix=PATH'.
|
'configure' the option '--prefix=PREFIX', where PREFIX must be an
|
||||||
|
absolute file name.
|
||||||
|
|
||||||
You can specify separate installation prefixes for
|
You can specify separate installation prefixes for
|
||||||
architecture-specific files and architecture-independent files. If you
|
architecture-specific files and architecture-independent files. If you
|
||||||
give `configure' the option `--exec-prefix=PATH', the package will use
|
pass the option '--exec-prefix=PREFIX' to 'configure', the package uses
|
||||||
PATH as the prefix for installing programs and libraries.
|
PREFIX as the prefix for installing programs and libraries.
|
||||||
Documentation and other data files will still use the regular prefix.
|
Documentation and other data files still use the regular prefix.
|
||||||
|
|
||||||
In addition, if you use an unusual directory layout you can give
|
In addition, if you use an unusual directory layout you can give
|
||||||
options like `--bindir=PATH' to specify different values for particular
|
options like '--bindir=DIR' to specify different values for particular
|
||||||
kinds of files. Run `configure --help' for a list of the directories
|
kinds of files. Run 'configure --help' for a list of the directories
|
||||||
you can set and what kinds of files go in them.
|
you can set and what kinds of files go in them. In general, the default
|
||||||
|
for these options is expressed in terms of '${prefix}', so that
|
||||||
|
specifying just '--prefix' will affect all of the other directory
|
||||||
|
specifications that were not explicitly provided.
|
||||||
|
|
||||||
If the package supports it, you can cause programs to be installed
|
The most portable way to affect installation locations is to pass the
|
||||||
with an extra prefix or suffix on their names by giving `configure' the
|
correct locations to 'configure'; however, many packages provide one or
|
||||||
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
|
both of the following shortcuts of passing variable assignments to the
|
||||||
|
'make install' command line to change installation locations without
|
||||||
|
having to reconfigure or recompile.
|
||||||
|
|
||||||
|
The first method involves providing an override variable for each
|
||||||
|
affected directory. For example, 'make install
|
||||||
|
prefix=/alternate/directory' will choose an alternate location for all
|
||||||
|
directory configuration variables that were expressed in terms of
|
||||||
|
'${prefix}'. Any directories that were specified during 'configure',
|
||||||
|
but not in terms of '${prefix}', must each be overridden at install time
|
||||||
|
for the entire installation to be relocated. The approach of makefile
|
||||||
|
variable overrides for each directory variable is required by the GNU
|
||||||
|
Coding Standards, and ideally causes no recompilation. However, some
|
||||||
|
platforms have known limitations with the semantics of shared libraries
|
||||||
|
that end up requiring recompilation when using this method, particularly
|
||||||
|
noticeable in packages that use GNU Libtool.
|
||||||
|
|
||||||
|
The second method involves providing the 'DESTDIR' variable. For
|
||||||
|
example, 'make install DESTDIR=/alternate/directory' will prepend
|
||||||
|
'/alternate/directory' before all installation names. The approach of
|
||||||
|
'DESTDIR' overrides is not required by the GNU Coding Standards, and
|
||||||
|
does not work on platforms that have drive letters. On the other hand,
|
||||||
|
it does better at avoiding recompilation issues, and works well even
|
||||||
|
when some directory options were not specified in terms of '${prefix}'
|
||||||
|
at 'configure' time.
|
||||||
|
|
||||||
Optional Features
|
Optional Features
|
||||||
=================
|
=================
|
||||||
|
|
||||||
Some packages pay attention to `--enable-FEATURE' options to
|
If the package supports it, you can cause programs to be installed
|
||||||
`configure', where FEATURE indicates an optional part of the package.
|
with an extra prefix or suffix on their names by giving 'configure' the
|
||||||
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
|
option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'.
|
||||||
is something like `gnu-as' or `x' (for the X Window System). The
|
|
||||||
`README' should mention any `--enable-' and `--with-' options that the
|
Some packages pay attention to '--enable-FEATURE' options to
|
||||||
|
'configure', where FEATURE indicates an optional part of the package.
|
||||||
|
They may also pay attention to '--with-PACKAGE' options, where PACKAGE
|
||||||
|
is something like 'gnu-as' or 'x' (for the X Window System). The
|
||||||
|
'README' should mention any '--enable-' and '--with-' options that the
|
||||||
package recognizes.
|
package recognizes.
|
||||||
|
|
||||||
For packages that use the X Window System, `configure' can usually
|
For packages that use the X Window System, 'configure' can usually
|
||||||
find the X include and library files automatically, but if it doesn't,
|
find the X include and library files automatically, but if it doesn't,
|
||||||
you can use the `configure' options `--x-includes=DIR' and
|
you can use the 'configure' options '--x-includes=DIR' and
|
||||||
`--x-libraries=DIR' to specify their locations.
|
'--x-libraries=DIR' to specify their locations.
|
||||||
|
|
||||||
|
Some packages offer the ability to configure how verbose the
|
||||||
|
execution of 'make' will be. For these packages, running './configure
|
||||||
|
--enable-silent-rules' sets the default to minimal output, which can be
|
||||||
|
overridden with 'make V=1'; while running './configure
|
||||||
|
--disable-silent-rules' sets the default to verbose, which can be
|
||||||
|
overridden with 'make V=0'.
|
||||||
|
|
||||||
|
Particular systems
|
||||||
|
==================
|
||||||
|
|
||||||
|
On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC
|
||||||
|
is not installed, it is recommended to use the following options in
|
||||||
|
order to use an ANSI C compiler:
|
||||||
|
|
||||||
|
./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
|
||||||
|
|
||||||
|
and if that doesn't work, install pre-built binaries of GCC for HP-UX.
|
||||||
|
|
||||||
|
HP-UX 'make' updates targets which have the same time stamps as their
|
||||||
|
prerequisites, which makes it generally unusable when shipped generated
|
||||||
|
files such as 'configure' are involved. Use GNU 'make' instead.
|
||||||
|
|
||||||
|
On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
|
||||||
|
parse its '<wchar.h>' header file. The option '-nodtk' can be used as a
|
||||||
|
workaround. If GNU CC is not installed, it is therefore recommended to
|
||||||
|
try
|
||||||
|
|
||||||
|
./configure CC="cc"
|
||||||
|
|
||||||
|
and if that doesn't work, try
|
||||||
|
|
||||||
|
./configure CC="cc -nodtk"
|
||||||
|
|
||||||
|
On Solaris, don't put '/usr/ucb' early in your 'PATH'. This
|
||||||
|
directory contains several dysfunctional programs; working variants of
|
||||||
|
these programs are available in '/usr/bin'. So, if you need '/usr/ucb'
|
||||||
|
in your 'PATH', put it _after_ '/usr/bin'.
|
||||||
|
|
||||||
|
On Haiku, software installed for all users goes in '/boot/common',
|
||||||
|
not '/usr/local'. It is recommended to use the following options:
|
||||||
|
|
||||||
|
./configure --prefix=/boot/common
|
||||||
|
|
||||||
Specifying the System Type
|
Specifying the System Type
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
There may be some features `configure' can not figure out
|
There may be some features 'configure' cannot figure out
|
||||||
automatically, but needs to determine by the type of host the package
|
automatically, but needs to determine by the type of machine the package
|
||||||
will run on. Usually `configure' can figure that out, but if it prints
|
will run on. Usually, assuming the package is built to be run on the
|
||||||
a message saying it can not guess the host type, give it the
|
_same_ architectures, 'configure' can figure that out, but if it prints
|
||||||
`--host=TYPE' option. TYPE can either be a short name for the system
|
a message saying it cannot guess the machine type, give it the
|
||||||
type, such as `sun4', or a canonical name with three fields:
|
'--build=TYPE' option. TYPE can either be a short name for the system
|
||||||
|
type, such as 'sun4', or a canonical name which has the form:
|
||||||
|
|
||||||
CPU-COMPANY-SYSTEM
|
CPU-COMPANY-SYSTEM
|
||||||
|
|
||||||
See the file `config.sub' for the possible values of each field. If
|
where SYSTEM can have one of these forms:
|
||||||
`config.sub' isn't included in this package, then this package doesn't
|
|
||||||
need to know the host type.
|
|
||||||
|
|
||||||
If you are building compiler tools for cross-compiling, you can also
|
OS
|
||||||
use the `--target=TYPE' option to select the type of system they will
|
KERNEL-OS
|
||||||
produce code for and the `--build=TYPE' option to select the type of
|
|
||||||
system on which you are compiling the package.
|
See the file 'config.sub' for the possible values of each field. If
|
||||||
|
'config.sub' isn't included in this package, then this package doesn't
|
||||||
|
need to know the machine type.
|
||||||
|
|
||||||
|
If you are _building_ compiler tools for cross-compiling, you should
|
||||||
|
use the option '--target=TYPE' to select the type of system they will
|
||||||
|
produce code for.
|
||||||
|
|
||||||
|
If you want to _use_ a cross compiler, that generates code for a
|
||||||
|
platform different from the build platform, you should specify the
|
||||||
|
"host" platform (i.e., that on which the generated programs will
|
||||||
|
eventually be run) with '--host=TYPE'.
|
||||||
|
|
||||||
Sharing Defaults
|
Sharing Defaults
|
||||||
================
|
================
|
||||||
|
|
||||||
If you want to set default values for `configure' scripts to share,
|
If you want to set default values for 'configure' scripts to share,
|
||||||
you can create a site shell script called `config.site' that gives
|
you can create a site shell script called 'config.site' that gives
|
||||||
default values for variables like `CC', `cache_file', and `prefix'.
|
default values for variables like 'CC', 'cache_file', and 'prefix'.
|
||||||
`configure' looks for `PREFIX/share/config.site' if it exists, then
|
'configure' looks for 'PREFIX/share/config.site' if it exists, then
|
||||||
`PREFIX/etc/config.site' if it exists. Or, you can set the
|
'PREFIX/etc/config.site' if it exists. Or, you can set the
|
||||||
`CONFIG_SITE' environment variable to the location of the site script.
|
'CONFIG_SITE' environment variable to the location of the site script.
|
||||||
A warning: not all `configure' scripts look for a site script.
|
A warning: not all 'configure' scripts look for a site script.
|
||||||
|
|
||||||
Operation Controls
|
Defining Variables
|
||||||
==================
|
==================
|
||||||
|
|
||||||
`configure' recognizes the following options to control how it
|
Variables not defined in a site shell script can be set in the
|
||||||
|
environment passed to 'configure'. However, some packages may run
|
||||||
|
configure again during the build, and the customized values of these
|
||||||
|
variables may be lost. In order to avoid this problem, you should set
|
||||||
|
them in the 'configure' command line, using 'VAR=value'. For example:
|
||||||
|
|
||||||
|
./configure CC=/usr/local2/bin/gcc
|
||||||
|
|
||||||
|
causes the specified 'gcc' to be used as the C compiler (unless it is
|
||||||
|
overridden in the site shell script).
|
||||||
|
|
||||||
|
Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an
|
||||||
|
Autoconf limitation. Until the limitation is lifted, you can use this
|
||||||
|
workaround:
|
||||||
|
|
||||||
|
CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
|
||||||
|
|
||||||
|
'configure' Invocation
|
||||||
|
======================
|
||||||
|
|
||||||
|
'configure' recognizes the following options to control how it
|
||||||
operates.
|
operates.
|
||||||
|
|
||||||
`--cache-file=FILE'
|
'--help'
|
||||||
Use and save the results of the tests in FILE instead of
|
'-h'
|
||||||
`./config.cache'. Set FILE to `/dev/null' to disable caching, for
|
Print a summary of all of the options to 'configure', and exit.
|
||||||
debugging `configure'.
|
|
||||||
|
|
||||||
`--help'
|
'--help=short'
|
||||||
Print a summary of the options to `configure', and exit.
|
'--help=recursive'
|
||||||
|
Print a summary of the options unique to this package's
|
||||||
|
'configure', and exit. The 'short' variant lists options used only
|
||||||
|
in the top level, while the 'recursive' variant lists options also
|
||||||
|
present in any nested packages.
|
||||||
|
|
||||||
`--quiet'
|
'--version'
|
||||||
`--silent'
|
'-V'
|
||||||
`-q'
|
Print the version of Autoconf used to generate the 'configure'
|
||||||
Do not print messages saying which checks are being made. To
|
|
||||||
suppress all normal output, redirect it to `/dev/null' (any error
|
|
||||||
messages will still be shown).
|
|
||||||
|
|
||||||
`--srcdir=DIR'
|
|
||||||
Look for the package's source code in directory DIR. Usually
|
|
||||||
`configure' can determine that directory automatically.
|
|
||||||
|
|
||||||
`--version'
|
|
||||||
Print the version of Autoconf used to generate the `configure'
|
|
||||||
script, and exit.
|
script, and exit.
|
||||||
|
|
||||||
`configure' also accepts some other, not widely useful, options.
|
'--cache-file=FILE'
|
||||||
|
Enable the cache: use and save the results of the tests in FILE,
|
||||||
|
traditionally 'config.cache'. FILE defaults to '/dev/null' to
|
||||||
|
disable caching.
|
||||||
|
|
||||||
|
'--config-cache'
|
||||||
|
'-C'
|
||||||
|
Alias for '--cache-file=config.cache'.
|
||||||
|
|
||||||
|
'--quiet'
|
||||||
|
'--silent'
|
||||||
|
'-q'
|
||||||
|
Do not print messages saying which checks are being made. To
|
||||||
|
suppress all normal output, redirect it to '/dev/null' (any error
|
||||||
|
messages will still be shown).
|
||||||
|
|
||||||
|
'--srcdir=DIR'
|
||||||
|
Look for the package's source code in directory DIR. Usually
|
||||||
|
'configure' can determine that directory automatically.
|
||||||
|
|
||||||
|
'--prefix=DIR'
|
||||||
|
Use DIR as the installation prefix. *note Installation Names:: for
|
||||||
|
more details, including other options available for fine-tuning the
|
||||||
|
installation locations.
|
||||||
|
|
||||||
|
'--no-create'
|
||||||
|
'-n'
|
||||||
|
Run the configure checks, but stop before creating any output
|
||||||
|
files.
|
||||||
|
|
||||||
|
'configure' also accepts some other, not widely useful, options. Run
|
||||||
|
'configure --help' for more details.
|
||||||
|
|
|
||||||
34
Makefile.am
34
Makefile.am
|
|
@ -2,36 +2,14 @@
|
||||||
|
|
||||||
AUTOMAKE_OPTIONS = gnu
|
AUTOMAKE_OPTIONS = gnu
|
||||||
|
|
||||||
SUBDIRS = m4 intl lib src doc po
|
SUBDIRS = src doc systemd
|
||||||
|
|
||||||
ACLOCAL_AMFLAGS =
|
ACLOCAL_AMFLAGS = -I m4
|
||||||
|
|
||||||
EXTRA_DIST = system.h COPYING.README depcomp
|
EXTRA_DIST = COPYING.README README.android
|
||||||
|
|
||||||
CVS_CREATED = ABOUT-NLS configure aclocal.m4 config.h.in config.guess \
|
|
||||||
config.sub install-sh ltconfig ltmain.sh missing mkinstalldirs \
|
|
||||||
stamp-h.in m4/Makefile.am ChangeLog po/Makefile.in.in \
|
|
||||||
po/tinc.pot src/.libs intl depcomp
|
|
||||||
|
|
||||||
ChangeLog:
|
ChangeLog:
|
||||||
cvs2cl -U cvsusers --fsf
|
git log > ChangeLog
|
||||||
|
|
||||||
cvs-clean: maintainer-clean
|
astyle:
|
||||||
for f in $(CVS_CREATED) `find . -name Makefile.in` tinc-$(VERSION).tar.gz; do\
|
astyle --options=.astylerc -nQ src/*.[ch] src/*/*.[ch]
|
||||||
rm -Rf "$$f"; \
|
|
||||||
done
|
|
||||||
|
|
||||||
deb:
|
|
||||||
dpkg-buildpackage -rfakeroot
|
|
||||||
|
|
||||||
rpm: dist
|
|
||||||
cp $(distdir).tar.gz /usr/src/redhat/SOURCES/
|
|
||||||
cp redhat/tinc.spec /usr/src/redhat/SOURCES/
|
|
||||||
cd /usr/src/redhat/SOURCES/ && rpm -bb tinc.spec
|
|
||||||
|
|
||||||
release:
|
|
||||||
rm -f ChangeLog
|
|
||||||
$(MAKE) ChangeLog
|
|
||||||
echo "Please edit the NEWS file now..."
|
|
||||||
/usr/bin/editor NEWS
|
|
||||||
$(MAKE) dist
|
|
||||||
|
|
|
||||||
956
Makefile.in
956
Makefile.in
File diff suppressed because it is too large
Load diff
491
NEWS
491
NEWS
|
|
@ -1,3 +1,494 @@
|
||||||
|
Version 1.0.36 August 26 2019
|
||||||
|
|
||||||
|
* Fix compiling tinc with certain versions of the OpenSSL library.
|
||||||
|
* Fix parsing some IPv6 addresses with :: in them.
|
||||||
|
* Fix GraphDumpFile output to handle node names starting with a digit.
|
||||||
|
* Fix a potential segmentation fault when fragmenting packets.
|
||||||
|
|
||||||
|
Thanks to Rosen Penev, Quentin Rameau and Werner Schreiber for their
|
||||||
|
contributions to this version of tinc.
|
||||||
|
|
||||||
|
Version 1.0.35 October 5 2018
|
||||||
|
|
||||||
|
* Prevent oracle attacks (CVE-2018-16737, CVE-2018-16738).
|
||||||
|
* Prevent a MITM from forcing a NULL cipher for UDP (CVE-2018-16758).
|
||||||
|
* Minor fixes in the documentation.
|
||||||
|
|
||||||
|
Thanks to Amine Amri and Rafael Sadowski for their contributions to this
|
||||||
|
version of tinc.
|
||||||
|
|
||||||
|
Version 1.0.34 June 12 2018
|
||||||
|
|
||||||
|
* Fix a potential segmentation fault when connecting to an IPv6 peer via a
|
||||||
|
proxy.
|
||||||
|
* Minor improvements to the build system.
|
||||||
|
* Make the systemd service file identical to the one from the 1.1 branch.
|
||||||
|
* Fix a potential problem causing IPv4 sockets to not work on macOS.
|
||||||
|
|
||||||
|
Thanks to Maximilian Stein and Wang Liu Shuai for their contributions to this
|
||||||
|
version of tinc.
|
||||||
|
|
||||||
|
Version 1.0.33 November 4 2017
|
||||||
|
|
||||||
|
* Allow compilation from a build directory.
|
||||||
|
* Source code cleanups.
|
||||||
|
* Fix some options specified on the command line not surviving a HUP signal.
|
||||||
|
* Handle tun/tap device returning EPERM or EBUSY.
|
||||||
|
* Disable PMTUDiscovery when TCPOnly is used.
|
||||||
|
* Support the --runstatedir option of the autoconf 2.70.
|
||||||
|
|
||||||
|
Thanks to Rafael Sadowski and Pierre-Olivier Mercier for their contributions to
|
||||||
|
this version of tinc.
|
||||||
|
|
||||||
|
Version 1.0.32 September 2 2017
|
||||||
|
|
||||||
|
* Fix segmentation fault when using Cipher = none.
|
||||||
|
* Fix Proxy = exec.
|
||||||
|
* Support PriorityInheritance for IPv6 packets.
|
||||||
|
* Fixes for Solaris tun/tap support.
|
||||||
|
* Bind outgoing TCP sockets when ListenAddress is used.
|
||||||
|
|
||||||
|
Thanks to Vittorio Gambaletta for his contribution to this version of tinc.
|
||||||
|
|
||||||
|
Version 1.0.31 January 15 2017
|
||||||
|
|
||||||
|
* Remove ExecStop in tinc@.service.
|
||||||
|
|
||||||
|
Thanks to Élie Bouttier for his contribution to this version of tinc.
|
||||||
|
|
||||||
|
Version 1.0.30 October 30 2016
|
||||||
|
|
||||||
|
* Fix troubles connecting to some HTTP proxies.
|
||||||
|
|
||||||
|
* Add mitigations for the Sweet32 attack when using a 64-bit block cipher.
|
||||||
|
|
||||||
|
* Use AES256 and SHA256 as the default encryption and digest algorithms.
|
||||||
|
|
||||||
|
Version 1.0.29 October 9 2016
|
||||||
|
|
||||||
|
* Fix UDP communication with peers with link-local IPv6 addresses.
|
||||||
|
|
||||||
|
* Ensure compatibility with OpenSSL 1.1.0.
|
||||||
|
|
||||||
|
* Ensure autoreconf can be run without requiring autoconf-archive.
|
||||||
|
|
||||||
|
* Log warnings about dropped packets only at debug level 5.
|
||||||
|
|
||||||
|
Version 1.0.28 April 10 2016
|
||||||
|
|
||||||
|
* Fix compilation on BSD platforms.
|
||||||
|
|
||||||
|
* Add systemd service files.
|
||||||
|
|
||||||
|
Version 1.0.27 April 10 2016
|
||||||
|
|
||||||
|
* When using Proxy, let the proxy resolve hostnames if tinc can't.
|
||||||
|
|
||||||
|
* Fixes and improvements of the DecrementTTL option.
|
||||||
|
|
||||||
|
* Fixed the $NAME variable in subnet-up/down scripts for the local Subnets.
|
||||||
|
|
||||||
|
* Fixed potentially wrong checksum generation when clamping the MSS.
|
||||||
|
|
||||||
|
* Properly choose between the system's or our own copy of getopt.
|
||||||
|
|
||||||
|
* Fixed compiling tinc for Cygwin with MinGW installed.
|
||||||
|
|
||||||
|
* Added support for OS X utun interfaces.
|
||||||
|
|
||||||
|
* Documentation updates and minor fixes.
|
||||||
|
|
||||||
|
Thanks to Vittorio Gambaletta, LunarShaddow, Florian Weik and Nathan Stratton
|
||||||
|
Treadway for their contributions to this version of tinc.
|
||||||
|
|
||||||
|
Version 1.0.26 July 5 2015
|
||||||
|
|
||||||
|
* Tinc now forces glibc to reload /etc/resolv.conf for every hostname lookup.
|
||||||
|
|
||||||
|
* Fixed --logfile without a filename on Windows.
|
||||||
|
|
||||||
|
* Ensure tinc can be compiled when using musl libc.
|
||||||
|
|
||||||
|
Thanks to Jo-Philipp Wich for his contribution to this version of tinc.
|
||||||
|
|
||||||
|
Version 1.0.25 December 22 2014
|
||||||
|
|
||||||
|
* Documentation updates.
|
||||||
|
|
||||||
|
* Support linking against -lresolv on Mac OS X.
|
||||||
|
|
||||||
|
* Fix scripts on Windows when using the ScriptsInterpreter option.
|
||||||
|
|
||||||
|
* Allow a minimum reconnect timeout to be specified.
|
||||||
|
|
||||||
|
* Support PriorityInheritance on IPv6 sockets.
|
||||||
|
|
||||||
|
Thanks to David Pflug, Baptiste Jonglez, Alexis Hildebrandt, Borg, Jochen Voss,
|
||||||
|
Tomislav Čohar and VittGam for their contributions to this version of tinc.
|
||||||
|
|
||||||
|
Version 1.0.24 May 11 2014
|
||||||
|
|
||||||
|
* Various compiler hardening flags are enabled by default.
|
||||||
|
|
||||||
|
* Updated support for Solaris, allowing switch mode on Solaris 11.
|
||||||
|
|
||||||
|
* Configuration will now also be read from a conf.d directory.
|
||||||
|
|
||||||
|
* Various updates to the documentation.
|
||||||
|
|
||||||
|
* Tinc now forces glibc to reload /etc/resolv.conf after it receives SIGALRM.
|
||||||
|
|
||||||
|
* Fixed a potential routing loop when IndirectData or TCPOnly is used and
|
||||||
|
broadcast packets are being sent.
|
||||||
|
|
||||||
|
* Improved security with constant time memcmp and stricter use of OpenSSL's
|
||||||
|
RNG functions.
|
||||||
|
|
||||||
|
* Fixed all issues found by Coverity.
|
||||||
|
|
||||||
|
Thanks to Florent Clairambault, Vilbrekin, luckyhacky, Armin Fisslthaler, Loïc
|
||||||
|
Dachary and Steffan Karger for their contributions to this version of tinc.
|
||||||
|
|
||||||
|
Version 1.0.23 October 19 2013
|
||||||
|
|
||||||
|
* Start authentication immediately on outgoing connections (useful for sslh).
|
||||||
|
|
||||||
|
* Fixed segfault when Name = $HOST but $HOST is not set.
|
||||||
|
|
||||||
|
* Updated the build system and the documentation.
|
||||||
|
|
||||||
|
* Clean up child processes left over from Proxy = exec.
|
||||||
|
|
||||||
|
Version 1.0.22 August 13 2013
|
||||||
|
|
||||||
|
* Fixed the combination of Mode = router and DeviceType = tap.
|
||||||
|
|
||||||
|
* The $NAME variable is now set in subnet-up/down scripts.
|
||||||
|
|
||||||
|
* Tinc now gives an error when unknown options are given on the command line.
|
||||||
|
|
||||||
|
* Tinc now correctly handles a space between a short command line option and
|
||||||
|
an optional argument.
|
||||||
|
|
||||||
|
Thanks to Etienne Dechamps for his contribution to this version of tinc.
|
||||||
|
|
||||||
|
Version 1.0.21 April 22 2013
|
||||||
|
|
||||||
|
* Drop packets forwarded via TCP if they are too big (CVE-2013-1428).
|
||||||
|
|
||||||
|
Thanks to Martin Schobert for auditing tinc and reporting this vulnerability.
|
||||||
|
|
||||||
|
Version 1.0.20 March 03 2013
|
||||||
|
|
||||||
|
* Use /dev/tap0 by default on FreeBSD and NetBSD when using switch mode.
|
||||||
|
|
||||||
|
* Minor improvements and clarifications in the documentation.
|
||||||
|
|
||||||
|
* Allow tinc to be cross-compiled with Android's NDK.
|
||||||
|
|
||||||
|
* The discovered PMTU is now also applied to VLAN tagged traffic.
|
||||||
|
|
||||||
|
* The LocalDiscovery option now makes use of all addresses tinc is bound to.
|
||||||
|
|
||||||
|
* Fixed support for tunemu on iOS devices.
|
||||||
|
|
||||||
|
* The PriorityInheritance option now also works with switch mode.
|
||||||
|
|
||||||
|
* Fixed tinc crashing when using a SOCKS5 proxy.
|
||||||
|
|
||||||
|
Thanks to Mesar Hameed, Vilbrekin and Martin Schürrer for their contributions
|
||||||
|
to this version of tinc.
|
||||||
|
|
||||||
|
Version 1.0.19 June 25 2012
|
||||||
|
|
||||||
|
* Allow :: notation in IPv6 Subnets.
|
||||||
|
|
||||||
|
* Add support for systemd style socket activation.
|
||||||
|
|
||||||
|
* Allow environment variables to be used for the Name option.
|
||||||
|
|
||||||
|
* Add basic support for SOCKS proxies, HTTP proxies, and proxying through an
|
||||||
|
external command.
|
||||||
|
|
||||||
|
Thanks to Anthony G. Basile and Michael Tokarev for their contributions to
|
||||||
|
this version of tinc.
|
||||||
|
|
||||||
|
Version 1.0.18 March 25 2012
|
||||||
|
|
||||||
|
* Fixed IPv6 in switch mode by turning off DecrementTTL by default.
|
||||||
|
|
||||||
|
* Allow a port number to be specified in BindToAddress, which also allows tinc
|
||||||
|
to listen on multiple ports.
|
||||||
|
|
||||||
|
* Add support for multicast communication with UML/QEMU/KVM.
|
||||||
|
|
||||||
|
Version 1.0.17 March 10 2012
|
||||||
|
|
||||||
|
* The DeviceType option can now be used to select dummy, raw socket, UML and
|
||||||
|
VDE devices without needing to recompile tinc.
|
||||||
|
|
||||||
|
* Allow multiple BindToAddress statements.
|
||||||
|
|
||||||
|
* Decrement TTL value of IPv4 and IPv6 packets.
|
||||||
|
|
||||||
|
* Add LocalDiscovery option allowing tinc to detect peers that are behind the
|
||||||
|
same NAT.
|
||||||
|
|
||||||
|
* Accept Subnets passed with the -o option when StrictSubnets = yes.
|
||||||
|
|
||||||
|
* Disabling old RSA keys when generating new ones now also works properly on
|
||||||
|
Windows.
|
||||||
|
|
||||||
|
Thanks to Nick Hibma for his contribution to this version of tinc.
|
||||||
|
|
||||||
|
Version 1.0.16 July 23 2011
|
||||||
|
|
||||||
|
* Fixed a performance issue with TCP communication under Windows.
|
||||||
|
|
||||||
|
* Fixed code that, during network outages, would cause tinc to exit when it
|
||||||
|
thought two nodes with identical Names were on the VPN.
|
||||||
|
|
||||||
|
Version 1.0.15 June 24 2011
|
||||||
|
|
||||||
|
* Improved logging to file.
|
||||||
|
|
||||||
|
* Reduced amount of process wakeups on platforms which support pselect().
|
||||||
|
|
||||||
|
* Fixed ProcessPriority option under Windows.
|
||||||
|
|
||||||
|
Version 1.0.14 May 8 2011
|
||||||
|
|
||||||
|
* Fixed reading configuration files that do not end with a newline. Again.
|
||||||
|
|
||||||
|
* Allow arbitrary configuration options being specified on the command line.
|
||||||
|
|
||||||
|
* Allow all options in both tinc.conf and the local host config file.
|
||||||
|
|
||||||
|
* Configurable replay window, UDP send and receive buffers for performance tuning.
|
||||||
|
|
||||||
|
* Try harder to get UDP communication back after falling back to TCP.
|
||||||
|
|
||||||
|
* Initial support for attaching tinc to a VDE switch.
|
||||||
|
|
||||||
|
* DragonFly BSD support.
|
||||||
|
|
||||||
|
* Allow linking with OpenSSL 1.0.0.
|
||||||
|
|
||||||
|
Thanks to Brandon Black, Julien Muchembled, Michael Tokarev, Rumko and Timothy
|
||||||
|
Redaelli for their contributions to this version of tinc.
|
||||||
|
|
||||||
|
Version 1.0.13 Apr 11 2010
|
||||||
|
|
||||||
|
* Allow building tinc without LZO and/or Zlib.
|
||||||
|
|
||||||
|
* Clamp MSS of TCP packets in both directions.
|
||||||
|
|
||||||
|
* Experimental StrictSubnets, Forwarding and DirectOnly options,
|
||||||
|
giving more control over information and packets received from/sent to other
|
||||||
|
nodes.
|
||||||
|
|
||||||
|
* Ensure tinc never sends symbolic names for ports over the wire.
|
||||||
|
|
||||||
|
Version 1.0.12 Feb 3 2010
|
||||||
|
|
||||||
|
* Really allow fast roaming of hosts to other nodes in a switched VPN.
|
||||||
|
|
||||||
|
* Fixes missing or incorrect environment variables when calling host-up/down
|
||||||
|
and subnet-up/down scripts in some cases.
|
||||||
|
|
||||||
|
* Allow port to be specified in Address statements.
|
||||||
|
|
||||||
|
* Clamp MSS of TCP packets to the discovered path MTU.
|
||||||
|
|
||||||
|
* Let two nodes behind NAT learn each others current UDP address and port via
|
||||||
|
a third node, potentially allowing direct communications in a similar way to
|
||||||
|
STUN.
|
||||||
|
|
||||||
|
Version 1.0.11 Nov 1 2009
|
||||||
|
|
||||||
|
* Fixed potential crash when the HUP signal is sent.
|
||||||
|
|
||||||
|
* Fixes handling of weighted Subnets in switch and hub modes, preventing
|
||||||
|
unnecessary broadcasts.
|
||||||
|
|
||||||
|
* Works around a MinGW bug that caused packets to Windows nodes to always be
|
||||||
|
sent via TCP.
|
||||||
|
|
||||||
|
* Improvements to the PMTU discovery code, especially on Windows.
|
||||||
|
|
||||||
|
* Use UDP again in certain cases where 1.0.10 was too conservative and fell
|
||||||
|
back to TCP unnecessarily.
|
||||||
|
|
||||||
|
* Allow fast roaming of hosts to other nodes in a switched VPN.
|
||||||
|
|
||||||
|
Version 1.0.10 Oct 18 2009
|
||||||
|
|
||||||
|
* Fixed potential crashes during shutdown and (in rare conditions) when other
|
||||||
|
nodes disconnected from the VPN.
|
||||||
|
|
||||||
|
* Improved NAT handling: tinc now copes with mangled port numbers, and will
|
||||||
|
automatically fall back to TCP if direct UDP connection between nodes is not
|
||||||
|
possible. The TCPOnly option should not have to be used anymore.
|
||||||
|
|
||||||
|
* Allow configuration files with CRLF line endings to be read on UNIX.
|
||||||
|
|
||||||
|
* Disable old RSA keys when generating new ones, and raise the default size of
|
||||||
|
new RSA keys to 2048 bits.
|
||||||
|
|
||||||
|
* Many fixes in the path MTU discovery code, especially when Compression is
|
||||||
|
being used.
|
||||||
|
|
||||||
|
* Tinc can now drop privileges and/or chroot itself.
|
||||||
|
|
||||||
|
* The TunnelServer code now just ignores information from clients instead of
|
||||||
|
disconnecting them.
|
||||||
|
|
||||||
|
* Improved performance on Windows by using the new ProcessPriority option and
|
||||||
|
by making the handling of packets received from the TAP-Win32 adapter more
|
||||||
|
efficient.
|
||||||
|
|
||||||
|
* Code cleanups: tinc now follows the C99 standard, copyright headers have
|
||||||
|
been updated to include patch authors, checkpoint tracing and localisation
|
||||||
|
features have been removed.
|
||||||
|
|
||||||
|
* Support for (jailbroken) iPhone and iPod Touch has been added.
|
||||||
|
|
||||||
|
Thanks to Florian Forster, Grzegorz Dymarek and especially Michael Tokarev for
|
||||||
|
their contributions to this version of tinc.
|
||||||
|
|
||||||
|
Version 1.0.9 Dec 26 2008
|
||||||
|
|
||||||
|
* Fixed tinc as a service under Windows 2003.
|
||||||
|
|
||||||
|
* Fixed reading configuration files that do not end with a newline.
|
||||||
|
|
||||||
|
* Fixed crashes in situations where hostnames could not be resolved or hosts
|
||||||
|
would disconnect at the same time as session keys were exchanged.
|
||||||
|
|
||||||
|
* Improved default settings of tun and tap devices on BSD platforms.
|
||||||
|
|
||||||
|
* Make IPv6 sockets bind only to IPv6 on Linux.
|
||||||
|
|
||||||
|
* Enable path MTU discovery by default.
|
||||||
|
|
||||||
|
* Fixed a memory leak that occurred when connections were closed.
|
||||||
|
|
||||||
|
Thanks to Max Rijevski for his contributions to this version of tinc.
|
||||||
|
|
||||||
|
Version 1.0.8 May 16 2007
|
||||||
|
|
||||||
|
* Fixed some memory and resource leaks.
|
||||||
|
|
||||||
|
* Made network sockets non-blocking under Windows.
|
||||||
|
|
||||||
|
Thanks to Scott Lamb and "dnk" for their contributions to this version of tinc.
|
||||||
|
|
||||||
|
Version 1.0.7 Jan 5 2007
|
||||||
|
|
||||||
|
* Fixed a bug that caused slow network speeds on Windows.
|
||||||
|
|
||||||
|
* Fixed a bug that caused tinc unable to write packets to the tun device on
|
||||||
|
OpenBSD.
|
||||||
|
|
||||||
|
Version 1.0.6 Dec 18 2006
|
||||||
|
|
||||||
|
* More flexible detection of the LZO libraries when compiling.
|
||||||
|
|
||||||
|
* Fixed a bug where broadcasts in switch and hub modes sometimes would not
|
||||||
|
work anymore when part of the VPN had become disconnected from the rest.
|
||||||
|
|
||||||
|
version 1.0.5 Nov 14 2006
|
||||||
|
|
||||||
|
* Lots of small fixes.
|
||||||
|
|
||||||
|
* Broadcast packets no longer grow in size with each hop. This should
|
||||||
|
fix switch mode (again).
|
||||||
|
|
||||||
|
* Generic host-up and host-down scripts.
|
||||||
|
|
||||||
|
* Optionally dump graph in graphviz format to a file or a script.
|
||||||
|
|
||||||
|
* Support LZO 2.0 and later.
|
||||||
|
|
||||||
|
Thanks to Scott Lamb for his contributions to this version of tinc.
|
||||||
|
|
||||||
|
version 1.0.4 May 4 2005
|
||||||
|
|
||||||
|
* Fix switch and hub modes.
|
||||||
|
|
||||||
|
* Optionally start scripts when a Subnet becomes (un)reachable.
|
||||||
|
|
||||||
|
version 1.0.3 Nov 11 2004
|
||||||
|
|
||||||
|
* Show error message when failing to write a PID file.
|
||||||
|
|
||||||
|
* Ignore spaces at end of lines in config files.
|
||||||
|
|
||||||
|
* Fix handling of late packets.
|
||||||
|
|
||||||
|
* Unify BSD tun/tap device handling. This allows IPv6 on tun devices and
|
||||||
|
anything on tap devices as long as the underlying OS supports it.
|
||||||
|
|
||||||
|
* Handle IPv6 on Solaris tun devices.
|
||||||
|
|
||||||
|
* Allow tinc to work properly under Windows XP SP2.
|
||||||
|
|
||||||
|
* Allow VLAN tagged Ethernet frames in switch and hub mode.
|
||||||
|
|
||||||
|
* Experimental PMTUDiscovery, TunnelServer and BlockingTCP options.
|
||||||
|
|
||||||
|
version 1.0.2 Nov 8 2003
|
||||||
|
|
||||||
|
* Fix address and hostname resolving under Windows.
|
||||||
|
|
||||||
|
* Remove warnings about non-existing scripts and unsupported address families.
|
||||||
|
|
||||||
|
* Use the event logger under Windows.
|
||||||
|
|
||||||
|
* Fix quoting of filenames and command line arguments under Windows.
|
||||||
|
|
||||||
|
* Strict checks for length incoming network packets and return values of
|
||||||
|
cryptographic functions,
|
||||||
|
|
||||||
|
* Fix a bug in metadata handling that made the tinc daemon abort.
|
||||||
|
|
||||||
|
version 1.0.1 Aug 14 2003
|
||||||
|
|
||||||
|
* Allow empty lines in config files.
|
||||||
|
|
||||||
|
* Fix handling of spaces and backslashes in filenames under native Windows.
|
||||||
|
|
||||||
|
* Allow scripts to be executed under native Windows.
|
||||||
|
|
||||||
|
* Update documentation, make it less Linux specific.
|
||||||
|
|
||||||
|
version 1.0 Aug 4 2003
|
||||||
|
|
||||||
|
* Lots of small bugfixes and code cleanups.
|
||||||
|
|
||||||
|
* Throughput doubled and latency reduced.
|
||||||
|
|
||||||
|
* Added support for LZO compression.
|
||||||
|
|
||||||
|
* No need to set MAC address or disable ARP anymore.
|
||||||
|
|
||||||
|
* Added support for Windows 2000 and XP, both natively and in a Cygwin
|
||||||
|
environment.
|
||||||
|
|
||||||
|
version 1.0pre8 Sep 16 2002
|
||||||
|
|
||||||
|
* More fixes for subnets with prefixlength undivisible by 8.
|
||||||
|
|
||||||
|
* Added support for NetBSD and MacOS/X.
|
||||||
|
|
||||||
|
* Switched from undirected graphs to directed graphs to avoid certain race
|
||||||
|
conditions and improve scalability.
|
||||||
|
|
||||||
|
* Generalized broadcasting and forwarding of protocol messages.
|
||||||
|
|
||||||
|
* Cleanup of source code.
|
||||||
|
|
||||||
|
|
||||||
version 1.0pre7 Apr 7 2002
|
version 1.0pre7 Apr 7 2002
|
||||||
|
|
||||||
* Don't do blocking read()s when getting a signal.
|
* Don't do blocking read()s when getting a signal.
|
||||||
|
|
|
||||||
102
README
102
README
|
|
@ -1,10 +1,10 @@
|
||||||
This is the README file for tinc version 1.0pre7. Installation
|
This is the README file for tinc version 1.0.36. Installation
|
||||||
instructions may be found in the INSTALL file.
|
instructions may be found in the INSTALL file.
|
||||||
|
|
||||||
tinc is Copyright (C) 1998-2002 by:
|
tinc is Copyright (C) 1998-2019 by:
|
||||||
|
|
||||||
Ivo Timmermans <itimmermans@bigfoot.com>,
|
Ivo Timmermans,
|
||||||
Guus Sliepen <guus@sliepen.warande.net>,
|
Guus Sliepen <guus@tinc-vpn.org>,
|
||||||
and others.
|
and others.
|
||||||
|
|
||||||
For a complete list of authors see the AUTHORS file.
|
For a complete list of authors see the AUTHORS file.
|
||||||
|
|
@ -31,37 +31,58 @@ launch a denial of service attack by replaying intercepted packets. The current
|
||||||
version adds sequence numbers and message authentication codes to prevent such
|
version adds sequence numbers and message authentication codes to prevent such
|
||||||
attacks.
|
attacks.
|
||||||
|
|
||||||
|
On September the 15th of 2003, Peter Gutmann contacted us and showed us a
|
||||||
|
writeup describing various security issues in several VPN daemons. He showed
|
||||||
|
that tinc lacks perfect forward security, the connection authentication could
|
||||||
|
be done more properly, that the sequence number we use as an IV is not the best
|
||||||
|
practice and that the default length of the HMAC for packets is too short in
|
||||||
|
his opinion. We do not know of a way to exploit these weaknesses, but these
|
||||||
|
issues are being addressed in the tinc 1.1 branch.
|
||||||
|
|
||||||
|
The Sweet32 attack affects versions of tinc prior to 1.0.30.
|
||||||
|
|
||||||
|
On September 6th, 2018, Michael Yonly contacted us and provided
|
||||||
|
proof-of-concept code that allowed a remote attacker to create an
|
||||||
|
authenticated, one-way connection with a node, and also that there was a
|
||||||
|
possibility for a man-in-the-middle to force UDP packets from a node to be sent
|
||||||
|
in plaintext. The first issue was trivial to exploit on tinc versions prior to
|
||||||
|
1.0.30, but the changes in 1.0.30 to mitigate the Sweet32 attack made this
|
||||||
|
weakness much harder to exploit. These issues have been fixed in tinc 1.0.35.
|
||||||
|
The new protocol in the tinc 1.1 branch is not susceptible to these issues.
|
||||||
|
|
||||||
Cryptography is a hard thing to get right. We cannot make any
|
Cryptography is a hard thing to get right. We cannot make any
|
||||||
guarantees. Time, review and feedback are the only things that can
|
guarantees. Time, review and feedback are the only things that can
|
||||||
prove the security of any cryptographic product. If you wish to review
|
prove the security of any cryptographic product. If you wish to review
|
||||||
tinc or give us feedback, you are stronly encouraged to do so.
|
tinc or give us feedback, you are strongly encouraged to do so.
|
||||||
|
|
||||||
|
|
||||||
Changes to configuration file format since 1.0pre5
|
Compatibility
|
||||||
--------------------------------------------------
|
-------------
|
||||||
|
|
||||||
Some configuration variables have different names now. Most notably "TapDevice"
|
Version 1.0.35 is compatible with 1.0pre8, 1.0 and later, but not with older
|
||||||
should be changed into "Device", and "Device" should be changed into
|
versions of tinc. Note that since version 1.0.30, tinc requires all nodes in
|
||||||
"BindToDevice".
|
the VPN to be compiled with a version of LibreSSL or OpenSSL that supports the
|
||||||
|
AES256 and SHA256 algorithms.
|
||||||
|
|
||||||
|
|
||||||
Requirements
|
Requirements
|
||||||
------------
|
------------
|
||||||
|
|
||||||
Since 1.0pre3, we use OpenSSL for all cryptographic functions. So you
|
The OpenSSL library is used for all cryptographic functions. You can find it at
|
||||||
need to install this library first; grab it from
|
https://www.openssl.org/. You will need version 1.0.1 or later with support for
|
||||||
http://www.openssl.org/. We recommend version 0.9.5 or better. If
|
AES256 and SHA256 enabled. If this library is not installed on your system, the
|
||||||
this library is not installed on you system, configure will fail. The
|
configure script will fail. The manual in doc/tinc.texi contains more detailed
|
||||||
manual in doc/tinc.texi contains more detailed information on how to
|
information on how to install this library. Alternatively, you may also use the
|
||||||
install this library.
|
LibreSSL library.
|
||||||
|
|
||||||
Since 1.0pre6, the zlib library is used for optional compression. You need this
|
The zlib library is used for optional compression. You can
|
||||||
library whether or not you plan to enable the compression. You can find it at
|
find it at https://zlib.net/. Because of a possible exploit in
|
||||||
http://www.gzip.org/zlib/. Because of a possible exploit in earlier versions we
|
earlier versions we recommend that you download version 1.1.4 or later.
|
||||||
recommand that you download version 1.1.4 or later.
|
|
||||||
|
|
||||||
In order to compile tinc, you will also need autoconf, automake, GNU make, m4
|
The LZO library is also used for optional compression. You can
|
||||||
and gettext.
|
find it at https://www.oberhumer.com/opensource/lzo/.
|
||||||
|
|
||||||
|
In order to compile tinc, you will need a C99 compliant compiler.
|
||||||
|
|
||||||
|
|
||||||
Features
|
Features
|
||||||
|
|
@ -70,17 +91,7 @@ Features
|
||||||
This version of tinc supports multiple virtual networks at once. To
|
This version of tinc supports multiple virtual networks at once. To
|
||||||
use this feature, you may supply a netname via the -n or --net
|
use this feature, you may supply a netname via the -n or --net
|
||||||
options. The standard locations for the config files will then be
|
options. The standard locations for the config files will then be
|
||||||
/etc/tinc/<net>/. Because of this feature, tinc will send packets
|
/etc/tinc/<net>/.
|
||||||
directly to their destinations, instead of to the uplink. If this
|
|
||||||
behaviour is undesirable (for instance because of firewalls or other
|
|
||||||
restrictions), please use an older version of tinc (I would recommend
|
|
||||||
tinc-0.2.19).
|
|
||||||
|
|
||||||
In order to force the kernel to accept received packets, the
|
|
||||||
destination MAC address will be set to FE:FD:00:00:00:00 upon
|
|
||||||
reception. The MAC address of the ethertap or tun/tap interface must
|
|
||||||
also be set to this address. See the manual for more detailed
|
|
||||||
information.
|
|
||||||
|
|
||||||
tincd regenerates its encryption key pairs. It does this on the first
|
tincd regenerates its encryption key pairs. It does this on the first
|
||||||
activity after the keys have expired. This period is adjustable in the
|
activity after the keys have expired. This period is adjustable in the
|
||||||
|
|
@ -96,22 +107,27 @@ Since pre5, tinc can operate in several routing modes. The default mode,
|
||||||
determine the destination of packets. The other two modes, "switch" and "hub",
|
determine the destination of packets. The other two modes, "switch" and "hub",
|
||||||
allow the tinc daemons to work together like a single network switch or hub.
|
allow the tinc daemons to work together like a single network switch or hub.
|
||||||
This is useful for bridging networks. The latter modes only work properly on
|
This is useful for bridging networks. The latter modes only work properly on
|
||||||
Linux and FreeBSD.
|
Linux, FreeBSD and Windows.
|
||||||
|
|
||||||
The algorithms used for encryption and generating message authentication codes
|
The algorithms used for encryption and generating message authentication codes
|
||||||
can now be changed in the configuration files. All cipher and digest algorithms
|
can now be changed in the configuration files. All cipher and digest algorithms
|
||||||
supported by OpenSSL can be used. Useful ciphers are "blowfish" (default),
|
supported by OpenSSL can be used. Useful ciphers are "blowfish" (default),
|
||||||
"bf-ofb", "des", "des3", etcetera. Useful digests are "sha1" (default), "md5",
|
"bf-ofb", "des", "des3", et cetera. Useful digests are "sha1" (default), "md5",
|
||||||
etcetera.
|
et cetera.
|
||||||
|
|
||||||
Support for routing IPv6 packets has been added. Just add Subnet lines with
|
Support for routing IPv6 packets has been added. Just add Subnet lines with
|
||||||
IPv6 addresses (without using :: abbreviations) and use ifconfig or ip (from
|
IPv6 addresses (without using :: abbreviations) and use ifconfig or ip (from
|
||||||
the iproute package) to give the virtual network interface corresponding IPv6
|
the iproute package) to give the virtual network interface corresponding IPv6
|
||||||
addresses. Autoconfiguration will not work in router mode. Tunneling IPv6
|
addresses. tinc does not provide autoconfiguration for IPv6 hosts. Consider
|
||||||
packets only works on Linux, FreeBSD and possibly OpenBSD.
|
using radvd or zebra if you need it.
|
||||||
|
|
||||||
|
It is also possible to make tunnels to other tinc daemons over IPv6 networks,
|
||||||
|
if the operating system supports IPv6. tinc will automatically use both IPv6
|
||||||
|
and IPv4 when available, but this can be changed by adding the option
|
||||||
|
"AddressFamily = ipv4" or "AddressFamily = ipv6" to the tinc.conf file.
|
||||||
|
|
||||||
|
Normally, when started tinc will detach and run in the background. In a native
|
||||||
|
Windows environment this means tinc will install itself as a service, which will
|
||||||
|
restart after reboots. To prevent tinc from detaching or running as a service,
|
||||||
|
use the -D option.
|
||||||
|
|
||||||
It is also possible to make tunnels to other tinc daemons over IPv6 networks.
|
|
||||||
In order to enable this feature the option "AddressFamily = any" or
|
|
||||||
"AddressFamily = ipv6" must be added to the tinc.conf file. The host
|
|
||||||
configuration files should contain IPv6 addresses for the "Address" variables,
|
|
||||||
or hostnames which have an AAAA or A6 record.
|
|
||||||
|
|
|
||||||
25
README.android
Normal file
25
README.android
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
Quick how-to cross compile tinc for android (done from $HOME/android/):
|
||||||
|
|
||||||
|
- Download android NDK and setup local ARM toolchain:
|
||||||
|
wget http://dl.google.com/android/ndk/android-ndk-r9d-linux-x86.tar.bz2
|
||||||
|
tar xfj android-ndk-r9d-linux-x86.tar.bz2
|
||||||
|
./android-ndk-r9d/build/tools/make-standalone-toolchain.sh --platform=android-5 --install-dir=/tmp/my-android-toolchain
|
||||||
|
|
||||||
|
- Download and cross-compile openSSL for ARM:
|
||||||
|
wget http://www.openssl.org/source/openssl-1.0.1h.tar.gz
|
||||||
|
tar xfz openssl-1.0.1h.tar.gz
|
||||||
|
cd openssl-1.0.1h
|
||||||
|
./Configure dist
|
||||||
|
make CC=/tmp/my-android-toolchain/bin/arm-linux-androideabi-gcc AR="/tmp/my-android-toolchain/bin/arm-linux-androideabi-ar r" RANLIB=/tmp/my-android-toolchain/bin/arm-linux-androideabi-ranlib
|
||||||
|
cd -
|
||||||
|
|
||||||
|
- Clone and cross-compile tinc:
|
||||||
|
git clone git://tinc-vpn.org/tinc
|
||||||
|
cd tinc
|
||||||
|
autoreconf -fsi
|
||||||
|
CC=/tmp/my-android-toolchain/bin/arm-linux-androideabi-gcc ./configure --host=arm-linux --disable-lzo --with-openssl-lib=$HOME/android/openssl-1.0.1g --with-openssl-include=$HOME/android/openssl-1.0.1g/include/ --disable-hardening
|
||||||
|
make -j5
|
||||||
|
|
||||||
|
- Strip tincd binary to make it smaller
|
||||||
|
/tmp/my-android-toolchain/bin/arm-linux-androideabi-strip src/tincd
|
||||||
|
|
||||||
145
THANKS
145
THANKS
|
|
@ -1,25 +1,126 @@
|
||||||
We would like to thank
|
We would like to thank the following people for their contributions to tinc:
|
||||||
|
|
||||||
* Hans Bayle (for making some useful coding suggestions and fixing a
|
* Alexander Reil and Gemeinde Berg
|
||||||
bug or two)
|
* Alexander Ried
|
||||||
* Lubomír Bulej (for the Redhat system init script)
|
* Alexis Hildebrandt
|
||||||
* Wessel Dankers (for the name `tinc' and various suggestions)
|
* Allesandro Gatti
|
||||||
* Mads Kiilerich (for finding some bugs and some errors in the
|
* Andreas van Cranenburgh
|
||||||
documentation, and for making several suggestions to make it all
|
* Andrew Hahn
|
||||||
more userfriendly, and the Redhat package)
|
* Anthony G. Basile
|
||||||
* James MacLean (for fixing several mission critical bugs, and for
|
* Armijn Hemel
|
||||||
giving me a few good ideas, and, most of all, for the wonderful
|
* Armin Fisslthaler
|
||||||
testing and debugging)
|
* Aron Cowan
|
||||||
* Robert van der Meulen (early configuration code)
|
* Ashish Bajaj
|
||||||
* Cris van Pelt (small fixes)
|
* Baptiste Jonglez
|
||||||
* Enrique Zanardi (for the Spanish translation)
|
* Borg
|
||||||
* Matias Carrasco (for the Spanish translation of the manual)
|
* Brandon Black
|
||||||
* Jamie Briggs (for finding a lot of socket leaks)
|
* Cheng LI
|
||||||
* Armijn Hemel (for being our very own PR manager)
|
* Cris van Pelt
|
||||||
* Jerome Etienne (for a thorough security analysis of tinc)
|
* Darius Jahandarie
|
||||||
* Mark Glines (for his compression patch)
|
* Dato Simó
|
||||||
|
* David Pflug
|
||||||
|
* Delf Eldkraft
|
||||||
|
* Dennis Joachimsthaler
|
||||||
|
* dnk
|
||||||
|
* Егор Палкин
|
||||||
|
* Élie Bouttier
|
||||||
|
* Enrique Zanardi
|
||||||
|
* Erik Tews
|
||||||
|
* Etienne Dechamps
|
||||||
|
* Florent Clairambault
|
||||||
|
* Florian Forster
|
||||||
|
* Florian Klink
|
||||||
|
* Florian Weik
|
||||||
|
* Flynn Marquardt
|
||||||
|
* Franz Pletz
|
||||||
|
* Gary Kessler and Claudia Gonzalez
|
||||||
|
* Grzegorz Dymarek
|
||||||
|
* Gusariev Oleksandr
|
||||||
|
* Hans Bayle
|
||||||
|
* Harvest
|
||||||
|
* Ivo van Dong
|
||||||
|
* Ivo Smits
|
||||||
|
* James Cook
|
||||||
|
* James MacLean
|
||||||
|
* Jamie Briggs
|
||||||
|
* Jan Štembera
|
||||||
|
* Jason Harper
|
||||||
|
* Jason Livesay
|
||||||
|
* Jasper Krijgsman
|
||||||
|
* Jelle de Jong
|
||||||
|
* Jeroen Domburg
|
||||||
|
* Jeroen Ubbink
|
||||||
|
* Jerome Etienne
|
||||||
|
* Jo-Philipp Wich
|
||||||
|
* Jochen Voss
|
||||||
|
* Julien Muchembled
|
||||||
|
* Lavrans Laading
|
||||||
|
* Loïc Dachary
|
||||||
|
* Loïc Grenié
|
||||||
|
* Lubomír Bulej
|
||||||
|
* luckyhacky
|
||||||
|
* LunarShaddow
|
||||||
|
* Mads Kiilerich
|
||||||
|
* Marc A. Lehmann
|
||||||
|
* Mark Glines
|
||||||
|
* Mark Petryk
|
||||||
|
* Markus Goetz
|
||||||
|
* Martin Kihlgren
|
||||||
|
* Martin Schobert
|
||||||
|
* Martin Schürrer
|
||||||
|
* Martin Weinelt
|
||||||
|
* Matias Carrasco
|
||||||
|
* Max Rijevski
|
||||||
|
* Menno Smits
|
||||||
|
* Mesar Hameed
|
||||||
|
* Michael Taylor
|
||||||
|
* Michael Tokarev
|
||||||
|
* Michael Yonli
|
||||||
|
* Miles Nordin
|
||||||
|
* Nathan Stratton Treadway
|
||||||
|
* Murat Donmez
|
||||||
|
* Nick Hibma
|
||||||
|
* Nick Patavalis
|
||||||
|
* Paul Littlefield
|
||||||
|
* Philipp Babel
|
||||||
|
* Pierre Emeriaud
|
||||||
|
* Pierre-Olivier Mercier
|
||||||
|
* Rafael Wolf
|
||||||
|
* Rafael Sadowski
|
||||||
|
* Rafał Leśniak
|
||||||
|
* Rhosyn Celyn
|
||||||
|
* Robert van der Meulen
|
||||||
|
* Robert Waniek
|
||||||
|
* Rumko
|
||||||
|
* Ryan Miller
|
||||||
|
* Sam Bryan
|
||||||
|
* Samuel Thibault
|
||||||
|
* Saverio Proto
|
||||||
|
* Scott Lamb
|
||||||
|
* Steffan Karger
|
||||||
|
* Stig Fagrell
|
||||||
|
* Sven-Haegar Koch
|
||||||
|
* Teemu Kiviniemi
|
||||||
|
* Thomas Tsiakalakis
|
||||||
|
* Timothy Redaelli
|
||||||
|
* Tomasz Fortuna
|
||||||
|
* Tomislav Čohar
|
||||||
|
* Tommy Arnkværn
|
||||||
|
* Tonnerre Lombard
|
||||||
|
* Ulrich Seifert
|
||||||
|
* Vil Brekin
|
||||||
|
* Vincent Laurent
|
||||||
|
* Vittorio Gambaletta
|
||||||
|
* Wendy Willard
|
||||||
|
* Wessel Dankers
|
||||||
|
* William A. Kennington III
|
||||||
|
* William McArthur
|
||||||
|
* Wouter van Heyst
|
||||||
|
* xentec
|
||||||
|
* 戴 鸣
|
||||||
|
|
||||||
for their help, support and ideas. Thank you guys!
|
And everyone we forgot (if we did, please let us know). Thank you!
|
||||||
|
|
||||||
Ivo Timmermans
|
---
|
||||||
Guus Sliepen
|
Ivo Timmermans,
|
||||||
|
Guus Sliepen.
|
||||||
|
|
|
||||||
5
TODO
5
TODO
|
|
@ -1,5 +0,0 @@
|
||||||
TODO LIST
|
|
||||||
|
|
||||||
1.0:
|
|
||||||
|
|
||||||
* A nice, secure and stable release
|
|
||||||
77
acconfig.h
77
acconfig.h
|
|
@ -1,77 +0,0 @@
|
||||||
/* Define to the name name of this package */
|
|
||||||
#undef PACKAGE
|
|
||||||
|
|
||||||
/* Define to the version of the package */
|
|
||||||
#undef VERSION
|
|
||||||
|
|
||||||
/* Define to rpl_malloc if the replacement function should be used. */
|
|
||||||
#undef malloc
|
|
||||||
|
|
||||||
/* Define to rpl_realloc if the replacement function should be used. */
|
|
||||||
#undef realloc
|
|
||||||
|
|
||||||
/* This is always defined. It enables GNU extensions on systems that
|
|
||||||
have them. */
|
|
||||||
#if !defined(_GNU_SOURCE)
|
|
||||||
# undef _GNU_SOURCE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined(__USE_BSD)
|
|
||||||
# undef __USE_BSD
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Define to 1 if NLS is requested. */
|
|
||||||
#undef ENABLE_NLS
|
|
||||||
|
|
||||||
/* Define as 1 if you have catgets and don't want to use GNU gettext. */
|
|
||||||
#undef HAVE_CATGETS
|
|
||||||
|
|
||||||
/* Define as 1 if you have gettext and don't want to use GNU gettext. */
|
|
||||||
#undef HAVE_GETTEXT
|
|
||||||
|
|
||||||
/* Define if your locale.h file contains LC_MESSAGES. */
|
|
||||||
#undef HAVE_LC_MESSAGES
|
|
||||||
|
|
||||||
/* Define to 1 if you have the stpcpy function. */
|
|
||||||
#undef HAVE_STPCPY
|
|
||||||
|
|
||||||
/* For getopt */
|
|
||||||
#if HAVE_STDLIB_H
|
|
||||||
# define getopt system_getopt
|
|
||||||
# include <stdlib.h>
|
|
||||||
# undef getopt
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Linux */
|
|
||||||
#undef HAVE_LINUX
|
|
||||||
|
|
||||||
/* FreeBSD */
|
|
||||||
#undef HAVE_FREEBSD
|
|
||||||
|
|
||||||
/* OpenBSD */
|
|
||||||
#undef HAVE_OPENBSD
|
|
||||||
|
|
||||||
/* Solaris */
|
|
||||||
#undef HAVE_SOLARIS
|
|
||||||
|
|
||||||
/* NetBSD */
|
|
||||||
#undef HAVE_NETBSD
|
|
||||||
|
|
||||||
/* Define to the location of the kernel sources */
|
|
||||||
#undef CONFIG_TINC_KERNELDIR
|
|
||||||
|
|
||||||
/* Define to 1 if tun/tap support is enabled and found */
|
|
||||||
#undef HAVE_TUNTAP
|
|
||||||
|
|
||||||
/* Define to the location of if_tun.h */
|
|
||||||
#undef LINUX_IF_TUN_H
|
|
||||||
|
|
||||||
/* Define to 1 if support for jumbograms is enabled */
|
|
||||||
#undef ENABLE_JUMBOGRAMS
|
|
||||||
|
|
||||||
/* Define to 1 if checkpoint tracing is enabled */
|
|
||||||
#undef ENABLE_TRACING
|
|
||||||
|
|
||||||
/* Define to enable use of old SSLeay_add_all_algorithms() function */
|
|
||||||
#undef HAVE_SSLEAY_ADD_ALL_ALGORITHMS
|
|
||||||
2188
aclocal.m4
vendored
2188
aclocal.m4
vendored
File diff suppressed because it is too large
Load diff
348
compile
Executable file
348
compile
Executable file
|
|
@ -0,0 +1,348 @@
|
||||||
|
#! /bin/sh
|
||||||
|
# Wrapper for compilers which do not understand '-c -o'.
|
||||||
|
|
||||||
|
scriptversion=2018-03-07.03; # UTC
|
||||||
|
|
||||||
|
# Copyright (C) 1999-2020 Free Software Foundation, Inc.
|
||||||
|
# Written by Tom Tromey <tromey@cygnus.com>.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2, or (at your option)
|
||||||
|
# any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# As a special exception to the GNU General Public License, if you
|
||||||
|
# distribute this file as part of a program that contains a
|
||||||
|
# configuration script generated by Autoconf, you may include it under
|
||||||
|
# the same distribution terms that you use for the rest of that program.
|
||||||
|
|
||||||
|
# This file is maintained in Automake, please report
|
||||||
|
# bugs to <bug-automake@gnu.org> or send patches to
|
||||||
|
# <automake-patches@gnu.org>.
|
||||||
|
|
||||||
|
nl='
|
||||||
|
'
|
||||||
|
|
||||||
|
# We need space, tab and new line, in precisely that order. Quoting is
|
||||||
|
# there to prevent tools from complaining about whitespace usage.
|
||||||
|
IFS=" "" $nl"
|
||||||
|
|
||||||
|
file_conv=
|
||||||
|
|
||||||
|
# func_file_conv build_file lazy
|
||||||
|
# Convert a $build file to $host form and store it in $file
|
||||||
|
# Currently only supports Windows hosts. If the determined conversion
|
||||||
|
# type is listed in (the comma separated) LAZY, no conversion will
|
||||||
|
# take place.
|
||||||
|
func_file_conv ()
|
||||||
|
{
|
||||||
|
file=$1
|
||||||
|
case $file in
|
||||||
|
/ | /[!/]*) # absolute file, and not a UNC file
|
||||||
|
if test -z "$file_conv"; then
|
||||||
|
# lazily determine how to convert abs files
|
||||||
|
case `uname -s` in
|
||||||
|
MINGW*)
|
||||||
|
file_conv=mingw
|
||||||
|
;;
|
||||||
|
CYGWIN* | MSYS*)
|
||||||
|
file_conv=cygwin
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
file_conv=wine
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
case $file_conv/,$2, in
|
||||||
|
*,$file_conv,*)
|
||||||
|
;;
|
||||||
|
mingw/*)
|
||||||
|
file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
|
||||||
|
;;
|
||||||
|
cygwin/* | msys/*)
|
||||||
|
file=`cygpath -m "$file" || echo "$file"`
|
||||||
|
;;
|
||||||
|
wine/*)
|
||||||
|
file=`winepath -w "$file" || echo "$file"`
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# func_cl_dashL linkdir
|
||||||
|
# Make cl look for libraries in LINKDIR
|
||||||
|
func_cl_dashL ()
|
||||||
|
{
|
||||||
|
func_file_conv "$1"
|
||||||
|
if test -z "$lib_path"; then
|
||||||
|
lib_path=$file
|
||||||
|
else
|
||||||
|
lib_path="$lib_path;$file"
|
||||||
|
fi
|
||||||
|
linker_opts="$linker_opts -LIBPATH:$file"
|
||||||
|
}
|
||||||
|
|
||||||
|
# func_cl_dashl library
|
||||||
|
# Do a library search-path lookup for cl
|
||||||
|
func_cl_dashl ()
|
||||||
|
{
|
||||||
|
lib=$1
|
||||||
|
found=no
|
||||||
|
save_IFS=$IFS
|
||||||
|
IFS=';'
|
||||||
|
for dir in $lib_path $LIB
|
||||||
|
do
|
||||||
|
IFS=$save_IFS
|
||||||
|
if $shared && test -f "$dir/$lib.dll.lib"; then
|
||||||
|
found=yes
|
||||||
|
lib=$dir/$lib.dll.lib
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
if test -f "$dir/$lib.lib"; then
|
||||||
|
found=yes
|
||||||
|
lib=$dir/$lib.lib
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
if test -f "$dir/lib$lib.a"; then
|
||||||
|
found=yes
|
||||||
|
lib=$dir/lib$lib.a
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
IFS=$save_IFS
|
||||||
|
|
||||||
|
if test "$found" != yes; then
|
||||||
|
lib=$lib.lib
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# func_cl_wrapper cl arg...
|
||||||
|
# Adjust compile command to suit cl
|
||||||
|
func_cl_wrapper ()
|
||||||
|
{
|
||||||
|
# Assume a capable shell
|
||||||
|
lib_path=
|
||||||
|
shared=:
|
||||||
|
linker_opts=
|
||||||
|
for arg
|
||||||
|
do
|
||||||
|
if test -n "$eat"; then
|
||||||
|
eat=
|
||||||
|
else
|
||||||
|
case $1 in
|
||||||
|
-o)
|
||||||
|
# configure might choose to run compile as 'compile cc -o foo foo.c'.
|
||||||
|
eat=1
|
||||||
|
case $2 in
|
||||||
|
*.o | *.[oO][bB][jJ])
|
||||||
|
func_file_conv "$2"
|
||||||
|
set x "$@" -Fo"$file"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
func_file_conv "$2"
|
||||||
|
set x "$@" -Fe"$file"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
-I)
|
||||||
|
eat=1
|
||||||
|
func_file_conv "$2" mingw
|
||||||
|
set x "$@" -I"$file"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-I*)
|
||||||
|
func_file_conv "${1#-I}" mingw
|
||||||
|
set x "$@" -I"$file"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-l)
|
||||||
|
eat=1
|
||||||
|
func_cl_dashl "$2"
|
||||||
|
set x "$@" "$lib"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-l*)
|
||||||
|
func_cl_dashl "${1#-l}"
|
||||||
|
set x "$@" "$lib"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-L)
|
||||||
|
eat=1
|
||||||
|
func_cl_dashL "$2"
|
||||||
|
;;
|
||||||
|
-L*)
|
||||||
|
func_cl_dashL "${1#-L}"
|
||||||
|
;;
|
||||||
|
-static)
|
||||||
|
shared=false
|
||||||
|
;;
|
||||||
|
-Wl,*)
|
||||||
|
arg=${1#-Wl,}
|
||||||
|
save_ifs="$IFS"; IFS=','
|
||||||
|
for flag in $arg; do
|
||||||
|
IFS="$save_ifs"
|
||||||
|
linker_opts="$linker_opts $flag"
|
||||||
|
done
|
||||||
|
IFS="$save_ifs"
|
||||||
|
;;
|
||||||
|
-Xlinker)
|
||||||
|
eat=1
|
||||||
|
linker_opts="$linker_opts $2"
|
||||||
|
;;
|
||||||
|
-*)
|
||||||
|
set x "$@" "$1"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
|
||||||
|
func_file_conv "$1"
|
||||||
|
set x "$@" -Tp"$file"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
|
||||||
|
func_file_conv "$1" mingw
|
||||||
|
set x "$@" "$file"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
set x "$@" "$1"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
if test -n "$linker_opts"; then
|
||||||
|
linker_opts="-link$linker_opts"
|
||||||
|
fi
|
||||||
|
exec "$@" $linker_opts
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
eat=
|
||||||
|
|
||||||
|
case $1 in
|
||||||
|
'')
|
||||||
|
echo "$0: No command. Try '$0 --help' for more information." 1>&2
|
||||||
|
exit 1;
|
||||||
|
;;
|
||||||
|
-h | --h*)
|
||||||
|
cat <<\EOF
|
||||||
|
Usage: compile [--help] [--version] PROGRAM [ARGS]
|
||||||
|
|
||||||
|
Wrapper for compilers which do not understand '-c -o'.
|
||||||
|
Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
|
||||||
|
arguments, and rename the output as expected.
|
||||||
|
|
||||||
|
If you are trying to build a whole package this is not the
|
||||||
|
right script to run: please start by reading the file 'INSTALL'.
|
||||||
|
|
||||||
|
Report bugs to <bug-automake@gnu.org>.
|
||||||
|
EOF
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
-v | --v*)
|
||||||
|
echo "compile $scriptversion"
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
|
||||||
|
icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
|
||||||
|
func_cl_wrapper "$@" # Doesn't return...
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
ofile=
|
||||||
|
cfile=
|
||||||
|
|
||||||
|
for arg
|
||||||
|
do
|
||||||
|
if test -n "$eat"; then
|
||||||
|
eat=
|
||||||
|
else
|
||||||
|
case $1 in
|
||||||
|
-o)
|
||||||
|
# configure might choose to run compile as 'compile cc -o foo foo.c'.
|
||||||
|
# So we strip '-o arg' only if arg is an object.
|
||||||
|
eat=1
|
||||||
|
case $2 in
|
||||||
|
*.o | *.obj)
|
||||||
|
ofile=$2
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
set x "$@" -o "$2"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
*.c)
|
||||||
|
cfile=$1
|
||||||
|
set x "$@" "$1"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
set x "$@" "$1"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
if test -z "$ofile" || test -z "$cfile"; then
|
||||||
|
# If no '-o' option was seen then we might have been invoked from a
|
||||||
|
# pattern rule where we don't need one. That is ok -- this is a
|
||||||
|
# normal compilation that the losing compiler can handle. If no
|
||||||
|
# '.c' file was seen then we are probably linking. That is also
|
||||||
|
# ok.
|
||||||
|
exec "$@"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Name of file we expect compiler to create.
|
||||||
|
cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
|
||||||
|
|
||||||
|
# Create the lock directory.
|
||||||
|
# Note: use '[/\\:.-]' here to ensure that we don't use the same name
|
||||||
|
# that we are using for the .o file. Also, base the name on the expected
|
||||||
|
# object file name, since that is what matters with a parallel build.
|
||||||
|
lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
|
||||||
|
while true; do
|
||||||
|
if mkdir "$lockdir" >/dev/null 2>&1; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
# FIXME: race condition here if user kills between mkdir and trap.
|
||||||
|
trap "rmdir '$lockdir'; exit 1" 1 2 15
|
||||||
|
|
||||||
|
# Run the compile.
|
||||||
|
"$@"
|
||||||
|
ret=$?
|
||||||
|
|
||||||
|
if test -f "$cofile"; then
|
||||||
|
test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
|
||||||
|
elif test -f "${cofile}bj"; then
|
||||||
|
test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
|
||||||
|
fi
|
||||||
|
|
||||||
|
rmdir "$lockdir"
|
||||||
|
exit $ret
|
||||||
|
|
||||||
|
# Local Variables:
|
||||||
|
# mode: shell-script
|
||||||
|
# sh-indentation: 2
|
||||||
|
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||||
|
# time-stamp-start: "scriptversion="
|
||||||
|
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||||
|
# time-stamp-time-zone: "UTC0"
|
||||||
|
# time-stamp-end: "; # UTC"
|
||||||
|
# End:
|
||||||
1715
config.guess
vendored
1715
config.guess
vendored
File diff suppressed because it is too large
Load diff
572
config.h.in
572
config.h.in
|
|
@ -1,310 +1,442 @@
|
||||||
/* config.h.in. Generated automatically from configure.in by autoheader 2.13. */
|
/* config.h.in. Generated from configure.ac by autoheader. */
|
||||||
|
|
||||||
/* Define if using alloca.c. */
|
/* Support for jumbograms (packets up to 9000 bytes) */
|
||||||
#undef C_ALLOCA
|
#undef ENABLE_JUMBOGRAMS
|
||||||
|
|
||||||
/* Define to empty if the keyword does not work. */
|
/* Support for tunemu */
|
||||||
#undef const
|
#undef ENABLE_TUNEMU
|
||||||
|
|
||||||
/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems.
|
/* Support for UML */
|
||||||
This function is required for alloca.c support on those systems. */
|
#undef ENABLE_UML
|
||||||
#undef CRAY_STACKSEG_END
|
|
||||||
|
|
||||||
/* Define if you have alloca, as a function or macro. */
|
/* Support for VDE */
|
||||||
#undef HAVE_ALLOCA
|
#undef ENABLE_VDE
|
||||||
|
|
||||||
/* Define if you have <alloca.h> and it should be used (not on Ultrix). */
|
/* Define to 1 if you have the <arpa/inet.h> header file. */
|
||||||
#undef HAVE_ALLOCA_H
|
#undef HAVE_ARPA_INET_H
|
||||||
|
|
||||||
/* Define if you have a working `mmap' system call. */
|
/* Define to 1 if you have the <arpa/nameser.h> header file. */
|
||||||
#undef HAVE_MMAP
|
#undef HAVE_ARPA_NAMESER_H
|
||||||
|
|
||||||
/* Define as __inline if that's what the C compiler calls it. */
|
/* Define to 1 if you have the `asprintf' function. */
|
||||||
#undef inline
|
#undef HAVE_ASPRINTF
|
||||||
|
|
||||||
/* Define to `long' if <sys/types.h> doesn't define. */
|
/* Define to 1 if you have the `BN_GENCB_new' function. */
|
||||||
#undef off_t
|
#undef HAVE_BN_GENCB_NEW
|
||||||
|
|
||||||
/* Define to `int' if <sys/types.h> doesn't define. */
|
/* Unknown BSD variant */
|
||||||
#undef pid_t
|
#undef HAVE_BSD
|
||||||
|
|
||||||
/* Define as the return type of signal handlers (int or void). */
|
/* Cygwin */
|
||||||
#undef RETSIGTYPE
|
#undef HAVE_CYGWIN
|
||||||
|
|
||||||
/* Define to `unsigned' if <sys/types.h> doesn't define. */
|
/* Define to 1 if you have the `daemon' function. */
|
||||||
#undef size_t
|
#undef HAVE_DAEMON
|
||||||
|
|
||||||
/* If using the C implementation of alloca, define if you know the
|
/* Darwin (MacOS/X) */
|
||||||
direction of stack growth for your system; otherwise it will be
|
#undef HAVE_DARWIN
|
||||||
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. */
|
/* Define to 1 if you have the declaration of `EVP_aes_256_cfb', and to 0 if
|
||||||
#undef STDC_HEADERS
|
you don't. */
|
||||||
|
#undef HAVE_DECL_EVP_AES_256_CFB
|
||||||
|
|
||||||
/* Define if you can safely include both <sys/time.h> and <time.h>. */
|
/* Define to 1 if you have the declaration of `freeaddrinfo', and to 0 if you
|
||||||
#undef TIME_WITH_SYS_TIME
|
don't. */
|
||||||
|
#undef HAVE_DECL_FREEADDRINFO
|
||||||
|
|
||||||
/* Define if your <sys/time.h> declares struct tm. */
|
/* Define to 1 if you have the declaration of `gai_strerror', and to 0 if you
|
||||||
#undef TM_IN_SYS_TIME
|
don't. */
|
||||||
|
#undef HAVE_DECL_GAI_STRERROR
|
||||||
|
|
||||||
/* Define to rpl_malloc if the replacement function should be used. */
|
/* Define to 1 if you have the declaration of `getaddrinfo', and to 0 if you
|
||||||
#undef malloc
|
don't. */
|
||||||
|
#undef HAVE_DECL_GETADDRINFO
|
||||||
|
|
||||||
/* Define to rpl_realloc if the replacement function should be used. */
|
/* Define to 1 if you have the declaration of `getnameinfo', and to 0 if you
|
||||||
#undef realloc
|
don't. */
|
||||||
|
#undef HAVE_DECL_GETNAMEINFO
|
||||||
|
|
||||||
/* This is always defined. It enables GNU extensions on systems that
|
/* Define to 1 if you have the declaration of `OpenSSL_add_all_algorithms',
|
||||||
have them. */
|
and to 0 if you don't. */
|
||||||
#if !defined(_GNU_SOURCE)
|
#undef HAVE_DECL_OPENSSL_ADD_ALL_ALGORITHMS
|
||||||
# undef _GNU_SOURCE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Linux */
|
/* Define to 1 if you have the declaration of `res_init', and to 0 if you
|
||||||
#undef HAVE_LINUX
|
don't. */
|
||||||
|
#undef HAVE_DECL_RES_INIT
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `devname' function. */
|
||||||
|
#undef HAVE_DEVNAME
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <dirent.h> header file. */
|
||||||
|
#undef HAVE_DIRENT_H
|
||||||
|
|
||||||
|
/* DragonFly */
|
||||||
|
#undef HAVE_DRAGONFLY
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `EVP_CIPHER_CTX_new' function. */
|
||||||
|
#undef HAVE_EVP_CIPHER_CTX_NEW
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `EVP_EncryptInit_ex' function. */
|
||||||
|
#undef HAVE_EVP_ENCRYPTINIT_EX
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fchmod' function. */
|
||||||
|
#undef HAVE_FCHMOD
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fdevname' function. */
|
||||||
|
#undef HAVE_FDEVNAME
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `flock' function. */
|
||||||
|
#undef HAVE_FLOCK
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fork' function. */
|
||||||
|
#undef HAVE_FORK
|
||||||
|
|
||||||
/* FreeBSD */
|
/* FreeBSD */
|
||||||
#undef HAVE_FREEBSD
|
#undef HAVE_FREEBSD
|
||||||
|
|
||||||
/* OpenBSD */
|
/* Define to 1 if you have the <getopt.h> header file. */
|
||||||
#undef HAVE_OPENBSD
|
#undef HAVE_GETOPT_H
|
||||||
|
|
||||||
/* Solaris */
|
/* getopt_long() */
|
||||||
#undef HAVE_SOLARIS
|
#undef HAVE_GETOPT_LONG
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `gettimeofday' function. */
|
||||||
|
#undef HAVE_GETTIMEOFDAY
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||||
|
#undef HAVE_INTTYPES_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `nsl' library (-lnsl). */
|
||||||
|
#undef HAVE_LIBNSL
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `resolv' library (-lresolv). */
|
||||||
|
#undef HAVE_LIBRESOLV
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `socket' library (-lsocket). */
|
||||||
|
#undef HAVE_LIBSOCKET
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <libvdeplug_dyn.h> header file. */
|
||||||
|
#undef HAVE_LIBVDEPLUG_DYN_H
|
||||||
|
|
||||||
|
/* Linux */
|
||||||
|
#undef HAVE_LINUX
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <linux/if_tun.h> header file. */
|
||||||
|
#undef HAVE_LINUX_IF_TUN_H
|
||||||
|
|
||||||
|
/* enable lzo compression support */
|
||||||
|
#undef HAVE_LZO
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <lzo1x.h> header file. */
|
||||||
|
#undef HAVE_LZO1X_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <lzo2/lzo1x.h> header file. */
|
||||||
|
#undef HAVE_LZO2_LZO1X_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <lzo/lzo1x.h> header file. */
|
||||||
|
#undef HAVE_LZO_LZO1X_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <memory.h> header file. */
|
||||||
|
#undef HAVE_MEMORY_H
|
||||||
|
|
||||||
|
/* MinGW */
|
||||||
|
#undef HAVE_MINGW
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `mlockall' function. */
|
||||||
|
#undef HAVE_MLOCKALL
|
||||||
|
|
||||||
/* NetBSD */
|
/* NetBSD */
|
||||||
#undef HAVE_NETBSD
|
#undef HAVE_NETBSD
|
||||||
|
|
||||||
/* Define to 1 if tun/tap support is enabled and found */
|
/* Define to 1 if you have the <netdb.h> header file. */
|
||||||
#undef HAVE_TUNTAP
|
#undef HAVE_NETDB_H
|
||||||
|
|
||||||
/* Define to the location of if_tun.h */
|
/* Define to 1 if you have the <netinet/icmp6.h> header file. */
|
||||||
#undef LINUX_IF_TUN_H
|
#undef HAVE_NETINET_ICMP6_H
|
||||||
|
|
||||||
/* Define to 1 if support for jumbograms is enabled */
|
/* Define to 1 if you have the <netinet/if_ether.h> header file. */
|
||||||
#undef ENABLE_JUMBOGRAMS
|
#undef HAVE_NETINET_IF_ETHER_H
|
||||||
|
|
||||||
/* Define to 1 if checkpoint tracing is enabled */
|
/* Define to 1 if you have the <netinet/in6.h> header file. */
|
||||||
#undef ENABLE_TRACING
|
#undef HAVE_NETINET_IN6_H
|
||||||
|
|
||||||
/* Define to enable use of old SSLeay_add_all_algorithms() function */
|
/* Define to 1 if you have the <netinet/in.h> header file. */
|
||||||
#undef HAVE_SSLEAY_ADD_ALL_ALGORITHMS
|
#undef HAVE_NETINET_IN_H
|
||||||
|
|
||||||
/* Define if you have the DONE_WORKING_MALLOC_CHECK function. */
|
/* Define to 1 if you have the <netinet/in_systm.h> header file. */
|
||||||
#undef HAVE_DONE_WORKING_MALLOC_CHECK
|
#undef HAVE_NETINET_IN_SYSTM_H
|
||||||
|
|
||||||
/* Define if you have the DONE_WORKING_REALLOC_CHECK function. */
|
/* Define to 1 if you have the <netinet/ip6.h> header file. */
|
||||||
#undef HAVE_DONE_WORKING_REALLOC_CHECK
|
#undef HAVE_NETINET_IP6_H
|
||||||
|
|
||||||
/* Define if you have the RAND_pseudo_bytes function. */
|
/* Define to 1 if you have the <netinet/ip.h> header file. */
|
||||||
#undef HAVE_RAND_PSEUDO_BYTES
|
#undef HAVE_NETINET_IP_H
|
||||||
|
|
||||||
/* Define if you have the __argz_count function. */
|
/* Define to 1 if you have the <netinet/ip_icmp.h> header file. */
|
||||||
#undef HAVE___ARGZ_COUNT
|
#undef HAVE_NETINET_IP_ICMP_H
|
||||||
|
|
||||||
/* Define if you have the __argz_next function. */
|
/* Define to 1 if you have the <netinet/tcp.h> header file. */
|
||||||
#undef HAVE___ARGZ_NEXT
|
#undef HAVE_NETINET_TCP_H
|
||||||
|
|
||||||
/* Define if you have the __argz_stringify function. */
|
/* Define to 1 if you have the <netpacket/packet.h> header file. */
|
||||||
#undef HAVE___ARGZ_STRINGIFY
|
#undef HAVE_NETPACKET_PACKET_H
|
||||||
|
|
||||||
/* Define if you have the asprintf function. */
|
/* Define to 1 if you have the <net/ethernet.h> header file. */
|
||||||
#undef HAVE_ASPRINTF
|
#undef HAVE_NET_ETHERNET_H
|
||||||
|
|
||||||
/* Define if you have the daemon function. */
|
/* Define to 1 if you have the <net/if_arp.h> header file. */
|
||||||
#undef HAVE_DAEMON
|
#undef HAVE_NET_IF_ARP_H
|
||||||
|
|
||||||
/* Define if you have the dcgettext function. */
|
/* Define to 1 if you have the <net/if.h> header file. */
|
||||||
#undef HAVE_DCGETTEXT
|
#undef HAVE_NET_IF_H
|
||||||
|
|
||||||
/* Define if you have the fcloseall function. */
|
/* Define to 1 if you have the <net/if_tap.h> header file. */
|
||||||
#undef HAVE_FCLOSEALL
|
#undef HAVE_NET_IF_TAP_H
|
||||||
|
|
||||||
/* Define if you have the feof_unlocked function. */
|
/* Define to 1 if you have the <net/if_tun.h> header file. */
|
||||||
#undef HAVE_FEOF_UNLOCKED
|
#undef HAVE_NET_IF_TUN_H
|
||||||
|
|
||||||
/* Define if you have the fgets_unlocked function. */
|
/* Define to 1 if you have the <net/if_types.h> header file. */
|
||||||
#undef HAVE_FGETS_UNLOCKED
|
#undef HAVE_NET_IF_TYPES_H
|
||||||
|
|
||||||
/* Define if you have the flock function. */
|
/* Define to 1 if you have the <net/if_utun.h> header file. */
|
||||||
#undef HAVE_FLOCK
|
#undef HAVE_NET_IF_UTUN_H
|
||||||
|
|
||||||
/* Define if you have the ftime function. */
|
/* Define to 1 if you have the <net/tap/if_tap.h> header file. */
|
||||||
#undef HAVE_FTIME
|
#undef HAVE_NET_TAP_IF_TAP_H
|
||||||
|
|
||||||
/* Define if you have the get_current_dir_name function. */
|
/* Define to 1 if you have the <net/tun/if_tun.h> header file. */
|
||||||
#undef HAVE_GET_CURRENT_DIR_NAME
|
#undef HAVE_NET_TUN_IF_TUN_H
|
||||||
|
|
||||||
/* Define if you have the getcwd function. */
|
/* OpenBSD */
|
||||||
#undef HAVE_GETCWD
|
#undef HAVE_OPENBSD
|
||||||
|
|
||||||
/* Define if you have the getegid function. */
|
/* Define to 1 if you have the <openssl/engine.h> header file. */
|
||||||
#undef HAVE_GETEGID
|
#undef HAVE_OPENSSL_ENGINE_H
|
||||||
|
|
||||||
/* Define if you have the geteuid function. */
|
/* Define to 1 if you have the <openssl/err.h> header file. */
|
||||||
#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 you have the getuid function. */
|
|
||||||
#undef HAVE_GETUID
|
|
||||||
|
|
||||||
/* Define if you have the mempcpy function. */
|
|
||||||
#undef HAVE_MEMPCPY
|
|
||||||
|
|
||||||
/* Define if you have the munmap function. */
|
|
||||||
#undef HAVE_MUNMAP
|
|
||||||
|
|
||||||
/* Define if you have the putenv function. */
|
|
||||||
#undef HAVE_PUTENV
|
|
||||||
|
|
||||||
/* Define if you have the select function. */
|
|
||||||
#undef HAVE_SELECT
|
|
||||||
|
|
||||||
/* 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 socket function. */
|
|
||||||
#undef HAVE_SOCKET
|
|
||||||
|
|
||||||
/* 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 strsignal function. */
|
|
||||||
#undef HAVE_STRSIGNAL
|
|
||||||
|
|
||||||
/* Define if you have the strtol function. */
|
|
||||||
#undef HAVE_STRTOL
|
|
||||||
|
|
||||||
/* Define if you have the strtoul function. */
|
|
||||||
#undef HAVE_STRTOUL
|
|
||||||
|
|
||||||
/* Define if you have the tsearch function. */
|
|
||||||
#undef HAVE_TSEARCH
|
|
||||||
|
|
||||||
/* Define if you have the unsetenv function. */
|
|
||||||
#undef HAVE_UNSETENV
|
|
||||||
|
|
||||||
/* Define if you have the <argz.h> header file. */
|
|
||||||
#undef HAVE_ARGZ_H
|
|
||||||
|
|
||||||
/* Define if you have the <fcntl.h> header file. */
|
|
||||||
#undef HAVE_FCNTL_H
|
|
||||||
|
|
||||||
/* Define if you have the <limits.h> header file. */
|
|
||||||
#undef HAVE_LIMITS_H
|
|
||||||
|
|
||||||
/* Define if you have the <locale.h> header file. */
|
|
||||||
#undef HAVE_LOCALE_H
|
|
||||||
|
|
||||||
/* Define if you have the <malloc.h> header file. */
|
|
||||||
#undef HAVE_MALLOC_H
|
|
||||||
|
|
||||||
/* Define if you have the <nl_types.h> header file. */
|
|
||||||
#undef HAVE_NL_TYPES_H
|
|
||||||
|
|
||||||
/* Define if you have the <openssl/err.h> header file. */
|
|
||||||
#undef HAVE_OPENSSL_ERR_H
|
#undef HAVE_OPENSSL_ERR_H
|
||||||
|
|
||||||
/* Define if you have the <openssl/evp.h> header file. */
|
/* Define to 1 if you have the <openssl/evp.h> header file. */
|
||||||
#undef HAVE_OPENSSL_EVP_H
|
#undef HAVE_OPENSSL_EVP_H
|
||||||
|
|
||||||
/* Define if you have the <openssl/pem.h> header file. */
|
/* Define to 1 if you have the <openssl/pem.h> header file. */
|
||||||
#undef HAVE_OPENSSL_PEM_H
|
#undef HAVE_OPENSSL_PEM_H
|
||||||
|
|
||||||
/* Define if you have the <openssl/rand.h> header file. */
|
/* Define to 1 if you have the <openssl/rand.h> header file. */
|
||||||
#undef HAVE_OPENSSL_RAND_H
|
#undef HAVE_OPENSSL_RAND_H
|
||||||
|
|
||||||
/* Define if you have the <openssl/rsa.h> header file. */
|
/* Define to 1 if you have the <openssl/rsa.h> header file. */
|
||||||
#undef HAVE_OPENSSL_RSA_H
|
#undef HAVE_OPENSSL_RSA_H
|
||||||
|
|
||||||
/* Define if you have the <openssl/sha.h> header file. */
|
/* Define to 1 if you have the <openssl/sha.h> header file. */
|
||||||
#undef HAVE_OPENSSL_SHA_H
|
#undef HAVE_OPENSSL_SHA_H
|
||||||
|
|
||||||
/* Define if you have the <stddef.h> header file. */
|
/* Define to 1 if you have the `pselect' function. */
|
||||||
#undef HAVE_STDDEF_H
|
#undef HAVE_PSELECT
|
||||||
|
|
||||||
/* Define if you have the <stdlib.h> header file. */
|
/* Define to 1 if you have the `putenv' function. */
|
||||||
|
#undef HAVE_PUTENV
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `RAND_bytes' function. */
|
||||||
|
#undef HAVE_RAND_BYTES
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <resolv.h> header file. */
|
||||||
|
#undef HAVE_RESOLV_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `RSA_set0_key' function. */
|
||||||
|
#undef HAVE_RSA_SET0_KEY
|
||||||
|
|
||||||
|
/* Define to 1 if the system has the type `socklen_t'. */
|
||||||
|
#undef HAVE_SOCKLEN_T
|
||||||
|
|
||||||
|
/* Solaris/SunOS */
|
||||||
|
#undef HAVE_SOLARIS
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdint.h> header file. */
|
||||||
|
#undef HAVE_STDINT_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||||
#undef HAVE_STDLIB_H
|
#undef HAVE_STDLIB_H
|
||||||
|
|
||||||
/* Define if you have the <string.h> header file. */
|
/* Define to 1 if you have the <strings.h> header file. */
|
||||||
#undef HAVE_STRING_H
|
|
||||||
|
|
||||||
/* Define if you have the <strings.h> header file. */
|
|
||||||
#undef HAVE_STRINGS_H
|
#undef HAVE_STRINGS_H
|
||||||
|
|
||||||
/* Define if you have the <sys/file.h> header file. */
|
/* Define to 1 if you have the <string.h> header file. */
|
||||||
#undef HAVE_SYS_FILE_H
|
#undef HAVE_STRING_H
|
||||||
|
|
||||||
/* Define if you have the <sys/ioctl.h> header file. */
|
/* Define to 1 if you have the `strsignal' function. */
|
||||||
#undef HAVE_SYS_IOCTL_H
|
#undef HAVE_STRSIGNAL
|
||||||
|
|
||||||
/* Define if you have the <sys/param.h> header file. */
|
/* Define to 1 if the system has the type `struct addrinfo'. */
|
||||||
#undef HAVE_SYS_PARAM_H
|
#undef HAVE_STRUCT_ADDRINFO
|
||||||
|
|
||||||
/* Define if you have the <sys/time.h> header file. */
|
/* Define to 1 if the system has the type `struct arphdr'. */
|
||||||
#undef HAVE_SYS_TIME_H
|
#undef HAVE_STRUCT_ARPHDR
|
||||||
|
|
||||||
/* Define if you have the <syslog.h> header file. */
|
/* Define to 1 if the system has the type `struct ether_arp'. */
|
||||||
|
#undef HAVE_STRUCT_ETHER_ARP
|
||||||
|
|
||||||
|
/* Define to 1 if the system has the type `struct ether_header'. */
|
||||||
|
#undef HAVE_STRUCT_ETHER_HEADER
|
||||||
|
|
||||||
|
/* Define to 1 if the system has the type `struct icmp'. */
|
||||||
|
#undef HAVE_STRUCT_ICMP
|
||||||
|
|
||||||
|
/* Define to 1 if the system has the type `struct icmp6_hdr'. */
|
||||||
|
#undef HAVE_STRUCT_ICMP6_HDR
|
||||||
|
|
||||||
|
/* Define to 1 if the system has the type `struct in6_addr'. */
|
||||||
|
#undef HAVE_STRUCT_IN6_ADDR
|
||||||
|
|
||||||
|
/* Define to 1 if the system has the type `struct in_addr'. */
|
||||||
|
#undef HAVE_STRUCT_IN_ADDR
|
||||||
|
|
||||||
|
/* Define to 1 if the system has the type `struct ip'. */
|
||||||
|
#undef HAVE_STRUCT_IP
|
||||||
|
|
||||||
|
/* Define to 1 if the system has the type `struct ip6_hdr'. */
|
||||||
|
#undef HAVE_STRUCT_IP6_HDR
|
||||||
|
|
||||||
|
/* Define to 1 if the system has the type `struct nd_neighbor_solicit'. */
|
||||||
|
#undef HAVE_STRUCT_ND_NEIGHBOR_SOLICIT
|
||||||
|
|
||||||
|
/* Define to 1 if the system has the type `struct nd_opt_hdr'. */
|
||||||
|
#undef HAVE_STRUCT_ND_OPT_HDR
|
||||||
|
|
||||||
|
/* Define to 1 if the system has the type `struct sockaddr_in6'. */
|
||||||
|
#undef HAVE_STRUCT_SOCKADDR_IN6
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <syslog.h> header file. */
|
||||||
#undef HAVE_SYSLOG_H
|
#undef HAVE_SYSLOG_H
|
||||||
|
|
||||||
/* Define if you have the <unistd.h> header file. */
|
/* Define to 1 if you have the `system' function. */
|
||||||
|
#undef HAVE_SYSTEM
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/file.h> header file. */
|
||||||
|
#undef HAVE_SYS_FILE_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/ioctl.h> header file. */
|
||||||
|
#undef HAVE_SYS_IOCTL_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/mman.h> header file. */
|
||||||
|
#undef HAVE_SYS_MMAN_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/param.h> header file. */
|
||||||
|
#undef HAVE_SYS_PARAM_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/resource.h> header file. */
|
||||||
|
#undef HAVE_SYS_RESOURCE_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/socket.h> header file. */
|
||||||
|
#undef HAVE_SYS_SOCKET_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||||
|
#undef HAVE_SYS_STAT_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/time.h> header file. */
|
||||||
|
#undef HAVE_SYS_TIME_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||||
|
#undef HAVE_SYS_TYPES_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/uio.h> header file. */
|
||||||
|
#undef HAVE_SYS_UIO_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <sys/wait.h> header file. */
|
||||||
|
#undef HAVE_SYS_WAIT_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <unistd.h> header file. */
|
||||||
#undef HAVE_UNISTD_H
|
#undef HAVE_UNISTD_H
|
||||||
|
|
||||||
/* Define if you have the <zlib.h> header file. */
|
/* Define to 1 if you have the `unsetenv' function. */
|
||||||
|
#undef HAVE_UNSETENV
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `usleep' function. */
|
||||||
|
#undef HAVE_USLEEP
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `vsyslog' function. */
|
||||||
|
#undef HAVE_VSYSLOG
|
||||||
|
|
||||||
|
/* have zlib compression support */
|
||||||
|
#undef HAVE_ZLIB
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <zlib.h> header file. */
|
||||||
#undef HAVE_ZLIB_H
|
#undef HAVE_ZLIB_H
|
||||||
|
|
||||||
/* Define if you have the nsl library (-lnsl). */
|
/* Location of lzo1x.h */
|
||||||
#undef HAVE_LIBNSL
|
#undef LZO1X_H
|
||||||
|
|
||||||
/* Define if you have the socket library (-lsocket). */
|
|
||||||
#undef HAVE_LIBSOCKET
|
|
||||||
|
|
||||||
/* Name of package */
|
/* Name of package */
|
||||||
#undef PACKAGE
|
#undef PACKAGE
|
||||||
|
|
||||||
|
/* Define to the address where bug reports for this package should be sent. */
|
||||||
|
#undef PACKAGE_BUGREPORT
|
||||||
|
|
||||||
|
/* Define to the full name of this package. */
|
||||||
|
#undef PACKAGE_NAME
|
||||||
|
|
||||||
|
/* Define to the full name and version of this package. */
|
||||||
|
#undef PACKAGE_STRING
|
||||||
|
|
||||||
|
/* Define to the one symbol short name of this package. */
|
||||||
|
#undef PACKAGE_TARNAME
|
||||||
|
|
||||||
|
/* Define to the home page for this package. */
|
||||||
|
#undef PACKAGE_URL
|
||||||
|
|
||||||
|
/* Define to the version of this package. */
|
||||||
|
#undef PACKAGE_VERSION
|
||||||
|
|
||||||
|
/* Define as the return type of signal handlers (`int' or `void'). */
|
||||||
|
#undef RETSIGTYPE
|
||||||
|
|
||||||
|
/* Define to 1 if you have the ANSI C header files. */
|
||||||
|
#undef STDC_HEADERS
|
||||||
|
|
||||||
|
/* Enable extensions on AIX 3, Interix. */
|
||||||
|
#ifndef _ALL_SOURCE
|
||||||
|
# undef _ALL_SOURCE
|
||||||
|
#endif
|
||||||
|
/* Enable GNU extensions on systems that have them. */
|
||||||
|
#ifndef _GNU_SOURCE
|
||||||
|
# undef _GNU_SOURCE
|
||||||
|
#endif
|
||||||
|
/* Enable threading extensions on Solaris. */
|
||||||
|
#ifndef _POSIX_PTHREAD_SEMANTICS
|
||||||
|
# undef _POSIX_PTHREAD_SEMANTICS
|
||||||
|
#endif
|
||||||
|
/* Enable extensions on HP NonStop. */
|
||||||
|
#ifndef _TANDEM_SOURCE
|
||||||
|
# undef _TANDEM_SOURCE
|
||||||
|
#endif
|
||||||
|
/* Enable general extensions on Solaris. */
|
||||||
|
#ifndef __EXTENSIONS__
|
||||||
|
# undef __EXTENSIONS__
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Version number of package */
|
/* Version number of package */
|
||||||
#undef VERSION
|
#undef VERSION
|
||||||
|
|
||||||
/* Define if you have the iconv() function. */
|
/* Compile with support for Windows 2000 */
|
||||||
#undef HAVE_ICONV
|
#undef WITH_WINDOWS2000
|
||||||
|
|
||||||
/* Define as const if the declaration of iconv() needs const. */
|
/* Define to 1 if on MINIX. */
|
||||||
#undef ICONV_CONST
|
#undef _MINIX
|
||||||
|
|
||||||
/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
|
/* Define to 2 if the system does not provide POSIX.1 features except with
|
||||||
#undef HAVE_LANGINFO_CODESET
|
this defined. */
|
||||||
|
#undef _POSIX_1_SOURCE
|
||||||
|
|
||||||
/* Define if your <locale.h> file defines LC_MESSAGES. */
|
/* Define to 1 if you need to in order for `stat' and other things to work. */
|
||||||
#undef HAVE_LC_MESSAGES
|
#undef _POSIX_SOURCE
|
||||||
|
|
||||||
/* Define to 1 if translation of program messages to the user's native language
|
/* Enable BSD extensions */
|
||||||
is requested. */
|
#undef __USE_BSD
|
||||||
#undef ENABLE_NLS
|
|
||||||
|
|
||||||
/* Define if the GNU gettext() function is already present or preinstalled. */
|
/* Defined if the __malloc__ attribute is not supported. */
|
||||||
#undef HAVE_GETTEXT
|
#undef __malloc__
|
||||||
|
|
||||||
|
/* Define to `int' if <sys/types.h> does not define. */
|
||||||
|
#undef pid_t
|
||||||
|
|
|
||||||
848
config.sub
vendored
848
config.sub
vendored
File diff suppressed because it is too large
Load diff
247
configure.ac
Normal file
247
configure.ac
Normal file
|
|
@ -0,0 +1,247 @@
|
||||||
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
|
|
||||||
|
AC_PREREQ(2.61)
|
||||||
|
AC_INIT([tinc], [1.0.36])
|
||||||
|
AC_CONFIG_SRCDIR([src/tincd.c])
|
||||||
|
AM_INIT_AUTOMAKE([1.11 check-news std-options subdir-objects nostdinc silent-rules -Wall])
|
||||||
|
AC_CONFIG_HEADERS([config.h])
|
||||||
|
AC_CONFIG_MACRO_DIR([m4])
|
||||||
|
AM_SILENT_RULES([yes])
|
||||||
|
|
||||||
|
# Enable GNU extensions.
|
||||||
|
# Define this here, not in acconfig's @TOP@ section, since definitions
|
||||||
|
# in the latter don't make it into the configure-time tests.
|
||||||
|
AC_GNU_SOURCE
|
||||||
|
AC_DEFINE([__USE_BSD], 1, [Enable BSD extensions])
|
||||||
|
|
||||||
|
dnl Checks for programs.
|
||||||
|
AC_PROG_CC_C99
|
||||||
|
AC_PROG_CPP
|
||||||
|
AC_PROG_INSTALL
|
||||||
|
|
||||||
|
AM_PROG_CC_C_O
|
||||||
|
|
||||||
|
dnl Check and set OS
|
||||||
|
|
||||||
|
AC_CANONICAL_HOST
|
||||||
|
|
||||||
|
case $host_os in
|
||||||
|
*linux*)
|
||||||
|
linux=true
|
||||||
|
AC_DEFINE(HAVE_LINUX, 1, [Linux])
|
||||||
|
;;
|
||||||
|
*freebsd*)
|
||||||
|
bsd=true
|
||||||
|
AC_DEFINE(HAVE_FREEBSD, 1, [FreeBSD])
|
||||||
|
;;
|
||||||
|
*darwin*)
|
||||||
|
bsd=true
|
||||||
|
AC_DEFINE(HAVE_DARWIN, 1, [Darwin (MacOS/X)])
|
||||||
|
;;
|
||||||
|
*solaris*)
|
||||||
|
solaris=true
|
||||||
|
AC_DEFINE(HAVE_SOLARIS, 1, [Solaris/SunOS])
|
||||||
|
;;
|
||||||
|
*openbsd*)
|
||||||
|
bsd=true
|
||||||
|
AC_DEFINE(HAVE_OPENBSD, 1, [OpenBSD])
|
||||||
|
;;
|
||||||
|
*netbsd*)
|
||||||
|
bsd=true
|
||||||
|
AC_DEFINE(HAVE_NETBSD, 1, [NetBSD])
|
||||||
|
;;
|
||||||
|
*dragonfly*)
|
||||||
|
bsd=true
|
||||||
|
AC_DEFINE(HAVE_DRAGONFLY, 1, [DragonFly])
|
||||||
|
;;
|
||||||
|
*bsd*)
|
||||||
|
bsd=true
|
||||||
|
AC_MSG_WARN("Unknown BSD variant, tinc might not compile or work!")
|
||||||
|
AC_DEFINE(HAVE_BSD, 1, [Unknown BSD variant])
|
||||||
|
;;
|
||||||
|
*cygwin*)
|
||||||
|
cygwin=true
|
||||||
|
AC_DEFINE(HAVE_CYGWIN, 1, [Cygwin])
|
||||||
|
;;
|
||||||
|
*mingw*)
|
||||||
|
mingw=true
|
||||||
|
AC_DEFINE(HAVE_MINGW, 1, [MinGW])
|
||||||
|
LIBS="$LIBS -lws2_32 -lgdi32 -lcrypt32"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
AC_MSG_ERROR("Unknown operating system.")
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(uml,
|
||||||
|
AS_HELP_STRING([--enable-uml], [enable support for User Mode Linux]),
|
||||||
|
[ AS_IF([test "x$enable_uml" = "xyes"],
|
||||||
|
[ AC_DEFINE(ENABLE_UML, 1, [Support for UML])
|
||||||
|
uml=true
|
||||||
|
],
|
||||||
|
[uml=false])
|
||||||
|
],
|
||||||
|
[uml=false]
|
||||||
|
)
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(vde,
|
||||||
|
AS_HELP_STRING([--enable-vde], [enable support for Virtual Distributed Ethernet]),
|
||||||
|
[ AS_IF([test "x$enable_vde" = "xyes"],
|
||||||
|
[ AC_CHECK_HEADERS(libvdeplug_dyn.h, [], [AC_MSG_ERROR([VDE plug header files not found.]); break])
|
||||||
|
AC_DEFINE(ENABLE_VDE, 1, [Support for VDE])
|
||||||
|
vde=true
|
||||||
|
],
|
||||||
|
[vde=false])
|
||||||
|
],
|
||||||
|
[vde=false]
|
||||||
|
)
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(tunemu,
|
||||||
|
AS_HELP_STRING([--enable-tunemu], [enable support for the tunemu driver]),
|
||||||
|
[ AS_IF([test "x$enable_tunemu" = "xyes"],
|
||||||
|
[ AC_DEFINE(ENABLE_TUNEMU, 1, [Support for tunemu])
|
||||||
|
tunemu=true
|
||||||
|
],
|
||||||
|
[tunemu=false])
|
||||||
|
],
|
||||||
|
[tunemu=false]
|
||||||
|
)
|
||||||
|
|
||||||
|
AC_ARG_WITH(windows2000,
|
||||||
|
AS_HELP_STRING([--with-windows2000], [compile with support for Windows 2000. This disables support for tunneling over existing IPv6 networks.]),
|
||||||
|
[ AS_IF([test "x$with_windows2000" = "xyes"],
|
||||||
|
[AC_DEFINE(WITH_WINDOWS2000, 1, [Compile with support for Windows 2000])])
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
AC_ARG_WITH(systemd,
|
||||||
|
AS_HELP_STRING([--with-systemd@<:@=DIR@:>@], [install systemd service files @<:@to DIR if specified@:>@]),
|
||||||
|
[ systemd=true; systemd_path="$with_systemd" ],
|
||||||
|
[ systemd=false ]
|
||||||
|
)
|
||||||
|
|
||||||
|
AS_IF([test "x$with_systemd" = "xyes"], [systemd_path="\${libdir}/systemd/system"],
|
||||||
|
[AS_IF([test "x$with_systemd" = "xno"], [systemd=false])])
|
||||||
|
|
||||||
|
AC_SUBST(systemd_path, $systemd_path)
|
||||||
|
|
||||||
|
AM_CONDITIONAL(LINUX, test "$linux" = true)
|
||||||
|
AM_CONDITIONAL(BSD, test "$bsd" = true)
|
||||||
|
AM_CONDITIONAL(SOLARIS, test "$solaris" = true)
|
||||||
|
AM_CONDITIONAL(MINGW, test "$mingw" = true)
|
||||||
|
AM_CONDITIONAL(CYGWIN, test "$cygwin" = true)
|
||||||
|
AM_CONDITIONAL(UML, test "$uml" = true)
|
||||||
|
AM_CONDITIONAL(VDE, test "$vde" = true)
|
||||||
|
AM_CONDITIONAL(TUNEMU, test "$tunemu" = true)
|
||||||
|
AM_CONDITIONAL(WITH_SYSTEMD, test "$systemd" = true)
|
||||||
|
|
||||||
|
AC_CACHE_SAVE
|
||||||
|
|
||||||
|
if test -d /sw/include ; then
|
||||||
|
CPPFLAGS="$CPPFLAGS -I/sw/include"
|
||||||
|
fi
|
||||||
|
if test -d /sw/lib ; then
|
||||||
|
LIBS="$LIBS -L/sw/lib"
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl Compiler hardening flags
|
||||||
|
dnl No -fstack-protector-all because it doesn't work on all platforms or architectures.
|
||||||
|
|
||||||
|
AX_CFLAGS_WARN_ALL(CFLAGS)
|
||||||
|
|
||||||
|
AC_ARG_ENABLE([hardening], AS_HELP_STRING([--disable-hardening], [disable compiler and linker hardening flags]))
|
||||||
|
AS_IF([test "x$enable_hardening" != "xno"],
|
||||||
|
[AX_CHECK_COMPILE_FLAG([-DFORTIFY_SOURCE=2], [CPPFLAGS="$CPPFLAGS -DFORTIFY_SOURCE=2"])
|
||||||
|
AX_CHECK_COMPILE_FLAG([-fwrapv], [CPPFLAGS="$CPPFLAGS -fwrapv"],
|
||||||
|
AX_CHECK_COMPILE_FLAG([-fno-strict-overflow], [CPPFLAGS="$CPPFLAGS -fno-strict-overflow"]))
|
||||||
|
case $host_os in
|
||||||
|
*mingw*)
|
||||||
|
AX_CHECK_LINK_FLAG([-Wl,--dynamicbase], [LDFLAGS="$LDFLAGS -Wl,--dynamicbase"])
|
||||||
|
AX_CHECK_LINK_FLAG([-Wl,--nxcompat], [LDFLAGS="$LDFLAGS -Wl,--nxcompat"])
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
AX_CHECK_COMPILE_FLAG([-fPIE], [CPPFLAGS="$CPPFLAGS -fPIE"])
|
||||||
|
AX_CHECK_LINK_FLAG([-pie], [LDFLAGS="$LDFLAGS -pie"])
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
AX_CHECK_LINK_FLAG([-Wl,-z,relro], [LDFLAGS="$LDFLAGS -Wl,-z,relro"])
|
||||||
|
AX_CHECK_LINK_FLAG([-Wl,-z,now], [LDFLAGS="$LDFLAGS -Wl,-z,now"])
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
dnl Checks for libraries.
|
||||||
|
|
||||||
|
dnl Checks for header files.
|
||||||
|
dnl We do this in multiple stages, because unlike Linux all the other operating systems really suck and don't include their own dependencies.
|
||||||
|
|
||||||
|
AC_CHECK_HEADERS([syslog.h sys/file.h sys/ioctl.h sys/mman.h sys/param.h sys/resource.h sys/socket.h sys/time.h sys/uio.h sys/wait.h netdb.h arpa/inet.h arpa/nameser.h dirent.h getopt.h])
|
||||||
|
AC_CHECK_HEADERS([net/if.h net/if_types.h linux/if_tun.h net/if_tun.h net/if_utun.h net/tun/if_tun.h net/if_tap.h net/tap/if_tap.h net/ethernet.h net/if_arp.h netinet/in_systm.h netinet/in.h netinet/in6.h netpacket/packet.h],
|
||||||
|
[], [], [#include "$srcdir/src/have.h"]
|
||||||
|
)
|
||||||
|
AC_CHECK_HEADERS([netinet/if_ether.h netinet/ip.h netinet/ip6.h resolv.h],
|
||||||
|
[], [], [#include "$srcdir/src/have.h"]
|
||||||
|
)
|
||||||
|
AC_CHECK_HEADERS([netinet/tcp.h netinet/ip_icmp.h netinet/icmp6.h],
|
||||||
|
[], [], [#include "$srcdir/src/have.h"]
|
||||||
|
)
|
||||||
|
|
||||||
|
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||||
|
AC_TYPE_PID_T
|
||||||
|
|
||||||
|
tinc_ATTRIBUTE(__malloc__)
|
||||||
|
|
||||||
|
AC_CHECK_TYPES([socklen_t, struct ether_header, struct arphdr, struct ether_arp, struct in_addr, struct addrinfo, struct ip, struct icmp, struct in6_addr, struct sockaddr_in6, struct ip6_hdr, struct icmp6_hdr, struct nd_neighbor_solicit, struct nd_opt_hdr], , ,
|
||||||
|
[#include "$srcdir/src/have.h"]
|
||||||
|
)
|
||||||
|
|
||||||
|
dnl Checks for library functions.
|
||||||
|
AC_TYPE_SIGNAL
|
||||||
|
AC_CHECK_FUNCS([asprintf daemon fchmod flock fork gettimeofday mlockall pselect putenv strsignal system unsetenv usleep vsyslog devname fdevname],
|
||||||
|
[], [], [#include "$srcdir/src/have.h"]
|
||||||
|
)
|
||||||
|
|
||||||
|
AC_CHECK_FUNC(getopt_long, [getopt=true; AC_DEFINE(HAVE_GETOPT_LONG, 1, [getopt_long()])], [getopt=false])
|
||||||
|
AM_CONDITIONAL(GETOPT, test "$getopt" = true)
|
||||||
|
|
||||||
|
dnl Support for SunOS
|
||||||
|
|
||||||
|
AC_CHECK_FUNC(socket, [], [
|
||||||
|
AC_CHECK_LIB(socket, connect)
|
||||||
|
])
|
||||||
|
AC_CHECK_FUNC(gethostbyname, [], [
|
||||||
|
AC_CHECK_LIB(nsl, gethostbyname)
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_CHECK_DECLS([freeaddrinfo, gai_strerror, getaddrinfo, getnameinfo],
|
||||||
|
[], [], [#include "$srcdir/src/have.h"]
|
||||||
|
)
|
||||||
|
|
||||||
|
AC_CHECK_DECLS([res_init], [AC_CHECK_LIB(resolv, res_init)], [], [
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <resolv.h>
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_CACHE_SAVE
|
||||||
|
|
||||||
|
dnl These are defined in files in m4/
|
||||||
|
|
||||||
|
tinc_ZLIB
|
||||||
|
tinc_LZO
|
||||||
|
tinc_OPENSSL
|
||||||
|
|
||||||
|
dnl Check if support for jumbograms is requested
|
||||||
|
AC_ARG_ENABLE(jumbograms,
|
||||||
|
AS_HELP_STRING([--enable-jumbograms], [enable support for jumbograms (packets up to 9000 bytes)]),
|
||||||
|
[ AS_IF([test "x$enable_jumbograms" = "xyes"],
|
||||||
|
[ AC_DEFINE(ENABLE_JUMBOGRAMS, 1, [Support for jumbograms (packets up to 9000 bytes)]) ])
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
dnl Ensure runstatedir is set if we are using a version of autoconf that does not support it
|
||||||
|
if test "x$runstatedir" = "x"; then
|
||||||
|
AC_SUBST([runstatedir], ['${localstatedir}/run'])
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_CONFIG_FILES([Makefile src/Makefile doc/Makefile systemd/Makefile])
|
||||||
|
|
||||||
|
AC_OUTPUT
|
||||||
125
configure.in
125
configure.in
|
|
@ -1,125 +0,0 @@
|
||||||
dnl Process this file with autoconf to produce a configure script.
|
|
||||||
|
|
||||||
dnl $Id: configure.in,v 1.13.2.43.2.1 2002/04/09 11:51:16 guus Exp $
|
|
||||||
|
|
||||||
AC_INIT(src/tincd.c)
|
|
||||||
AM_INIT_AUTOMAKE(tinc, 1.0pre7)
|
|
||||||
AM_CONFIG_HEADER(config.h)
|
|
||||||
|
|
||||||
dnl Include the macros from the m4/ directory
|
|
||||||
AM_ACLOCAL_INCLUDE(m4)
|
|
||||||
|
|
||||||
# Enable GNU extensions.
|
|
||||||
# Define this here, not in acconfig's @TOP@ section, since definitions
|
|
||||||
# in the latter don't make it into the configure-time tests.
|
|
||||||
AC_DEFINE([_GNU_SOURCE], [__USE_BSD])
|
|
||||||
|
|
||||||
ALL_LINGUAS="nl"
|
|
||||||
|
|
||||||
dnl Checks for programs.
|
|
||||||
AC_PROG_CC
|
|
||||||
AC_PROG_CPP
|
|
||||||
AC_PROG_GCC_TRADITIONAL
|
|
||||||
AC_PROG_AWK
|
|
||||||
AC_PROG_INSTALL
|
|
||||||
AC_PROG_LN_S
|
|
||||||
AC_PROG_MAKE_SET
|
|
||||||
jm_PERL
|
|
||||||
|
|
||||||
|
|
||||||
AC_ISC_POSIX
|
|
||||||
|
|
||||||
dnl Check and set OS
|
|
||||||
|
|
||||||
AC_CANONICAL_HOST
|
|
||||||
|
|
||||||
case $host_os in
|
|
||||||
*linux*)
|
|
||||||
AC_DEFINE(HAVE_LINUX)
|
|
||||||
[ rm -f src/device.c; ln -sf linux/device.c src/device.c ]
|
|
||||||
;;
|
|
||||||
*freebsd*)
|
|
||||||
AC_DEFINE(HAVE_FREEBSD)
|
|
||||||
[ rm -f src/device.c; ln -sf freebsd/device.c src/device.c ]
|
|
||||||
;;
|
|
||||||
*solaris*)
|
|
||||||
AC_DEFINE(HAVE_SOLARIS)
|
|
||||||
[ rm -f src/device.c; ln -sf solaris/device.c src/device.c ]
|
|
||||||
;;
|
|
||||||
*openbsd*)
|
|
||||||
AC_DEFINE(HAVE_OPENBSD)
|
|
||||||
[ rm -f src/device.c; ln -sf openbsd/device.c src/device.c ]
|
|
||||||
;;
|
|
||||||
*netbsd*)
|
|
||||||
AC_DEFINE(HAVE_NETBSD)
|
|
||||||
[ rm -f src/device.c; ln -sf netbsd/device.c src/device.c ]
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
AC_CACHE_SAVE
|
|
||||||
|
|
||||||
dnl Checks for libraries.
|
|
||||||
|
|
||||||
dnl Checks for header files.
|
|
||||||
AC_HEADER_STDC
|
|
||||||
AC_CHECK_HEADERS([fcntl.h limits.h sys/ioctl.h syslog.h unistd.h \
|
|
||||||
sys/time.h malloc.h strings.h sys/file.h])
|
|
||||||
|
|
||||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
|
||||||
AC_C_CONST
|
|
||||||
AC_TYPE_PID_T
|
|
||||||
AC_TYPE_SIZE_T
|
|
||||||
AC_HEADER_TIME
|
|
||||||
AC_STRUCT_TM
|
|
||||||
|
|
||||||
dnl Checks for library functions.
|
|
||||||
AC_FUNC_MEMCMP
|
|
||||||
AC_FUNC_ALLOCA
|
|
||||||
AC_TYPE_SIGNAL
|
|
||||||
AC_CHECK_FUNCS([ftime socket select strtol strerror flock unsetenv \
|
|
||||||
asprintf putenv strdup fcloseall daemon strsignal get_current_dir_name])
|
|
||||||
jm_FUNC_MALLOC
|
|
||||||
jm_FUNC_REALLOC
|
|
||||||
|
|
||||||
AM_GNU_GETTEXT
|
|
||||||
|
|
||||||
|
|
||||||
dnl Support for SunOS
|
|
||||||
|
|
||||||
AC_CHECK_FUNC(socket, [], [
|
|
||||||
AC_CHECK_LIB(socket, connect)
|
|
||||||
])
|
|
||||||
AC_CHECK_FUNC(gethostbyname, [], [
|
|
||||||
AC_CHECK_LIB(nsl, gethostbyname)
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_CACHE_SAVE
|
|
||||||
|
|
||||||
dnl These are defined in files in m4/
|
|
||||||
tinc_TUNTAP
|
|
||||||
tinc_OPENSSL
|
|
||||||
tinc_ZLIB
|
|
||||||
|
|
||||||
dnl Check if support for jumbograms is requested
|
|
||||||
AC_ARG_ENABLE(jumbograms,
|
|
||||||
[ --enable-jumbograms enable support for jumbograms (packets up to 9000 bytes)],
|
|
||||||
[ AC_DEFINE(ENABLE_JUMBOGRAMS) ]
|
|
||||||
)
|
|
||||||
|
|
||||||
dnl Check if checkpoint tracing has to be enabled
|
|
||||||
AC_ARG_ENABLE(tracing,
|
|
||||||
[ --enable-tracing enable checkpoint tracing (debugging only)],
|
|
||||||
[ AC_DEFINE(ENABLE_TRACING) ]
|
|
||||||
)
|
|
||||||
|
|
||||||
AC_SUBST(INCLUDES)
|
|
||||||
|
|
||||||
AC_OUTPUT(Makefile
|
|
||||||
src/Makefile
|
|
||||||
doc/Makefile
|
|
||||||
doc/es/Makefile
|
|
||||||
intl/Makefile
|
|
||||||
lib/Makefile
|
|
||||||
m4/Makefile
|
|
||||||
po/Makefile.in
|
|
||||||
)
|
|
||||||
14
debian/NEWS
vendored
Normal file
14
debian/NEWS
vendored
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
tinc (1.0.27-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
This package now provides native systemd service files, allowing multiple
|
||||||
|
instances of tinc to be managed. Existing networks listed in
|
||||||
|
/etc/tinc/nets.boot will be converted to service instances once during this
|
||||||
|
upgrade. Afterwards, you can enable and disable networks using:
|
||||||
|
|
||||||
|
systemctl enable tinc@<netname>
|
||||||
|
systemctl disable tinc@<netname>
|
||||||
|
|
||||||
|
If you do not have systemd installed, the SysV init script will continue to
|
||||||
|
work as usual. For more information, see README.Debian.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Sun, 10 Apr 2016 01:33:55 +0200
|
||||||
80
debian/README.Debian
vendored
Normal file
80
debian/README.Debian
vendored
Normal file
|
|
@ -0,0 +1,80 @@
|
||||||
|
tinc for Debian
|
||||||
|
---------------
|
||||||
|
|
||||||
|
The manual for tinc is also available as info pages, type `info tinc'
|
||||||
|
to read it.
|
||||||
|
|
||||||
|
There are several ways in which tinc may be automatically started at boot:
|
||||||
|
|
||||||
|
Systemd
|
||||||
|
-------
|
||||||
|
|
||||||
|
Since 1.0.27-1, the tinc package comes with native systemd service files.
|
||||||
|
To enable and start a net, call:
|
||||||
|
|
||||||
|
systemctl enable tinc@<netname>
|
||||||
|
systemctl start tinc@<netname>
|
||||||
|
|
||||||
|
This will cause a tincd to be started which uses the configuration from
|
||||||
|
/etc/tinc/<netname>, and also makes sure that it will be started next time your
|
||||||
|
system boots.
|
||||||
|
|
||||||
|
Apart from controlling individual instances, you can also start/stop/reload all
|
||||||
|
enabled instances simultaneously by omitting @<netname>, for example:
|
||||||
|
|
||||||
|
systemctl reload tinc
|
||||||
|
|
||||||
|
Note that when you have systemd installed on your system, the file
|
||||||
|
/etc/tinc/nets.boot will not be used anymore to automatically start tinc
|
||||||
|
daemons. If the variable EXTRA is defined in /etc/default/tinc, it will be
|
||||||
|
passed on to tinc. The variable LIMITS is however not used.
|
||||||
|
|
||||||
|
The service files that come with this package start tinc unconditionally.
|
||||||
|
However, tinc does support socket activation. If you wish to write a socket
|
||||||
|
unit for tinc, use the ListenStream option to specify on which port(s) and
|
||||||
|
address(es) tinc should listen.
|
||||||
|
|
||||||
|
SysVinit
|
||||||
|
--------
|
||||||
|
|
||||||
|
The system startup script for tinc, /etc/init.d/tinc, uses the file
|
||||||
|
/etc/tinc/nets.boot to find out which networks have to be started. Use one
|
||||||
|
netname per line. Lines starting with a # are ignored.
|
||||||
|
|
||||||
|
/etc/network/interfaces
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
You can create a stanza in /etc/network/interfaces, and add a line with
|
||||||
|
"tinc-net <netname>". This will cause a tincd to be started which uses the
|
||||||
|
configuration from /etc/tinc/<netname>. You can use an inet static (with
|
||||||
|
address and netmask options) or inet dhcp stanza, in which case the ifup will
|
||||||
|
configure the VPN interface and you do not need to have a tinc-up script.
|
||||||
|
|
||||||
|
The following options are also recognized and map directly to the corresponding
|
||||||
|
command line options for tincd:
|
||||||
|
|
||||||
|
tinc-config <directory>
|
||||||
|
tinc-debug <level>
|
||||||
|
tinc-mlock yes
|
||||||
|
tinc-logfile <filename>
|
||||||
|
tinc-pidfile <filename>
|
||||||
|
tinc-chroot yes
|
||||||
|
tinc-user <username>
|
||||||
|
|
||||||
|
An example stanza:
|
||||||
|
|
||||||
|
iface vpn inet static
|
||||||
|
address 192.168.2.42
|
||||||
|
netmask 255.255.0.0
|
||||||
|
tinc-net myvpn
|
||||||
|
tinc-debug 1
|
||||||
|
tinc-mlock yes
|
||||||
|
tinc-user nobody
|
||||||
|
tinc-pidfile /tmp/tinc.pid
|
||||||
|
|
||||||
|
This will start a tinc daemon that reads its configuration from
|
||||||
|
/etc/tinc/myvpn, logs at debug level 1, locks itself in RAM, runs as user
|
||||||
|
nobody, and creates a network interface called "vpn". Ifup then sets the
|
||||||
|
address and netmask on that interface.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org>, Sun, 10 April 2016, 01:38:08 +0200
|
||||||
685
debian/changelog
vendored
Normal file
685
debian/changelog
vendored
Normal file
|
|
@ -0,0 +1,685 @@
|
||||||
|
tinc (1.0.36-2) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Disable support for libvdeplug. Closes: #973233
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Sun, 22 Nov 2020 10:40:27 +0100
|
||||||
|
|
||||||
|
tinc (1.0.36-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream version 1.0.36
|
||||||
|
* Add Vcs tags to debian/control.
|
||||||
|
* Bump Standards-Version.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Mon, 26 Aug 2019 14:17:21 +0200
|
||||||
|
|
||||||
|
tinc (1.0.35-2) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Bump Standards-Version and Build-Depend on debhelper-compat (= 12).
|
||||||
|
* Remove calls to dh_installinit and dh_systemd_start from debian/rules,
|
||||||
|
compat level 12 does the right thing by default.
|
||||||
|
* Ensure we clean up doc/tinc.info.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Mon, 28 Jan 2019 21:54:45 +0100
|
||||||
|
|
||||||
|
tinc (1.0.35-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
- Includes fixes for CVE-2018-16737, CVE-2018-16738, CVE-2018-16758.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Mon, 08 Oct 2018 16:09:06 +0200
|
||||||
|
|
||||||
|
tinc (1.0.34-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
[ Guus Sliepen ]
|
||||||
|
* New upstream release.
|
||||||
|
- Fixes a potential segmentation fault when connecting to an IPv6
|
||||||
|
peer via a proxy. Closes: #887401
|
||||||
|
* Add support for the $EXTRA variable in /etc/default/tinc when using
|
||||||
|
systemd. Closes: #887116
|
||||||
|
|
||||||
|
[ Benda Xu ]
|
||||||
|
* Prevent possible incorrect IPv6 checksums due to function inlining.
|
||||||
|
Closes: #891400
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Tue, 12 Jun 2018 23:00:49 +0200
|
||||||
|
|
||||||
|
tinc (1.0.33-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
* Test for /etc/default/tinc before trying to source it. Closes: #777262
|
||||||
|
* Use --runstatedir=/run.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Sat, 04 Nov 2017 16:22:06 +0100
|
||||||
|
|
||||||
|
tinc (1.0.32-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
* Add a note to new nets.boot files that it is not used with systemd.
|
||||||
|
Closes: #841052
|
||||||
|
* In the post-down script, read the pid file only once. Closes: #832784
|
||||||
|
* Explicitly use /bin/sleep from coreutils. Closes: #772379
|
||||||
|
* Bump Standards-Version.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Tue, 05 Sep 2017 20:23:36 +0200
|
||||||
|
|
||||||
|
tinc (1.0.31-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
* Bump Standards-Version.
|
||||||
|
* Bump debian/compat.
|
||||||
|
* Add missing Depends: lsb-base.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Sun, 15 Jan 2017 16:20:40 +0100
|
||||||
|
|
||||||
|
tinc (1.0.29-2) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Rebuild with libssl-dev from unstable.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Thu, 27 Oct 2016 13:09:46 +0200
|
||||||
|
|
||||||
|
tinc (1.0.29-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
* Bump debian/compat.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Mon, 10 Oct 2016 22:30:25 +0200
|
||||||
|
|
||||||
|
tinc (1.0.28-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
- Fixes FTBFS on kfreebsd.
|
||||||
|
* Systemd service files are now provided by upstream.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Sun, 10 Apr 2016 15:44:28 +0200
|
||||||
|
|
||||||
|
tinc (1.0.27-2) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Fix tinc@.service.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Sun, 10 Apr 2016 12:45:33 +0200
|
||||||
|
|
||||||
|
tinc (1.0.27-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
* Bump Standards-Version.
|
||||||
|
* Add native systemd unit files.
|
||||||
|
* Automatically convert networks listed in nets.boot to systemd service
|
||||||
|
instances on upgrade.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Sun, 10 Apr 2016 01:39:16 +0200
|
||||||
|
|
||||||
|
tinc (1.0.26-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
* Use the contents, not the presence, of the pidfile to check that tincd is
|
||||||
|
shut down properly. Closes: #774682
|
||||||
|
* Bump Standards-Version.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Sun, 05 Jul 2015 17:23:08 +0200
|
||||||
|
|
||||||
|
tinc (1.0.24-2) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Improve the init script: stopping tinc now waits for the process to
|
||||||
|
terminate. If that doesn't happen in 5 seconds, it will send the TERM
|
||||||
|
signal again (which helps if tinc is waiting for a script to finish
|
||||||
|
executing). It now also detects whether the process mentioned in the PID
|
||||||
|
file is actually running, and if not it will exit early and without
|
||||||
|
warnings. Closes: #748107
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Wed, 14 May 2014 21:44:16 +0200
|
||||||
|
|
||||||
|
tinc (1.0.24-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
[ Guus Sliepen ]
|
||||||
|
* New upstream release
|
||||||
|
* Add a debian/watch file.
|
||||||
|
* Bump Standards-Version.
|
||||||
|
|
||||||
|
[ Gian Piero Carrubba ]
|
||||||
|
* Allow resource limits to be set in /etc/default/tinc.
|
||||||
|
Closes: #690685, #704702
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Sun, 11 May 2014 21:17:13 +0200
|
||||||
|
|
||||||
|
tinc (1.0.23-2) unstable; urgency=low
|
||||||
|
|
||||||
|
* Use if-statements instead of && in shell scripts. Closes: #731279
|
||||||
|
The && operator does not clear the error status, and if the next statement
|
||||||
|
in a shell script does not change the error status it would cause the
|
||||||
|
script to prematurely exit. Thanks to Peter Reinholdtsen for spotting it.
|
||||||
|
* Use absolute path to tincd in the if-post-down script.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Thu, 05 Dec 2013 09:41:13 +0000
|
||||||
|
|
||||||
|
tinc (1.0.23-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Sat, 19 Oct 2013 21:06:05 +0200
|
||||||
|
|
||||||
|
tinc (1.0.22-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
- Handles whitespace between command line flags and optional arguments.
|
||||||
|
Closes: #710267
|
||||||
|
* Bump Standards-Version.
|
||||||
|
* Source /lib/lsb/init-functions in the init.d script.
|
||||||
|
* Don't use texi2html anymore, use automake's install-html target which uses
|
||||||
|
makeinfo.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Wed, 14 Aug 2013 15:34:29 +0200
|
||||||
|
|
||||||
|
tinc (1.0.21-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
- Includes fix for CVE-2013-1428.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Sun, 05 May 2013 10:42:33 +0200
|
||||||
|
|
||||||
|
tinc (1.0.19-3) unstable; urgency=high
|
||||||
|
|
||||||
|
* Drop packets forwarded via TCP if they are too big (CVE-2013-1428).
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Fri, 12 Apr 2013 22:52:10 +0200
|
||||||
|
|
||||||
|
tinc (1.0.19-2) unstable; urgency=low
|
||||||
|
|
||||||
|
* Fix behaviour of tinc-pidfile. Closes: #679130
|
||||||
|
* Enable parallel building in debian/rules.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Tue, 26 Jun 2012 18:28:34 +0200
|
||||||
|
|
||||||
|
tinc (1.0.19-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
* Bump debian/compat so tinc gets built with hardening flags.
|
||||||
|
* Allow tinc-pidfile in /etc/network/interfaces.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Mon, 25 Jun 2012 20:29:22 +0200
|
||||||
|
|
||||||
|
tinc (1.0.18-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Sun, 25 Mar 2012 18:52:15 +0200
|
||||||
|
|
||||||
|
tinc (1.0.17-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
* Enable support for UML and VDE.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Sat, 10 Mar 2012 14:50:00 +0100
|
||||||
|
|
||||||
|
tinc (1.0.16-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
* Mention alarm option in /etc/init.d/tinc's usage information.
|
||||||
|
Closes: #631761
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Sat, 23 Jul 2011 14:37:56 +0200
|
||||||
|
|
||||||
|
tinc (1.0.15-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
* Send SIGALRM to running tinc daemons whenever an interface is brought up
|
||||||
|
with the ifupdown framework. Based on a patch from Joachim Breitner.
|
||||||
|
Closes: #629880
|
||||||
|
* Allow tinc daemons to be started using ifupdown.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Fri, 24 Jun 2011 18:21:51 +0200
|
||||||
|
|
||||||
|
tinc (1.0.14-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
* Bump Standards-Version.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Mon, 09 May 2011 00:25:37 +0200
|
||||||
|
|
||||||
|
tinc (1.0.13-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Tue, 13 Apr 2010 12:06:36 +0200
|
||||||
|
|
||||||
|
tinc (1.0.12-2) unstable; urgency=low
|
||||||
|
|
||||||
|
* Remove debconf questions. Closes: #572116
|
||||||
|
Apparently debconf may not be used to ask a question at install time and
|
||||||
|
use the answer at upgrade time. Instead of kludging around this
|
||||||
|
restriction, no questions are asked anymore, and tinc will now always be
|
||||||
|
restarted when upgrading.
|
||||||
|
* Wait up to 5 seconds for tinc daemon to stop before restarting it.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Tue, 02 Mar 2010 14:01:36 +0100
|
||||||
|
|
||||||
|
tinc (1.0.12-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
* Bump Standards-Version.
|
||||||
|
* Migrate from CDBS to debhelper.
|
||||||
|
* Convert source package to 3.0 (quilt) format.
|
||||||
|
* Remove useless tinc.modules.
|
||||||
|
* Use init.d script from Michael Tokarev, allowing per-network arguments to
|
||||||
|
tincd.
|
||||||
|
* Remove update-rc.d calls from postinst and postrm.
|
||||||
|
* Let the init.d script depend on $remote_fs.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Thu, 04 Feb 2010 00:56:45 +0100
|
||||||
|
|
||||||
|
tinc (1.0.11-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
* Cope with texi2html arbitrarily changing its output directory.
|
||||||
|
Closes: #552927
|
||||||
|
* Do not stop tinc when configuring a new version, just restart after
|
||||||
|
the upgrade.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Sun, 01 Nov 2009 20:37:16 +0100
|
||||||
|
|
||||||
|
tinc (1.0.10-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
* Include Russian debconf translation. Closes: #548759
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Sun, 18 Oct 2009 16:31:49 +0200
|
||||||
|
|
||||||
|
tinc (1.0.9-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
- Binds IPv6 sockets only to IPv6. Closes: #440150
|
||||||
|
* Update copyright file. Closes: #482566
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Fri, 26 Dec 2008 13:25:05 +0100
|
||||||
|
|
||||||
|
tinc (1.0.8-2) unstable; urgency=low
|
||||||
|
|
||||||
|
* Include Portugese debconf translation. Closes: #434191
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Tue, 14 Aug 2007 13:50:27 +0200
|
||||||
|
|
||||||
|
tinc (1.0.8-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release. Closes: #173987
|
||||||
|
* Include german debconf translation. Closes: #412351
|
||||||
|
* Build-Depend on texinfo. Closes: #424209
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Wed, 16 May 2007 17:59:16 +0200
|
||||||
|
|
||||||
|
tinc (1.0.7-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Fri, 5 Jan 2007 15:55:42 +0100
|
||||||
|
|
||||||
|
tinc (1.0.6-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Mon, 18 Dec 2006 15:41:03 +0100
|
||||||
|
|
||||||
|
tinc (1.0.5-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release. Closes: #391610
|
||||||
|
* Add an LSB section to the init script.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Tue, 14 Nov 2006 16:32:20 +0100
|
||||||
|
|
||||||
|
tinc (1.0.4-4) unstable; urgency=low
|
||||||
|
|
||||||
|
* Include swedish debconf translation. Closes: #332963
|
||||||
|
* Remove nets.boot on purge. Closes: #333303
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Mon, 17 Oct 2005 12:34:32 +0200
|
||||||
|
|
||||||
|
tinc (1.0.4-3) unstable; urgency=low
|
||||||
|
|
||||||
|
* Depend on debconf | debconf-2.0.
|
||||||
|
* Include vietnamese debconf translation. Closes: #322305
|
||||||
|
* Include japanese debconf translation. Closes: #319591
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Thu, 29 Sep 2005 11:15:34 +0200
|
||||||
|
|
||||||
|
tinc (1.0.4-2) unstable; urgency=low
|
||||||
|
|
||||||
|
* Compensate for change in texinfo's output directory. Closes: #318562
|
||||||
|
* Include Czech translation of the debconf questions. Closes: #312982
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Sat, 16 Jul 2005 11:42:04 +0200
|
||||||
|
|
||||||
|
tinc (1.0.4-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release. Closes: #294819
|
||||||
|
* Update french translation of debconf template. Closes: #293371, #296148
|
||||||
|
* Allow dashes in nets.boot. Closes: #296281
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Wed, 4 May 2005 21:56:22 +0200
|
||||||
|
|
||||||
|
tinc (1.0.3-4) unstable; urgency=low
|
||||||
|
|
||||||
|
* Call debconf early in postinst so it won't get confused by output
|
||||||
|
from other commands in the postinst script. Closes: #292920
|
||||||
|
* If MAKEDEV doesn't know about net/tun, fall back to tun.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Mon, 31 Jan 2005 13:27:16 +0100
|
||||||
|
|
||||||
|
tinc (1.0.3-3) unstable; urgency=low
|
||||||
|
|
||||||
|
* Fix clean rule in debian/rules.
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Thu, 27 Jan 2005 23:16:59 +0000
|
||||||
|
|
||||||
|
tinc (1.0.3-2) unstable; urgency=low
|
||||||
|
|
||||||
|
* Don't check for /dev/tap* in postinst if we don't create them anyway.
|
||||||
|
* MAKEDEV expects net/tun instead of tun.
|
||||||
|
* Don't ask if /dev/net/tun should be created, just do it.
|
||||||
|
Closes: #259489, #292450
|
||||||
|
* Move $EXTRA from init.d/tinc to /etc/default/tinc. Closes: #281366
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Thu, 27 Jan 2005 14:10:02 +0100
|
||||||
|
|
||||||
|
tinc (1.0.3-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
* Adopting the package from Ivo.
|
||||||
|
* Use invoke-rc.d, and tell user to do so as well. Closes: #223276
|
||||||
|
* Let force-reload do the same thing as reload. Closes: #230180
|
||||||
|
|
||||||
|
-- Guus Sliepen <guus@debian.org> Fri, 1 Oct 2004 21:04:14 +0200
|
||||||
|
|
||||||
|
tinc (1.0.2-2) unstable; urgency=low
|
||||||
|
|
||||||
|
* debian/control: Oops, really make that automake1.7.
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Sat, 8 Nov 2003 21:53:04 +0100
|
||||||
|
|
||||||
|
tinc (1.0.2-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release:
|
||||||
|
* Fix broken replies to CHAL_RESP. (Closes: #217646)
|
||||||
|
* debian/control: Updated automake build dependency to automake1.7.
|
||||||
|
(Closes: #219360)
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Sat, 8 Nov 2003 19:56:04 +0100
|
||||||
|
|
||||||
|
tinc (1.0.1-2) unstable; urgency=low
|
||||||
|
|
||||||
|
* debian/dirs: Removed, moved contents to tinc.dirs.
|
||||||
|
(Closes: #208591)
|
||||||
|
* debian/docs: Renamed to tinc.docs.
|
||||||
|
* debian/rules: Install the contents of doc/sample-config.tar.gz in
|
||||||
|
/usr/share/doc/tinc/examples instead of /etc/tinc.
|
||||||
|
* debian/Makefile*: Removed.
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Wed, 10 Sep 2003 12:19:32 +0200
|
||||||
|
|
||||||
|
tinc (1.0.1-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
* debian/patches/001_openbsd_device.c.patch: Removed.
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Thu, 14 Aug 2003 17:03:28 +0200
|
||||||
|
|
||||||
|
tinc (1.0release-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream version. (Closes: #204639)
|
||||||
|
* Fixes switching back to normal logging mode when killing with
|
||||||
|
SIGINT twice. (Closes: #175633)
|
||||||
|
* Uses one SSL context struct for each connection, speeding up
|
||||||
|
encrypting/decrypting data; don't throw away out of sequence
|
||||||
|
packets. (Closes: #188874)
|
||||||
|
* Fixes handling of broadcast messages. (Closes: #175632)
|
||||||
|
* debian/rules: Use cdbs.
|
||||||
|
* debian/control: Build-Depend on cdbs, liblzo-dev.
|
||||||
|
* debian/patches/001_openbsd_device.c.patch: Sync openbsd/device.c to
|
||||||
|
latest CVS version.
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Sun, 10 Aug 2003 16:13:29 +0200
|
||||||
|
|
||||||
|
tinc (1.0pre8-6) unstable; urgency=low
|
||||||
|
|
||||||
|
* debian/po/fr.po: Added French debconf translation. (Closes: #201803)
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Fri, 18 Jul 2003 10:03:20 +0200
|
||||||
|
|
||||||
|
tinc (1.0pre8-5) unstable; urgency=low
|
||||||
|
|
||||||
|
* debian/*: Change to po-debconf, thanks to From: Michel Grentzinger
|
||||||
|
<mic.grentz@online.fr> for the patch:
|
||||||
|
- change debhelper dependency to 4.1.16 (according to man
|
||||||
|
po-debconf),
|
||||||
|
- manually add nl translation in old tinc.templates (master),
|
||||||
|
- run debconf-gettextize debian/tinc.templates,
|
||||||
|
- move old templates files (debian/tinc.templates.*),
|
||||||
|
- change construction "If you say no" to "If you refuse",
|
||||||
|
* debian/rules: Call po2debconf.
|
||||||
|
* debian/rules: Don't copy COPYING.README to the package.
|
||||||
|
* debian/control: Update Standards-Version.
|
||||||
|
* debian/conffiles: Removed.
|
||||||
|
* debian/postinst: No longer use mknod directly, use MAKEDEV.
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Tue, 15 Jul 2003 20:13:47 +0200
|
||||||
|
|
||||||
|
tinc (1.0pre8-4) unstable; urgency=low
|
||||||
|
|
||||||
|
* src/net.h, src/net_packet.c, src/net_setup.c: Apply fix from CVS
|
||||||
|
for OpenSSL-related memory leaks. (Closes: #189432)
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Mon, 5 May 2003 15:00:29 +0200
|
||||||
|
|
||||||
|
tinc (1.0pre8-3) unstable; urgency=low
|
||||||
|
|
||||||
|
* m4/openssl.m4: Updated to CVS version. (Closes: #184400)
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Thu, 13 Mar 2003 17:24:42 +0100
|
||||||
|
|
||||||
|
tinc (1.0pre8-2) unstable; urgency=low
|
||||||
|
|
||||||
|
* debian/postinst: Create /dev/net/tun if it doesn't exist.
|
||||||
|
* debian/tinc.modules: Add alias for /dev/net/tun.
|
||||||
|
* debian/rules: Install tinc.modules.
|
||||||
|
* These things together: (Closes: #151967, #153156)
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Wed, 13 Nov 2002 22:45:38 +0100
|
||||||
|
|
||||||
|
tinc (1.0pre8-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream version.
|
||||||
|
* debian/rules:
|
||||||
|
- DEB_BUILD_OPTIONS support.
|
||||||
|
- Enable --enable-tracing by default.
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Tue, 17 Sep 2002 13:50:44 +0200
|
||||||
|
|
||||||
|
tinc (1.0pre7-3) unstable; urgency=low
|
||||||
|
|
||||||
|
* Properly install _all_ info pages. (Closes: #144718)
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Wed, 29 May 2002 14:01:21 +0200
|
||||||
|
|
||||||
|
tinc (1.0pre7-2) unstable; urgency=low
|
||||||
|
|
||||||
|
* Dutch translation wasn't being installed.
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Thu, 11 Apr 2002 09:26:14 +0200
|
||||||
|
|
||||||
|
tinc (1.0pre7-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Tue, 9 Apr 2002 16:04:46 +0200
|
||||||
|
|
||||||
|
tinc (1.0pre6-3) unstable; urgency=medium
|
||||||
|
|
||||||
|
* Synched with upstream CVS.
|
||||||
|
* Added build dependency on zlib1g-dev. (Closes: #141705)
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Mon, 8 Apr 2002 21:19:31 +0200
|
||||||
|
|
||||||
|
tinc (1.0pre6-2) unstable; urgency=low
|
||||||
|
|
||||||
|
* The Section was non-US again, so changed it back to main/net.
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Thu, 28 Mar 2002 07:26:10 +0100
|
||||||
|
|
||||||
|
tinc (1.0pre6-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
* Fixed text in debian/copyright
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Wed, 27 Mar 2002 23:10:07 +0100
|
||||||
|
|
||||||
|
tinc (1.0pre5-4) unstable; urgency=low
|
||||||
|
|
||||||
|
* Added a debconf question for restarting on upgrade.
|
||||||
|
* Added reload option to init.d, start with EXTRA='-d' default.
|
||||||
|
* Moved from non-US to main.
|
||||||
|
* Install example configuration files.
|
||||||
|
* The HTML documentation wasn't installed; fixed.
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Tue, 26 Mar 2002 20:14:19 +0100
|
||||||
|
|
||||||
|
tinc (1.0pre5-3) unstable; urgency=low
|
||||||
|
|
||||||
|
* Config variables are now treated case sentitivly again.
|
||||||
|
* Added a forgotten xstrdup.
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Fri, 15 Feb 2002 12:35:17 +0100
|
||||||
|
|
||||||
|
tinc (1.0pre5-2) unstable; urgency=low
|
||||||
|
|
||||||
|
* MaxTimeout accidentally wasn't configurable. (Closes: #119653)
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Wed, 13 Feb 2002 13:36:54 +0100
|
||||||
|
|
||||||
|
tinc (1.0pre5-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream version. (Closes: #119653)
|
||||||
|
* Init script redone in sh.
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Sun, 10 Feb 2002 16:39:53 +0100
|
||||||
|
|
||||||
|
tinc (1.0pre4-1.cvs010621.6) unstable; urgency=low
|
||||||
|
|
||||||
|
* Somehow po-Makefile.in.in.diff got lost, readded. (Closes: #119157)
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Thu, 15 Nov 2001 17:00:03 +0100
|
||||||
|
|
||||||
|
tinc (1.0pre4-1.cvs010621.5) unstable; urgency=low
|
||||||
|
|
||||||
|
* Fix a typo in postinst that let it MAKEDEV even on devfs.
|
||||||
|
(Closes: #116034)
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Thu, 18 Oct 2001 09:35:16 +0200
|
||||||
|
|
||||||
|
tinc (1.0pre4-1.cvs010621.4) unstable; urgency=low
|
||||||
|
|
||||||
|
* Ask before creating the device files. (Closes: #111099)
|
||||||
|
* Add a section to the info file.
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Fri, 12 Oct 2001 20:47:09 +0200
|
||||||
|
|
||||||
|
tinc (1.0pre4-1.cvs010621.3) unstable; urgency=low
|
||||||
|
|
||||||
|
* Build and install html documentation. (Closes: #106843)
|
||||||
|
* Remove build-time dependency on libc6-dev.
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Mon, 30 Jul 2001 22:03:52 +0200
|
||||||
|
|
||||||
|
tinc (1.0pre4-1.cvs010621.2) unstable; urgency=low
|
||||||
|
|
||||||
|
* Changed location of the pidfile. (Closes: #102798)
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Sun, 1 Jul 2001 01:57:43 +0200
|
||||||
|
|
||||||
|
tinc (1.0pre4-1.cvs010621.1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream version. (Closes: #98730)
|
||||||
|
* Rebuilding automatically inserted new config.{sub|guess}.
|
||||||
|
(Closes: #98165)
|
||||||
|
* Updated Standards-Version.
|
||||||
|
* Don't include a sample configuration file.
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Thu, 21 Jun 2001 14:08:49 +0200
|
||||||
|
|
||||||
|
tinc (1.0pre3-5) unstable; urgency=low
|
||||||
|
|
||||||
|
* Fixed an error in the init script that prevented tinc from
|
||||||
|
starting correctly.
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Thu, 8 Feb 2001 02:45:09 +0100
|
||||||
|
|
||||||
|
tinc (1.0pre3-4) unstable; urgency=low
|
||||||
|
|
||||||
|
* Change build-depends for OpenSSL to libssl096-dev
|
||||||
|
(Closes: #84197, #84873).
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Sun, 4 Feb 2001 22:43:22 +0100
|
||||||
|
|
||||||
|
tinc (1.0pre3-3) unstable; urgency=low
|
||||||
|
|
||||||
|
* Set architecture to any (really this time!) (Closes: #80451).
|
||||||
|
* Section set to non-US
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Tue, 23 Jan 2001 22:52:53 +0100
|
||||||
|
|
||||||
|
tinc (1.0pre3-2) unstable; urgency=low
|
||||||
|
|
||||||
|
* Set architecture to any (Closes: #80451).
|
||||||
|
* Added tinc.modules with some useful module aliases.
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Sat, 13 Jan 2001 16:10:57 +0100
|
||||||
|
|
||||||
|
tinc (1.0pre3-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream version (1.0pre3) (Closes: #71274).
|
||||||
|
* Better Depends and Build-Depends lines.
|
||||||
|
* Dropped dependencies on libgmp, added libssl.
|
||||||
|
* doc-base.tinc: New file.
|
||||||
|
* Deleted the file shlibs, as there on longer is a libblowfish.
|
||||||
|
* Patch po/Makefile.in.in from po-Makefile.in.in.diff if necessary.
|
||||||
|
* Use dh_perl to get accurate perl dependencies.
|
||||||
|
|
||||||
|
-- Ivo Timmermans <ivo@debian.org> Thu, 9 Nov 2000 21:58:40 +0100
|
||||||
|
|
||||||
|
tinc (1.0pre2-1.1) unstable; urgency=low
|
||||||
|
|
||||||
|
* NMU at Ivo's request as his application is being processed, and his
|
||||||
|
sponsor is based in the US.
|
||||||
|
|
||||||
|
-- J.H.M. Dassen (Ray) <jdassen@debian.org> Wed, 28 Jun 2000 21:52:30 +0200
|
||||||
|
|
||||||
|
tinc (1.0pre2-1) unstable; urgency=low
|
||||||
|
|
||||||
|
* postinst creates a file /etc/tinc/nets.boot, containing all networks
|
||||||
|
to be started upon system startup;
|
||||||
|
* init.d script starts all networks from that list.
|
||||||
|
* postinst script creates tap devices.
|
||||||
|
|
||||||
|
-- Ivo Timmermans <itimmermans@bigfoot.com> Tue, 16 May 2000 00:06:25 +0200
|
||||||
|
|
||||||
|
tinc (1.0pre1-0.4) unstable; urgency=low
|
||||||
|
|
||||||
|
* postinst script.
|
||||||
|
|
||||||
|
-- Ivo Timmermans <itimmermans@bigfoot.com> Mon, 15 May 2000 19:22:05 +0200
|
||||||
|
|
||||||
|
tinc (1.0pre1-0.3) unstable; urgency=low
|
||||||
|
|
||||||
|
* system startup script.
|
||||||
|
|
||||||
|
-- Ivo Timmermans <itimmermans@bigfoot.com> Sun, 14 May 2000 22:58:02 +0200
|
||||||
|
|
||||||
|
tinc (1.0pre1-0.2) unstable; urgency=low
|
||||||
|
|
||||||
|
* Included the blowfish license.
|
||||||
|
|
||||||
|
-- Ivo Timmermans <itimmermans@bigfoot.com> Fri, 21 Apr 2000 17:07:50 +0200
|
||||||
|
|
||||||
|
tinc (1.0pre1-0.1) unstable; urgency=low
|
||||||
|
|
||||||
|
* Initial Release.
|
||||||
|
|
||||||
|
-- Ivo Timmermans <itimmermans@bigfoot.com> Fri, 21 Apr 2000 17:07:50 +0200
|
||||||
|
|
||||||
|
|
||||||
20
debian/control
vendored
Normal file
20
debian/control
vendored
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
Source: tinc
|
||||||
|
Section: net
|
||||||
|
Priority: optional
|
||||||
|
Maintainer: Guus Sliepen <guus@debian.org>
|
||||||
|
Standards-Version: 4.4.0
|
||||||
|
Build-Depends: libssl-dev, debhelper-compat (= 12), gettext, texinfo, zlib1g-dev, liblzo2-dev
|
||||||
|
Homepage: http://www.tinc-vpn.org/
|
||||||
|
Vcs-Browser: https://salsa.debian.org/guus/tinc
|
||||||
|
Vcs-Git: https://salsa.debian.org/guus/tinc.git
|
||||||
|
Rules-Requires-Root: no
|
||||||
|
|
||||||
|
Package: tinc
|
||||||
|
Architecture: any
|
||||||
|
Pre-Depends: ${misc:Pre-Depends}
|
||||||
|
Depends: ${shlibs:Depends}, ${misc:Depends}, lsb-base (>= 3.0-6)
|
||||||
|
Description: Virtual Private Network daemon
|
||||||
|
tinc is a daemon with which you can create a virtual private network
|
||||||
|
(VPN). One daemon can handle multiple connections, so you can
|
||||||
|
create an entire (moderately sized) VPN with only one daemon per
|
||||||
|
participating computer.
|
||||||
34
debian/copyright
vendored
Normal file
34
debian/copyright
vendored
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
This package was debianized by Ivo Timmermans <ivo@debian.org> on
|
||||||
|
Fri, 21 Apr 2000 17:07:50 +0200.
|
||||||
|
|
||||||
|
It was downloaded from http://www.tinc-vpn.org/
|
||||||
|
|
||||||
|
Upstream Authors:
|
||||||
|
Guus Sliepen <guus@tinc-vpn.org>
|
||||||
|
Ivo Timmermans <ivo@tinc-vpn.org>
|
||||||
|
|
||||||
|
Copyright (C) 1998-2005 Ivo Timmermans
|
||||||
|
1998-2008 Guus Sliepen <guus@tinc-vpn.org>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
On Debian GNU/Linux systems, the complete text of the GNU General Public
|
||||||
|
License version 2 can be found in /usr/share/common-licenses/GPL-2.
|
||||||
|
|
||||||
|
The following applies to tinc:
|
||||||
|
|
||||||
|
This program is released under the GPL with the additional exemption
|
||||||
|
that compiling, linking, and/or using OpenSSL is allowed. You may
|
||||||
|
provide binary packages linked to the OpenSSL libraries, provided that
|
||||||
|
all other requirements of the GPL are met.
|
||||||
|
|
||||||
|
The following applies to the LZO library:
|
||||||
|
|
||||||
|
Hereby I grant a special exception to the tinc VPN project
|
||||||
|
(http://tinc.nl.linux.org/) to link the LZO library with the OpenSSL library
|
||||||
|
(http://www.openssl.org).
|
||||||
|
|
||||||
|
Markus F.X.J. Oberhumer
|
||||||
10
debian/doc-base.tinc
vendored
Normal file
10
debian/doc-base.tinc
vendored
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
Document: tinc
|
||||||
|
Title: tinc Manual
|
||||||
|
Author: Ivo Timmermans, Guus Sliepen
|
||||||
|
Abstract: This manual describes how to set up a Virtual Private
|
||||||
|
Network with tinc.
|
||||||
|
Section: System/Security
|
||||||
|
|
||||||
|
Format: HTML
|
||||||
|
Files: /usr/share/doc/tinc/tinc.html/*
|
||||||
|
Index: /usr/share/doc/tinc/tinc.html/index.html
|
||||||
1
debian/info
vendored
Normal file
1
debian/info
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
doc/tinc.info
|
||||||
65
debian/patches/fix-incorrect-icmpv6-checksum
vendored
Normal file
65
debian/patches/fix-incorrect-icmpv6-checksum
vendored
Normal file
|
|
@ -0,0 +1,65 @@
|
||||||
|
Package: tinc
|
||||||
|
Version: 1.0.33-1
|
||||||
|
Severity: important
|
||||||
|
|
||||||
|
Dear Guus,
|
||||||
|
|
||||||
|
I have been using tinc since 2009 and it is great!
|
||||||
|
|
||||||
|
When PMTUDiscovery=yes and Mode=switch, and if ipv6 is used inside
|
||||||
|
tinc, the ICMPv6 "Packet Too Big" packets have incorrect checksums.
|
||||||
|
It can be reproduced by `ping6 <host in tinc> -s 1800` and `tcpdump -i
|
||||||
|
<tinc interface>`. Consequently, the host ignores the tinc-generated
|
||||||
|
ICMPv6 packets, PMTUDiscovery does not work and the connections freeze
|
||||||
|
when data flows are big.
|
||||||
|
|
||||||
|
I find the bug is gone if the function "inet_checksum" in route.c is
|
||||||
|
not inlined, either by compiling tinc with "-O2
|
||||||
|
-fno-inline-functions", or apply a patch such as,
|
||||||
|
|
||||||
|
diff --git a/src/route.c b/src/route.c
|
||||||
|
index ff82c06e..cd55383a 100644
|
||||||
|
--- a/src/route.c
|
||||||
|
+++ b/src/route.c
|
||||||
|
@@ -60,7 +60,7 @@ static const size_t opt_size = sizeof(struct nd_opt_hdr);
|
||||||
|
|
||||||
|
/* RFC 1071 */
|
||||||
|
|
||||||
|
-static uint16_t inet_checksum(void *data, int len, uint16_t prevsum) {
|
||||||
|
+__attribute__ ((noinline)) static uint16_t inet_checksum(void *data, int len, uint16_t prevsum) {
|
||||||
|
uint16_t *p = data;
|
||||||
|
uint32_t checksum = prevsum ^ 0xFFFF;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
I have tested with gcc-7.3.0 and gcc-5.4.0. They behaved the same. I
|
||||||
|
am not good at assembly to find out what really happened, but it is
|
||||||
|
for sure that inet_checksum does not work as expected if compiled
|
||||||
|
inline.
|
||||||
|
|
||||||
|
Thanks!
|
||||||
|
|
||||||
|
Yours,
|
||||||
|
Benda
|
||||||
|
|
||||||
|
-- System Information:
|
||||||
|
Debian Release: buster/sid
|
||||||
|
APT prefers unstable
|
||||||
|
APT policy: (500, 'unstable')
|
||||||
|
Architecture: amd64 (x86_64)
|
||||||
|
|
||||||
|
Kernel: Linux 4.9.0-5-amd64 (SMP w/8 CPU cores)
|
||||||
|
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) (ignored: LC_ALL set to en_US.UTF-8), LANGUAGE=en_US:en (charmap=UTF-8) (ignored: LC_ALL set to en_US.UTF-8)
|
||||||
|
Shell: /bin/sh linked to /bin/dash
|
||||||
|
Init: sysvinit (via /sbin/init)
|
||||||
|
|
||||||
|
Versions of packages tinc depends on:
|
||||||
|
ii libc6 2.26-2
|
||||||
|
ii liblzo2-2 2.08-1.2+b2
|
||||||
|
ii libssl1.1 1.1.0g-2
|
||||||
|
ii lsb-base 9.20170808
|
||||||
|
ii zlib1g 1:1.2.8.dfsg-5
|
||||||
|
|
||||||
|
tinc recommends no packages.
|
||||||
|
|
||||||
|
tinc suggests no packages.
|
||||||
2
debian/patches/series
vendored
Normal file
2
debian/patches/series
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
fix-incorrect-icmpv6-checksum
|
||||||
|
support-etc-defaults-tinc
|
||||||
12
debian/patches/support-etc-defaults-tinc
vendored
Normal file
12
debian/patches/support-etc-defaults-tinc
vendored
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
--- a/systemd/tinc@.service.in
|
||||||
|
+++ b/systemd/tinc@.service.in
|
||||||
|
@@ -9,7 +9,8 @@
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
WorkingDirectory=@sysconfdir@/tinc/%i
|
||||||
|
-ExecStart=@sbindir@/tincd -n %i -D
|
||||||
|
+EnvironmentFile=/etc/default/tinc
|
||||||
|
+ExecStart=@sbindir@/tincd -n %i -D $EXTRA
|
||||||
|
ExecReload=@sbindir@/tincd -n %i -kHUP
|
||||||
|
KillMode=mixed
|
||||||
|
Restart=on-failure
|
||||||
31
debian/postinst
vendored
Normal file
31
debian/postinst
vendored
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
NETSFILE="/etc/tinc/nets.boot"
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
configure)
|
||||||
|
if [ ! -e /dev/.devfsd ] ; then if [ ! -e /dev/.devfs ] ; then
|
||||||
|
if [ ! -e /dev/net/tun ] ; then if [ ! -e /dev/tun ] ; then if [ -e /dev/MAKEDEV ]; then
|
||||||
|
echo "Creating tun device..."
|
||||||
|
cd /dev && ./MAKEDEV net/tun 2>/dev/null || ./MAKEDEV tun 2>/dev/null || echo "Failed to create tun device."
|
||||||
|
fi; fi; fi
|
||||||
|
fi; fi
|
||||||
|
|
||||||
|
if [ ! -e $NETSFILE ] ; then
|
||||||
|
echo "## This file contains all names of the networks to be started on system startup when using sysvinit." > $NETSFILE
|
||||||
|
echo "## If you are using systemd, use systemctl enable tinc@netname to enable individual networks." >> $NETSFILE
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
abort-upgrade|abort-remove|abort-deconfigure)
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo "postinst called with unknown argument \`$1'" >&2
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
#DEBHELPER#
|
||||||
9
debian/postrm
vendored
Normal file
9
debian/postrm
vendored
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "$1" = purge ]; then
|
||||||
|
rm -f /etc/tinc/nets.boot
|
||||||
|
fi
|
||||||
|
|
||||||
|
#DEBHELPER#
|
||||||
28
debian/preinst
vendored
Normal file
28
debian/preinst
vendored
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
NETSFILE="/etc/tinc/nets.boot"
|
||||||
|
SYSTEM="/lib/systemd/system"
|
||||||
|
WANTS="/etc/systemd/system/multi-user.target.wants"
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
upgrade)
|
||||||
|
if dpkg --compare-versions "$2" '<<' "1.0.27-1"; then
|
||||||
|
if [ -f "$NETSFILE" ]; then
|
||||||
|
echo -n "Creating systemd service instances from nets.boot:"
|
||||||
|
mkdir -p "$WANTS"
|
||||||
|
egrep '^[ ]*[a-zA-Z0-9_-]+' $NETSFILE | while read net args; do
|
||||||
|
echo -n " $net"
|
||||||
|
ln -s "$SYSTEM/tinc@.service" "$WANTS/tinc@$net.service" 2>/dev/null || true
|
||||||
|
done
|
||||||
|
echo "."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
#DEBHELPER#
|
||||||
16
debian/rules
vendored
Executable file
16
debian/rules
vendored
Executable file
|
|
@ -0,0 +1,16 @@
|
||||||
|
#!/usr/bin/make -f
|
||||||
|
|
||||||
|
%:
|
||||||
|
dh $@
|
||||||
|
|
||||||
|
override_dh_clean:
|
||||||
|
dh_clean
|
||||||
|
rm -f doc/tinc.info
|
||||||
|
|
||||||
|
override_dh_auto_configure:
|
||||||
|
dh_auto_configure -- --enable-uml --with-systemd=/lib/systemd/system --runstatedir=/run
|
||||||
|
|
||||||
|
override_dh_auto_install:
|
||||||
|
dh_auto_install -- install-html
|
||||||
|
# Remove info dir file
|
||||||
|
rm -f debian/tinc/usr/share/info/dir
|
||||||
1
debian/source/format
vendored
Normal file
1
debian/source/format
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
3.0 (quilt)
|
||||||
7
debian/tinc.default
vendored
Normal file
7
debian/tinc.default
vendored
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
# Extra options to be passed to tincd.
|
||||||
|
# EXTRA="-d"
|
||||||
|
|
||||||
|
# Limits to be configured for the tincd process. Please read your shell
|
||||||
|
# (pointed by /bin/sh) documentation for ulimit. You probably want to raise the
|
||||||
|
# max locked memory value if using both --mlock and --user flags.
|
||||||
|
# LIMITS="-l 1024"
|
||||||
7
debian/tinc.dirs
vendored
Normal file
7
debian/tinc.dirs
vendored
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
usr/sbin
|
||||||
|
usr/share
|
||||||
|
etc
|
||||||
|
etc/init.d
|
||||||
|
usr/share/locale
|
||||||
|
usr/share/doc/tinc
|
||||||
|
etc/tinc
|
||||||
3
debian/tinc.docs
vendored
Normal file
3
debian/tinc.docs
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
NEWS
|
||||||
|
README
|
||||||
|
AUTHORS
|
||||||
6
debian/tinc.files
vendored
Normal file
6
debian/tinc.files
vendored
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
usr/sbin/tincd
|
||||||
|
usr/share/man
|
||||||
|
etc
|
||||||
|
usr/share/doc/tinc
|
||||||
|
usr/share/locale
|
||||||
|
usr/share/info
|
||||||
41
debian/tinc.if-post-down
vendored
Executable file
41
debian/tinc.if-post-down
vendored
Executable file
|
|
@ -0,0 +1,41 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "$METHOD" = loopback -o -z "$IF_TINC_NET" ]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Determine location of the PID file
|
||||||
|
|
||||||
|
EXTRA=""
|
||||||
|
if [ -n "$IF_TINC_PIDFILE" ]; then
|
||||||
|
EXTRA="--pidfile=$IF_TINC_PIDFILE"
|
||||||
|
else
|
||||||
|
IF_TINC_PIDFILE=/var/run/tinc.$IF_TINC_NET.pid
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Stop the tinc daemon
|
||||||
|
|
||||||
|
read pid rest < $IF_TINC_PIDFILE 2>/dev/null
|
||||||
|
|
||||||
|
/usr/sbin/tincd -n "$IF_TINC_NET" -k $EXTRA
|
||||||
|
|
||||||
|
# Wait for it to shut down properly
|
||||||
|
|
||||||
|
/bin/sleep 0.1
|
||||||
|
i=0;
|
||||||
|
while [ -f $IF_TINC_PIDFILE ] ; do
|
||||||
|
if [ ! -e "/proc/$pid" ] ; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $i = '30' ] ; then
|
||||||
|
echo 'Failed to stop tinc daemon!'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
/bin/sleep 0.1
|
||||||
|
i=$(($i+1))
|
||||||
|
done
|
||||||
|
|
||||||
|
exit 0
|
||||||
70
debian/tinc.if-pre-up
vendored
Executable file
70
debian/tinc.if-pre-up
vendored
Executable file
|
|
@ -0,0 +1,70 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "$METHOD" = loopback -o -z "$IF_TINC_NET" ]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Read options from /etc/default
|
||||||
|
|
||||||
|
[ -r /etc/default/tinc ] && . /etc/default/tinc
|
||||||
|
|
||||||
|
# Set process limits
|
||||||
|
|
||||||
|
setlimits() {
|
||||||
|
while [ $# -gt 0 ]; do
|
||||||
|
parm=$1 ; shift
|
||||||
|
if [ -n "$1" -a "${1#-}" = "$1" ]; then
|
||||||
|
value=$1 ; shift
|
||||||
|
ulimit $parm $value
|
||||||
|
else
|
||||||
|
ulimit $parm
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
test -n "$LIMITS" && setlimits $LIMITS
|
||||||
|
|
||||||
|
# Read options from /etc/network/interfaces
|
||||||
|
|
||||||
|
[ -n "$IF_TINC_CONFIG" ] && EXTRA="$EXTRA -c $IF_TINC_CONFIG"
|
||||||
|
[ -n "$IF_TINC_DEBUG" ] && EXTRA="$EXTRA -d$IF_TINC_DEBUG"
|
||||||
|
[ -n "$IF_TINC_MLOCK" ] && EXTRA="$EXTRA --mlock"
|
||||||
|
[ -n "$IF_TINC_LOGFILE" ] && EXTRA="$EXTRA --logfile=$IF_TINC_LOGFILE"
|
||||||
|
[ -n "$IF_TINC_PIDFILE" ] && EXTRA="$EXTRA --pidfile=$IF_TINC_PIDFILE" || IF_TINC_PIDFILE=/var/run/tinc.$IF_TINC_NET.pid
|
||||||
|
[ -n "$IF_TINC_CHROOT" ] && EXTRA="$EXTRA --chroot"
|
||||||
|
[ -n "$IF_TINC_USER" ] && EXTRA="$EXTRA --user=$IF_TINC_USER"
|
||||||
|
|
||||||
|
|
||||||
|
# Start tinc daemon
|
||||||
|
|
||||||
|
/usr/sbin/tincd -n "$IF_TINC_NET" -o "Interface=$IFACE" $EXTRA
|
||||||
|
|
||||||
|
# Wait for it to come up properly
|
||||||
|
|
||||||
|
/bin/sleep 0.1
|
||||||
|
i=0;
|
||||||
|
while [ ! -f $IF_TINC_PIDFILE ] ; do
|
||||||
|
if [ $i = '30' ] ; then
|
||||||
|
echo 'Failed to start tinc daemon!'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
/bin/sleep 0.1
|
||||||
|
i=$(($i+1))
|
||||||
|
done
|
||||||
|
|
||||||
|
while read pid rest < $IF_TINC_PIDFILE ; do
|
||||||
|
if [ -e "/proc/$pid" ] ; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $i = '30' ] ; then
|
||||||
|
echo 'Failed to start tinc daemon!'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
/bin/sleep 0.1
|
||||||
|
i=$(($i+1))
|
||||||
|
done
|
||||||
|
|
||||||
|
exit 0
|
||||||
9
debian/tinc.if-up
vendored
Executable file
9
debian/tinc.if-up
vendored
Executable file
|
|
@ -0,0 +1,9 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "$METHOD" = loopback -o -n "$IF_TINC_NET" ]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
invoke-rc.d tinc alarm || exit 0
|
||||||
140
debian/tinc.init
vendored
Normal file
140
debian/tinc.init
vendored
Normal file
|
|
@ -0,0 +1,140 @@
|
||||||
|
#! /bin/sh
|
||||||
|
#
|
||||||
|
### BEGIN INIT INFO
|
||||||
|
# Provides: tinc
|
||||||
|
# Required-Start: $remote_fs $network
|
||||||
|
# Required-Stop: $remote_fs $network
|
||||||
|
# Should-Start: $syslog $named
|
||||||
|
# Should-Stop: $syslog
|
||||||
|
# Default-Start: 2 3 4 5
|
||||||
|
# Default-Stop: 0 1 6
|
||||||
|
# Short-Description: Start tinc daemons
|
||||||
|
# Description: Create a file $NETSFILE (/etc/tinc/nets.boot),
|
||||||
|
# and put all the names of the networks in there.
|
||||||
|
# These names must be valid directory names under
|
||||||
|
# $TCONF (/etc/tinc). Lines starting with a # will be
|
||||||
|
# ignored in this file.
|
||||||
|
### END INIT INFO
|
||||||
|
#
|
||||||
|
# Based on Lubomir Bulej's Redhat init script.
|
||||||
|
|
||||||
|
. /lib/lsb/init-functions
|
||||||
|
|
||||||
|
DAEMON="/usr/sbin/tincd"
|
||||||
|
NAME="tinc"
|
||||||
|
DESC="tinc daemons"
|
||||||
|
TCONF="/etc/tinc"
|
||||||
|
NETSFILE="$TCONF/nets.boot"
|
||||||
|
NETS=""
|
||||||
|
|
||||||
|
test -f $DAEMON || exit 0
|
||||||
|
|
||||||
|
[ -r /etc/default/tinc ] && . /etc/default/tinc
|
||||||
|
|
||||||
|
# foreach_net "what-to-say" action [arguments...]
|
||||||
|
foreach_net() {
|
||||||
|
if [ ! -f $NETSFILE ] ; then
|
||||||
|
echo "Please create $NETSFILE."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
echo -n "$1"
|
||||||
|
shift
|
||||||
|
egrep '^[ ]*[a-zA-Z0-9_-]+' $NETSFILE | while read net args; do
|
||||||
|
echo -n " $net"
|
||||||
|
"$@" $net $args
|
||||||
|
done
|
||||||
|
echo "."
|
||||||
|
}
|
||||||
|
|
||||||
|
signal_running() {
|
||||||
|
for i in /var/run/tinc.*pid; do
|
||||||
|
if [ -f "$i" ]; then
|
||||||
|
head -1 $i | while read pid; do
|
||||||
|
kill -$1 $pid
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
setlimits() {
|
||||||
|
while [ $# -gt 0 ]; do
|
||||||
|
parm=$1 ; shift
|
||||||
|
if [ -n "$1" -a "${1#-}" = "$1" ]; then
|
||||||
|
value=$1 ; shift
|
||||||
|
ulimit $parm $value
|
||||||
|
else
|
||||||
|
ulimit $parm
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
test -n "$LIMITS" && setlimits $LIMITS
|
||||||
|
|
||||||
|
start() {
|
||||||
|
$DAEMON $EXTRA -n "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
stop() {
|
||||||
|
[ -f /var/run/tinc.$1.pid ] || return
|
||||||
|
read pid rest </var/run/tinc.$1.pid || return
|
||||||
|
kill -0 "$pid" 2>/dev/null || return
|
||||||
|
|
||||||
|
$DAEMON -n $1 -k || return
|
||||||
|
|
||||||
|
i=0;
|
||||||
|
/bin/sleep 0.5
|
||||||
|
|
||||||
|
# Wait for the pidfile to disappear
|
||||||
|
while [ -f /var/run/tinc.$1.pid ]; do
|
||||||
|
# And check that there is an actual process running
|
||||||
|
kill -0 "$pid" 2>/dev/null || return
|
||||||
|
|
||||||
|
if [ $i = '10' ] ; then
|
||||||
|
# It's still alive, kill it again and give up
|
||||||
|
$DAEMON -n $1 -k && /bin/sleep 0.5
|
||||||
|
break
|
||||||
|
else
|
||||||
|
echo -n "."
|
||||||
|
i=$(($i+1))
|
||||||
|
fi
|
||||||
|
|
||||||
|
/bin/sleep 0.5
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
reload() {
|
||||||
|
$DAEMON -n $1 -kHUP
|
||||||
|
}
|
||||||
|
|
||||||
|
alarm() {
|
||||||
|
$DAEMON -n $1 -kALRM
|
||||||
|
}
|
||||||
|
|
||||||
|
restart() {
|
||||||
|
stop "$@"
|
||||||
|
start "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
start)
|
||||||
|
foreach_net "Starting $DESC:" start
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
foreach_net "Stopping $DESC:" stop
|
||||||
|
;;
|
||||||
|
reload|force-reload)
|
||||||
|
foreach_net "Reloading $DESC configuration:" reload
|
||||||
|
;;
|
||||||
|
restart)
|
||||||
|
foreach_net "Restarting $DESC:" restart
|
||||||
|
;;
|
||||||
|
alarm)
|
||||||
|
signal_running ALRM
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Usage: /etc/init.d/$NAME {start|stop|reload|restart|force-reload|alarm}"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
exit 0
|
||||||
70
debian/upstream/signing-key.asc
vendored
Normal file
70
debian/upstream/signing-key.asc
vendored
Normal file
|
|
@ -0,0 +1,70 @@
|
||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
Version: GnuPG v1
|
||||||
|
|
||||||
|
mQINBEVZzTABEADawFv/ibQ48uA1eRhL07vdM36Pcq2HDyuyNA+vYEalNH4jLmha
|
||||||
|
nGPvDALWwX0DXIWDAG8zeTj8s8zliLIjuPS4WRI2YdKIvWeG9fEvpKSXVWa42ica
|
||||||
|
dpzn/H2aBd4Ax6rQaiTXKOvxANAp2Veb+73ssPV5AL00uGTpzhh98xQzfFQCZ9ZL
|
||||||
|
YSVPqbMed5oCt/4jM9FBO2CuBtkfiO0dVVYtW7FAVjcIlE2NaZol/KGvz7wsS+yA
|
||||||
|
dE42W0l5MdQueLmTF4AIUSSTyPFGMQoyqh+MPif73Y589IGcW6GdfKYWnVDo6Trh
|
||||||
|
HOhcEky+uTYKb6NL0vrJgUiYVMzAOXFDdJni1eQGO6EfZRNYtTga3alWq/jVelK7
|
||||||
|
BID5JyNbkrTAqdPnhJGivVyk8gGX3+Hng8rkXTfWhp6yAYau1QfBm0F2tIQmpL1C
|
||||||
|
+7DoLvFErboQf685jXJBjzyvsJxB2ZLH1OOw6mNL0hy2LFkIyGza/bktY2em4apo
|
||||||
|
KWV5AM5LpyW6THH1oDS7706xFNkf4IFhKE0hKPzBiRnMDjRtMI131lkc5+P8Lqf5
|
||||||
|
jLTCFUgbEhU6Dz2YjhHAumVm0NWJETUpFDtVvMrqk+mp5xldUOWRNlYQC5aQOyda
|
||||||
|
eHOlNzB/BFbPhKMWI/zWlEH6f0t6WjHb4iwpWO47511aVNHF59aPzbAHxwARAQAB
|
||||||
|
tC9UaW5jIERldmVsb3BtZW50IFRlYW0gPHRpbmMtZGV2ZWxAdGluYy12cG4ub3Jn
|
||||||
|
PokCNgQTAQIAIAUCRVnNMAIbAwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJEEpg
|
||||||
|
hLnA1x9KxOAQAMPhO2WTXv9AaGQBQhyyoGseKoSfcRjtI9YEfE0OInQQ2E+SPYF/
|
||||||
|
dkfeLGAUqa4foTYQlMqfw70vBhTdVCb7HLTGn6/ICFUtDwakUQCgUQGlUVQiondA
|
||||||
|
8W6jj+QWrh5BQhHuXy2nCVaKnksu0/xQPsJotghxuYqaot3iJ4qVw9iT/Yeo9irH
|
||||||
|
Ffftqu0OVCdQ5zQuFNI9YCv/C83L59ecH7bOzYz2efTyobvxrhmgQtgOQwCWOE09
|
||||||
|
Kr3veM9KLG33YoXlqv8QN/3CwtsJvSwfhj+R2JowZC7RqHe/yznRzmRMsgbrolxi
|
||||||
|
uiJLonGxcNNkD7WhXi7/zL4A/JaC27XrFf1MPLv8aiTwnOIfrXd5jawpauUOZOXK
|
||||||
|
UjIZHlIqviB0r5s7A+AFeHW38Tp9VzNuQ7aEl5bHbSXV+s7DTAwGb279z0AVaJ3h
|
||||||
|
5hWFxupw7UoGdzROwCBYzeX3sioAL6QvkXua8X6zOH45VEiSwrRX3Hlx/MLo7Z4g
|
||||||
|
PWgFLf6WviHQXCG834To1XIwUk9RgNsL7OzGjtaCuRymADImKMNwierq2zTfoRFQ
|
||||||
|
v9onIadIMF1fsc70hiBG9yAi36MEuk4VxG8Jc3PQQfSFm4RWazv1k3E0AAIob2Ek
|
||||||
|
DLVjvLO62Navo/OQ6D7yyiX0qes5S7/k3F1h8+87eRn3yxZE2kbxPg8KuQENBEVZ
|
||||||
|
zYYBCACoYgExmMKEtABL3pir/IXI4exR/45hkP6txFIrkVQb8DGJ9H39kiDr4gtj
|
||||||
|
F+pvcgMpec35S3m4fJ7WhDNvbDB4ZvONc1NMKs9cqDXfB+TLWPm4W+SkcKUrs+nK
|
||||||
|
i8l7ieggTALJcvRoLTX2EFmUFrD6y870W3rK2SfC/0VJX8Ou5cPbwCeueExjo5x0
|
||||||
|
3gNfu0jWUS0cyA9y+1rVVekrLuJY/+SI4jv3gdzrYbxD0f6dpbpC37QHoJdd0KGF
|
||||||
|
acPtT2azjY+HxW10EA3Aw9oZWFXnb1nFg2RbDpkaGLmLbaXweltLyw154UmCXxym
|
||||||
|
PXPqi9bSfEkj0GiYrapk4mW114u9ABEBAAGJA0QEGAECAA8FAkVZzYcCGwIFCQHh
|
||||||
|
M4ABKQkQSmCEucDXH0rAXSAEGQECAAYFAkVZzYcACgkQ017duBDeLmmu3wf/TFZM
|
||||||
|
tLKxiyQPtGSTE3eULPdWCEMDZXdSPTY0QHM7Zvh+qn1ei+iFpD0549MYnBEAwDIV
|
||||||
|
4o62Nrcg8IPu0CEkZIAn2JiFFGYvMGk91awZGV1GS3umd7Dt349E1oKDPZVzRn+j
|
||||||
|
QIKarXxxabRmx2s/dZZgSs/eguWTboBFmvls9tVfe8x/xPvcHFmqHVUoGKEJy6Tm
|
||||||
|
no+s4yNjpc5wAaRml+GYf1tK9WMFuZn79qKxkYv4WI96dXR0FL59YbFRkkaI+1/b
|
||||||
|
G31MvWTqVjY1nJGslByFPUUB8Ca1djtp1gx6NXnOYr3V5MEDfdbjjPu79No+/y6M
|
||||||
|
tIua5yNtSRlk2nKhIqo3D/sGQ/uHijiMRAtoLhiyqYMc9W9vx/KOoCUHoMJqE39a
|
||||||
|
Eputvgwwo0rwgSmNfB1dzneFojBdJ47WBSHC8NKtkpJj6mzvvlaI9jmEpK54x3nl
|
||||||
|
OmBj3X/xaepoRGAtrmgTBP4A9hSjrTMGu/tUQjlX+Xcr6n3g7GSVe5FpUyIMPXEU
|
||||||
|
+JZDTiEUyn1OdzfNGmnWP+KJX5pQVq4czf5XK6otLZJELDVw/Hbjnjmdz5WOKgEH
|
||||||
|
jSof3WPeMBgPAcd/cMAZeiGtWM1UpJBHqEXTkthmrpmtRftJKDbooNM9d5OwKiT+
|
||||||
|
I3vNBv/plMSr8NDjhTWC+ihrN6RBj1vaqpDgGpucPhoO2hwNqWuI4q5WUKtCyw6J
|
||||||
|
An7ErNaH4c0nVaZq6kJ8Vxdt+LpKYmOsJ8y9xtl6StcrkKNn+6ZfCfee7DEo2bvb
|
||||||
|
scfpqJqqOqb5KOagTpYs8mo6yQ3leRvFtoeBOQHVQzct23EwOMxbDyeunT50a1eH
|
||||||
|
MZTEWuIiuCUudM81QXU46oIcaAtj8tpG0Tmnku9g27EjwxUt+8kVmhlPHMb2TdoF
|
||||||
|
k5d0ce+JuxIG5+i+t8sUCorMc8zfp4g1bxZeMOcPnfyO3bSW11EVcN7ZxHlFC+XE
|
||||||
|
YOByP50CM3P8lItPlQ+WpY9kYWjiwu9kVPaGQ16G47nspngJInU5dhka3KJGtIZe
|
||||||
|
q7kBDQRFWc3GAQgAz/JUs24niKsd0ZtOjUWd4R4y0gjS0kC/vvLL2gbXYkA9tcjG
|
||||||
|
5iEvVWJY34QsudX0v1ULsVnJ89X/gsk8hAhAia1TQm+0Qq+MSxEaQkMSaOO8N70U
|
||||||
|
XzgH1dielvpea20WO4MyWQuRIJ0K2nsGmEPnt6ZP7fK8HVHFNggP/mQ6LMu1reAF
|
||||||
|
gvb8cEtjb9B5QaCUEoLjsbsuo+vLW7AWy4GfIRNESHw2Qt08AUaGrihpu6zi7N2b
|
||||||
|
QkHHJtqa63GzYJ+kYzAVvrFJXdwL/TRXLBzv+6yyvYSIHi8uB6/o6CZN6hpjfpME
|
||||||
|
ph+oYPqXeNOyMd1E9Kg8ymcPrNyQKfE3WnCRXQARAQABiQIlBBgBAgAPBQJFWc3H
|
||||||
|
AhsMBQkB4TOAAAoJEEpghLnA1x9KXYMP/3D9JYti6C8DWuX2hWv+2SUbLcMa5u1e
|
||||||
|
ETewIo5S3mqGWSaxX4YLPVRkZ1lOLmFysOLimf0thYm7IsatLcWmBdYUpK92ilvr
|
||||||
|
Sk2sKlhrOoBXEX/79Kz+Aj5PjeyiQxgQ7Ba/afwhU6aTqs2Dp1T0YNu2eBvV+1QH
|
||||||
|
lZnW2Wh96zzwc0dJUuY9eBk5Fgpu08Wce7o6jxFPtVyAaQa0zcNAmw2TSY7wbunJ
|
||||||
|
WTl9OgATAyqVCuhWW7AnPcSqkH8lQigSc00wfqJKOD2Us0FqN6UKDCZTyQkdP6hx
|
||||||
|
G+3aUkkvGSOxy7u9bVWmrikuJMoiIY/CH/m+GcJJATVibI7t5MhhtBGySKc3PAwc
|
||||||
|
58sVe9AnbDvs84efrNP59j2KG2KKqcqjTGAmKyJnG3N50xJGakDIsqfneIRNWpEE
|
||||||
|
pOOPaOqR4qnPAS9OSt9A3hqBpWPjQcScd6AuO+J2PE5y23pTnb9PtLBQb5e4VFiv
|
||||||
|
N54u8j4bU2CO0SC2isZ3CR68dPHthWsxt4XbjhgktjbpQRQ8L2EDBQ8oE13GOrOw
|
||||||
|
P8x4Q0eC5uzkXNyRqzKOsxlZEuc+75aDDd3M2GDw08FG7GI1p/L+NgenwT+9TmFX
|
||||||
|
2hOKVrjgyx+fPut1t5DJJubDWXGOK33qvrL7HTCEv1zz7LNbbPwwNHK4lfMAWuJW
|
||||||
|
D9wc3Y9Se/P/
|
||||||
|
=5MAs
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
2
debian/watch
vendored
Normal file
2
debian/watch
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
version=3
|
||||||
|
opts=pgpsigurlmangle=s/$/.sig/ http://www.tinc-vpn.org/packages/tinc-(1\.0\.\d+)\.tar\.gz
|
||||||
810
depcomp
810
depcomp
|
|
@ -1,7 +1,9 @@
|
||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
|
|
||||||
# depcomp - compile a program generating dependencies as side-effects
|
# depcomp - compile a program generating dependencies as side-effects
|
||||||
# Copyright 1999, 2000 Free Software Foundation, Inc.
|
|
||||||
|
scriptversion=2018-03-07.03; # UTC
|
||||||
|
|
||||||
|
# Copyright (C) 1999-2020 Free Software Foundation, Inc.
|
||||||
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# 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
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
|
@ -14,9 +16,7 @@
|
||||||
# GNU General Public License for more details.
|
# GNU General Public License for more details.
|
||||||
|
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program; if not, write to the Free Software
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
||||||
# 02111-1307, USA.
|
|
||||||
|
|
||||||
# As a special exception to the GNU General Public License, if you
|
# As a special exception to the GNU General Public License, if you
|
||||||
# distribute this file as part of a program that contains a
|
# distribute this file as part of a program that contains a
|
||||||
|
|
@ -25,17 +25,112 @@
|
||||||
|
|
||||||
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
|
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
|
||||||
|
|
||||||
|
case $1 in
|
||||||
|
'')
|
||||||
|
echo "$0: No command. Try '$0 --help' for more information." 1>&2
|
||||||
|
exit 1;
|
||||||
|
;;
|
||||||
|
-h | --h*)
|
||||||
|
cat <<\EOF
|
||||||
|
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
|
||||||
|
|
||||||
|
Run PROGRAMS ARGS to compile a file, generating dependencies
|
||||||
|
as side-effects.
|
||||||
|
|
||||||
|
Environment variables:
|
||||||
|
depmode Dependency tracking mode.
|
||||||
|
source Source file read by 'PROGRAMS ARGS'.
|
||||||
|
object Object file output by 'PROGRAMS ARGS'.
|
||||||
|
DEPDIR directory where to store dependencies.
|
||||||
|
depfile Dependency file to output.
|
||||||
|
tmpdepfile Temporary file to use when outputting dependencies.
|
||||||
|
libtool Whether libtool is used (yes/no).
|
||||||
|
|
||||||
|
Report bugs to <bug-automake@gnu.org>.
|
||||||
|
EOF
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
-v | --v*)
|
||||||
|
echo "depcomp $scriptversion"
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Get the directory component of the given path, and save it in the
|
||||||
|
# global variables '$dir'. Note that this directory component will
|
||||||
|
# be either empty or ending with a '/' character. This is deliberate.
|
||||||
|
set_dir_from ()
|
||||||
|
{
|
||||||
|
case $1 in
|
||||||
|
*/*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
|
||||||
|
*) dir=;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get the suffix-stripped basename of the given path, and save it the
|
||||||
|
# global variable '$base'.
|
||||||
|
set_base_from ()
|
||||||
|
{
|
||||||
|
base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
|
||||||
|
}
|
||||||
|
|
||||||
|
# If no dependency file was actually created by the compiler invocation,
|
||||||
|
# we still have to create a dummy depfile, to avoid errors with the
|
||||||
|
# Makefile "include basename.Plo" scheme.
|
||||||
|
make_dummy_depfile ()
|
||||||
|
{
|
||||||
|
echo "#dummy" > "$depfile"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Factor out some common post-processing of the generated depfile.
|
||||||
|
# Requires the auxiliary global variable '$tmpdepfile' to be set.
|
||||||
|
aix_post_process_depfile ()
|
||||||
|
{
|
||||||
|
# If the compiler actually managed to produce a dependency file,
|
||||||
|
# post-process it.
|
||||||
|
if test -f "$tmpdepfile"; then
|
||||||
|
# Each line is of the form 'foo.o: dependency.h'.
|
||||||
|
# Do two passes, one to just change these to
|
||||||
|
# $object: dependency.h
|
||||||
|
# and one to simply output
|
||||||
|
# dependency.h:
|
||||||
|
# which is needed to avoid the deleted-header problem.
|
||||||
|
{ sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
|
||||||
|
sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
|
||||||
|
} > "$depfile"
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
else
|
||||||
|
make_dummy_depfile
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# A tabulation character.
|
||||||
|
tab=' '
|
||||||
|
# A newline character.
|
||||||
|
nl='
|
||||||
|
'
|
||||||
|
# Character ranges might be problematic outside the C locale.
|
||||||
|
# These definitions help.
|
||||||
|
upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
|
||||||
|
lower=abcdefghijklmnopqrstuvwxyz
|
||||||
|
digits=0123456789
|
||||||
|
alpha=${upper}${lower}
|
||||||
|
|
||||||
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
|
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
|
||||||
echo "depcomp: Variables source, object and depmode must be set" 1>&2
|
echo "depcomp: Variables source, object and depmode must be set" 1>&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
# `libtool' can also be set to `yes' or `no'.
|
|
||||||
|
|
||||||
depfile=${depfile-`echo "$object" | sed 's,\([^/]*\)$,.deps/\1,;s/\.\([^.]*\)$/.P\1/'`}
|
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
|
||||||
|
depfile=${depfile-`echo "$object" |
|
||||||
|
sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
|
||||||
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
|
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
|
||||||
|
|
||||||
rm -f "$tmpdepfile"
|
rm -f "$tmpdepfile"
|
||||||
|
|
||||||
|
# Avoid interferences from the environment.
|
||||||
|
gccflag= dashmflag=
|
||||||
|
|
||||||
# Some modes work just like other modes, but use different flags. We
|
# Some modes work just like other modes, but use different flags. We
|
||||||
# parameterize here, but still list the modes in the big case below,
|
# parameterize here, but still list the modes in the big case below,
|
||||||
# to make depend.m4 easier to write. Note that we *cannot* use a case
|
# to make depend.m4 easier to write. Note that we *cannot* use a case
|
||||||
|
|
@ -47,9 +142,32 @@ if test "$depmode" = hp; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$depmode" = dashXmstdout; then
|
if test "$depmode" = dashXmstdout; then
|
||||||
# This is just like dashmstdout with a different argument.
|
# This is just like dashmstdout with a different argument.
|
||||||
dashmflag=-xM
|
dashmflag=-xM
|
||||||
depmode=dashmstdout
|
depmode=dashmstdout
|
||||||
|
fi
|
||||||
|
|
||||||
|
cygpath_u="cygpath -u -f -"
|
||||||
|
if test "$depmode" = msvcmsys; then
|
||||||
|
# This is just like msvisualcpp but w/o cygpath translation.
|
||||||
|
# Just convert the backslash-escaped backslashes to single forward
|
||||||
|
# slashes to satisfy depend.m4
|
||||||
|
cygpath_u='sed s,\\\\,/,g'
|
||||||
|
depmode=msvisualcpp
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$depmode" = msvc7msys; then
|
||||||
|
# This is just like msvc7 but w/o cygpath translation.
|
||||||
|
# Just convert the backslash-escaped backslashes to single forward
|
||||||
|
# slashes to satisfy depend.m4
|
||||||
|
cygpath_u='sed s,\\\\,/,g'
|
||||||
|
depmode=msvc7
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$depmode" = xlc; then
|
||||||
|
# IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
|
||||||
|
gccflag=-qmakedep=gcc,-MF
|
||||||
|
depmode=gcc
|
||||||
fi
|
fi
|
||||||
|
|
||||||
case "$depmode" in
|
case "$depmode" in
|
||||||
|
|
@ -57,10 +175,22 @@ gcc3)
|
||||||
## gcc 3 implements dependency tracking that does exactly what
|
## gcc 3 implements dependency tracking that does exactly what
|
||||||
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
|
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
|
||||||
## it if -MD -MP comes after the -MF stuff. Hmm.
|
## it if -MD -MP comes after the -MF stuff. Hmm.
|
||||||
"$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
|
## Unfortunately, FreeBSD c89 acceptance of flags depends upon
|
||||||
|
## the command line argument order; so add the flags where they
|
||||||
|
## appear in depend2.am. Note that the slowdown incurred here
|
||||||
|
## affects only configure: in makefiles, %FASTDEP% shortcuts this.
|
||||||
|
for arg
|
||||||
|
do
|
||||||
|
case $arg in
|
||||||
|
-c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
|
||||||
|
*) set fnord "$@" "$arg" ;;
|
||||||
|
esac
|
||||||
|
shift # fnord
|
||||||
|
shift # $arg
|
||||||
|
done
|
||||||
|
"$@"
|
||||||
stat=$?
|
stat=$?
|
||||||
if test $stat -eq 0; then :
|
if test $stat -ne 0; then
|
||||||
else
|
|
||||||
rm -f "$tmpdepfile"
|
rm -f "$tmpdepfile"
|
||||||
exit $stat
|
exit $stat
|
||||||
fi
|
fi
|
||||||
|
|
@ -68,13 +198,17 @@ gcc3)
|
||||||
;;
|
;;
|
||||||
|
|
||||||
gcc)
|
gcc)
|
||||||
|
## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
|
||||||
|
## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
|
||||||
|
## (see the conditional assignment to $gccflag above).
|
||||||
## There are various ways to get dependency output from gcc. Here's
|
## There are various ways to get dependency output from gcc. Here's
|
||||||
## why we pick this rather obscure method:
|
## why we pick this rather obscure method:
|
||||||
## - Don't want to use -MD because we'd like the dependencies to end
|
## - Don't want to use -MD because we'd like the dependencies to end
|
||||||
## up in a subdir. Having to rename by hand is ugly.
|
## up in a subdir. Having to rename by hand is ugly.
|
||||||
## (We might end up doing this anyway to support other compilers.)
|
## (We might end up doing this anyway to support other compilers.)
|
||||||
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
|
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
|
||||||
## -MM, not -M (despite what the docs say).
|
## -MM, not -M (despite what the docs say). Also, it might not be
|
||||||
|
## supported by the other compilers which use the 'gcc' depmode.
|
||||||
## - Using -M directly means running the compiler twice (even worse
|
## - Using -M directly means running the compiler twice (even worse
|
||||||
## than renaming).
|
## than renaming).
|
||||||
if test -z "$gccflag"; then
|
if test -z "$gccflag"; then
|
||||||
|
|
@ -82,31 +216,31 @@ gcc)
|
||||||
fi
|
fi
|
||||||
"$@" -Wp,"$gccflag$tmpdepfile"
|
"$@" -Wp,"$gccflag$tmpdepfile"
|
||||||
stat=$?
|
stat=$?
|
||||||
if test $stat -eq 0; then :
|
if test $stat -ne 0; then
|
||||||
else
|
|
||||||
rm -f "$tmpdepfile"
|
rm -f "$tmpdepfile"
|
||||||
exit $stat
|
exit $stat
|
||||||
fi
|
fi
|
||||||
rm -f "$depfile"
|
rm -f "$depfile"
|
||||||
echo "$object : \\" > "$depfile"
|
echo "$object : \\" > "$depfile"
|
||||||
alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
|
# The second -e expression handles DOS-style file names with drive
|
||||||
## The second -e expression handles DOS-style file names with drive letters.
|
# letters.
|
||||||
sed -e 's/^[^:]*: / /' \
|
sed -e 's/^[^:]*: / /' \
|
||||||
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
|
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
|
||||||
## This next piece of magic avoids the `deleted header file' problem.
|
## This next piece of magic avoids the "deleted header file" problem.
|
||||||
## The problem is that when a header file which appears in a .P file
|
## The problem is that when a header file which appears in a .P file
|
||||||
## is deleted, the dependency causes make to die (because there is
|
## is deleted, the dependency causes make to die (because there is
|
||||||
## typically no way to rebuild the header). We avoid this by adding
|
## typically no way to rebuild the header). We avoid this by adding
|
||||||
## dummy dependencies for each header file. Too bad gcc doesn't do
|
## dummy dependencies for each header file. Too bad gcc doesn't do
|
||||||
## this for us directly.
|
## this for us directly.
|
||||||
tr ' ' '
|
## Some versions of gcc put a space before the ':'. On the theory
|
||||||
' < "$tmpdepfile" |
|
|
||||||
## Some versions of gcc put a space before the `:'. On the theory
|
|
||||||
## that the space means something, we add a space to the output as
|
## that the space means something, we add a space to the output as
|
||||||
## well.
|
## well. hp depmode also adds that space, but also prefixes the VPATH
|
||||||
|
## to the object. Take care to not repeat it in the output.
|
||||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||||
## correctly. Breaking it into two sed invocations is a workaround.
|
## correctly. Breaking it into two sed invocations is a workaround.
|
||||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
tr ' ' "$nl" < "$tmpdepfile" \
|
||||||
|
| sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
|
||||||
|
| sed -e 's/$/ :/' >> "$depfile"
|
||||||
rm -f "$tmpdepfile"
|
rm -f "$tmpdepfile"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
|
@ -124,8 +258,7 @@ sgi)
|
||||||
"$@" -MDupdate "$tmpdepfile"
|
"$@" -MDupdate "$tmpdepfile"
|
||||||
fi
|
fi
|
||||||
stat=$?
|
stat=$?
|
||||||
if test $stat -eq 0; then :
|
if test $stat -ne 0; then
|
||||||
else
|
|
||||||
rm -f "$tmpdepfile"
|
rm -f "$tmpdepfile"
|
||||||
exit $stat
|
exit $stat
|
||||||
fi
|
fi
|
||||||
|
|
@ -133,106 +266,302 @@ sgi)
|
||||||
|
|
||||||
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
|
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
|
||||||
echo "$object : \\" > "$depfile"
|
echo "$object : \\" > "$depfile"
|
||||||
|
|
||||||
# Clip off the initial element (the dependent). Don't try to be
|
# Clip off the initial element (the dependent). Don't try to be
|
||||||
# clever and replace this with sed code, as IRIX sed won't handle
|
# clever and replace this with sed code, as IRIX sed won't handle
|
||||||
# lines with more than a fixed number of characters (4096 in
|
# lines with more than a fixed number of characters (4096 in
|
||||||
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
|
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
|
||||||
# the IRIX cc adds comments like `#:fec' to the end of the
|
# the IRIX cc adds comments like '#:fec' to the end of the
|
||||||
# dependency line.
|
# dependency line.
|
||||||
tr ' ' '
|
tr ' ' "$nl" < "$tmpdepfile" \
|
||||||
' < "$tmpdepfile" \
|
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
|
||||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
|
| tr "$nl" ' ' >> "$depfile"
|
||||||
tr '
|
echo >> "$depfile"
|
||||||
' ' ' >> $depfile
|
|
||||||
echo >> $depfile
|
|
||||||
|
|
||||||
# The second pass generates a dummy entry for each header file.
|
# The second pass generates a dummy entry for each header file.
|
||||||
tr ' ' '
|
tr ' ' "$nl" < "$tmpdepfile" \
|
||||||
' < "$tmpdepfile" \
|
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
|
||||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
|
>> "$depfile"
|
||||||
>> $depfile
|
|
||||||
else
|
else
|
||||||
# The sourcefile does not contain any dependencies, so just
|
make_dummy_depfile
|
||||||
# store a dummy comment line, to avoid errors with the Makefile
|
|
||||||
# "include basename.Plo" scheme.
|
|
||||||
echo "#dummy" > "$depfile"
|
|
||||||
fi
|
fi
|
||||||
rm -f "$tmpdepfile"
|
rm -f "$tmpdepfile"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
xlc)
|
||||||
|
# This case exists only to let depend.m4 do its work. It works by
|
||||||
|
# looking at the text of this script. This case will never be run,
|
||||||
|
# since it is checked for above.
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
|
||||||
aix)
|
aix)
|
||||||
# The C for AIX Compiler uses -M and outputs the dependencies
|
# The C for AIX Compiler uses -M and outputs the dependencies
|
||||||
# in a .u file. This file always lives in the current directory.
|
# in a .u file. In older versions, this file always lives in the
|
||||||
# Also, the AIX compiler puts `$object:' at the start of each line;
|
# current directory. Also, the AIX compiler puts '$object:' at the
|
||||||
# $object doesn't have directory information.
|
# start of each line; $object doesn't have directory information.
|
||||||
stripped=`echo "$object" | sed -e 's,^.*/,,' -e 's/\(.*\)\..*$/\1/'`
|
# Version 6 uses the directory in both cases.
|
||||||
tmpdepfile="$stripped.u"
|
set_dir_from "$object"
|
||||||
outname="$stripped.o"
|
set_base_from "$object"
|
||||||
if test "$libtool" = yes; then
|
if test "$libtool" = yes; then
|
||||||
|
tmpdepfile1=$dir$base.u
|
||||||
|
tmpdepfile2=$base.u
|
||||||
|
tmpdepfile3=$dir.libs/$base.u
|
||||||
"$@" -Wc,-M
|
"$@" -Wc,-M
|
||||||
else
|
else
|
||||||
|
tmpdepfile1=$dir$base.u
|
||||||
|
tmpdepfile2=$dir$base.u
|
||||||
|
tmpdepfile3=$dir$base.u
|
||||||
"$@" -M
|
"$@" -M
|
||||||
fi
|
fi
|
||||||
|
|
||||||
stat=$?
|
stat=$?
|
||||||
if test $stat -eq 0; then :
|
if test $stat -ne 0; then
|
||||||
else
|
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||||
rm -f "$tmpdepfile"
|
|
||||||
exit $stat
|
exit $stat
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test -f "$tmpdepfile"; then
|
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||||
# Each line is of the form `foo.o: dependent.h'.
|
do
|
||||||
# Do two passes, one to just change these to
|
test -f "$tmpdepfile" && break
|
||||||
# `$object: dependent.h' and one to simply `dependent.h:'.
|
done
|
||||||
sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
|
aix_post_process_depfile
|
||||||
sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
|
;;
|
||||||
else
|
|
||||||
# The sourcefile does not contain any dependencies, so just
|
tcc)
|
||||||
# store a dummy comment line, to avoid errors with the Makefile
|
# tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
|
||||||
# "include basename.Plo" scheme.
|
# FIXME: That version still under development at the moment of writing.
|
||||||
echo "#dummy" > "$depfile"
|
# Make that this statement remains true also for stable, released
|
||||||
|
# versions.
|
||||||
|
# It will wrap lines (doesn't matter whether long or short) with a
|
||||||
|
# trailing '\', as in:
|
||||||
|
#
|
||||||
|
# foo.o : \
|
||||||
|
# foo.c \
|
||||||
|
# foo.h \
|
||||||
|
#
|
||||||
|
# It will put a trailing '\' even on the last line, and will use leading
|
||||||
|
# spaces rather than leading tabs (at least since its commit 0394caf7
|
||||||
|
# "Emit spaces for -MD").
|
||||||
|
"$@" -MD -MF "$tmpdepfile"
|
||||||
|
stat=$?
|
||||||
|
if test $stat -ne 0; then
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
exit $stat
|
||||||
fi
|
fi
|
||||||
|
rm -f "$depfile"
|
||||||
|
# Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
|
||||||
|
# We have to change lines of the first kind to '$object: \'.
|
||||||
|
sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
|
||||||
|
# And for each line of the second kind, we have to emit a 'dep.h:'
|
||||||
|
# dummy dependency, to avoid the deleted-header problem.
|
||||||
|
sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
|
||||||
rm -f "$tmpdepfile"
|
rm -f "$tmpdepfile"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
tru64)
|
## The order of this option in the case statement is important, since the
|
||||||
# The Tru64 AIX compiler uses -MD to generate dependencies as a side
|
## shell code in configure will try each of these formats in the order
|
||||||
# effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
|
## listed in this file. A plain '-MD' option would be understood by many
|
||||||
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
|
## compilers, so we must ensure this comes after the gcc and icc options.
|
||||||
# dependencies in `foo.d' instead, so we check for that too.
|
pgcc)
|
||||||
# Subdirectories are respected.
|
# Portland's C compiler understands '-MD'.
|
||||||
|
# Will always output deps to 'file.d' where file is the root name of the
|
||||||
|
# source file under compilation, even if file resides in a subdirectory.
|
||||||
|
# The object file name does not affect the name of the '.d' file.
|
||||||
|
# pgcc 10.2 will output
|
||||||
|
# foo.o: sub/foo.c sub/foo.h
|
||||||
|
# and will wrap long lines using '\' :
|
||||||
|
# foo.o: sub/foo.c ... \
|
||||||
|
# sub/foo.h ... \
|
||||||
|
# ...
|
||||||
|
set_dir_from "$object"
|
||||||
|
# Use the source, not the object, to determine the base name, since
|
||||||
|
# that's sadly what pgcc will do too.
|
||||||
|
set_base_from "$source"
|
||||||
|
tmpdepfile=$base.d
|
||||||
|
|
||||||
tmpdepfile1="$object.d"
|
# For projects that build the same source file twice into different object
|
||||||
tmpdepfile2=`echo "$object" | sed -e 's/.o$/.d/'`
|
# files, the pgcc approach of using the *source* file root name can cause
|
||||||
if test "$libtool" = yes; then
|
# problems in parallel builds. Use a locking strategy to avoid stomping on
|
||||||
"$@" -Wc,-MD
|
# the same $tmpdepfile.
|
||||||
else
|
lockdir=$base.d-lock
|
||||||
|
trap "
|
||||||
|
echo '$0: caught signal, cleaning up...' >&2
|
||||||
|
rmdir '$lockdir'
|
||||||
|
exit 1
|
||||||
|
" 1 2 13 15
|
||||||
|
numtries=100
|
||||||
|
i=$numtries
|
||||||
|
while test $i -gt 0; do
|
||||||
|
# mkdir is a portable test-and-set.
|
||||||
|
if mkdir "$lockdir" 2>/dev/null; then
|
||||||
|
# This process acquired the lock.
|
||||||
"$@" -MD
|
"$@" -MD
|
||||||
fi
|
stat=$?
|
||||||
|
# Release the lock.
|
||||||
|
rmdir "$lockdir"
|
||||||
|
break
|
||||||
|
else
|
||||||
|
# If the lock is being held by a different process, wait
|
||||||
|
# until the winning process is done or we timeout.
|
||||||
|
while test -d "$lockdir" && test $i -gt 0; do
|
||||||
|
sleep 1
|
||||||
|
i=`expr $i - 1`
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
i=`expr $i - 1`
|
||||||
|
done
|
||||||
|
trap - 1 2 13 15
|
||||||
|
if test $i -le 0; then
|
||||||
|
echo "$0: failed to acquire lock after $numtries attempts" >&2
|
||||||
|
echo "$0: check lockdir '$lockdir'" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
stat=$?
|
if test $stat -ne 0; then
|
||||||
if test $stat -eq 0; then :
|
rm -f "$tmpdepfile"
|
||||||
else
|
exit $stat
|
||||||
rm -f "$tmpdepfile1" "$tmpdepfile2"
|
fi
|
||||||
exit $stat
|
rm -f "$depfile"
|
||||||
fi
|
# Each line is of the form `foo.o: dependent.h',
|
||||||
|
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
|
||||||
|
# Do two passes, one to just change these to
|
||||||
|
# `$object: dependent.h' and one to simply `dependent.h:'.
|
||||||
|
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
|
||||||
|
# Some versions of the HPUX 10.20 sed can't process this invocation
|
||||||
|
# correctly. Breaking it into two sed invocations is a workaround.
|
||||||
|
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
|
||||||
|
| sed -e 's/$/ :/' >> "$depfile"
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
;;
|
||||||
|
|
||||||
if test -f "$tmpdepfile1"; then
|
hp2)
|
||||||
tmpdepfile="$tmpdepfile1"
|
# The "hp" stanza above does not work with aCC (C++) and HP's ia64
|
||||||
else
|
# compilers, which have integrated preprocessors. The correct option
|
||||||
tmpdepfile="$tmpdepfile2"
|
# to use with these is +Maked; it writes dependencies to a file named
|
||||||
fi
|
# 'foo.d', which lands next to the object file, wherever that
|
||||||
if test -f "$tmpdepfile"; then
|
# happens to be.
|
||||||
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
|
# Much of this is similar to the tru64 case; see comments there.
|
||||||
# That's a space and a tab in the [].
|
set_dir_from "$object"
|
||||||
sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
|
set_base_from "$object"
|
||||||
else
|
if test "$libtool" = yes; then
|
||||||
echo "#dummy" > "$depfile"
|
tmpdepfile1=$dir$base.d
|
||||||
fi
|
tmpdepfile2=$dir.libs/$base.d
|
||||||
rm -f "$tmpdepfile"
|
"$@" -Wc,+Maked
|
||||||
;;
|
else
|
||||||
|
tmpdepfile1=$dir$base.d
|
||||||
|
tmpdepfile2=$dir$base.d
|
||||||
|
"$@" +Maked
|
||||||
|
fi
|
||||||
|
stat=$?
|
||||||
|
if test $stat -ne 0; then
|
||||||
|
rm -f "$tmpdepfile1" "$tmpdepfile2"
|
||||||
|
exit $stat
|
||||||
|
fi
|
||||||
|
|
||||||
|
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
|
||||||
|
do
|
||||||
|
test -f "$tmpdepfile" && break
|
||||||
|
done
|
||||||
|
if test -f "$tmpdepfile"; then
|
||||||
|
sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
|
||||||
|
# Add 'dependent.h:' lines.
|
||||||
|
sed -ne '2,${
|
||||||
|
s/^ *//
|
||||||
|
s/ \\*$//
|
||||||
|
s/$/:/
|
||||||
|
p
|
||||||
|
}' "$tmpdepfile" >> "$depfile"
|
||||||
|
else
|
||||||
|
make_dummy_depfile
|
||||||
|
fi
|
||||||
|
rm -f "$tmpdepfile" "$tmpdepfile2"
|
||||||
|
;;
|
||||||
|
|
||||||
|
tru64)
|
||||||
|
# The Tru64 compiler uses -MD to generate dependencies as a side
|
||||||
|
# effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
|
||||||
|
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
|
||||||
|
# dependencies in 'foo.d' instead, so we check for that too.
|
||||||
|
# Subdirectories are respected.
|
||||||
|
set_dir_from "$object"
|
||||||
|
set_base_from "$object"
|
||||||
|
|
||||||
|
if test "$libtool" = yes; then
|
||||||
|
# Libtool generates 2 separate objects for the 2 libraries. These
|
||||||
|
# two compilations output dependencies in $dir.libs/$base.o.d and
|
||||||
|
# in $dir$base.o.d. We have to check for both files, because
|
||||||
|
# one of the two compilations can be disabled. We should prefer
|
||||||
|
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is
|
||||||
|
# automatically cleaned when .libs/ is deleted, while ignoring
|
||||||
|
# the former would cause a distcleancheck panic.
|
||||||
|
tmpdepfile1=$dir$base.o.d # libtool 1.5
|
||||||
|
tmpdepfile2=$dir.libs/$base.o.d # Likewise.
|
||||||
|
tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504
|
||||||
|
"$@" -Wc,-MD
|
||||||
|
else
|
||||||
|
tmpdepfile1=$dir$base.d
|
||||||
|
tmpdepfile2=$dir$base.d
|
||||||
|
tmpdepfile3=$dir$base.d
|
||||||
|
"$@" -MD
|
||||||
|
fi
|
||||||
|
|
||||||
|
stat=$?
|
||||||
|
if test $stat -ne 0; then
|
||||||
|
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||||
|
exit $stat
|
||||||
|
fi
|
||||||
|
|
||||||
|
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||||
|
do
|
||||||
|
test -f "$tmpdepfile" && break
|
||||||
|
done
|
||||||
|
# Same post-processing that is required for AIX mode.
|
||||||
|
aix_post_process_depfile
|
||||||
|
;;
|
||||||
|
|
||||||
|
msvc7)
|
||||||
|
if test "$libtool" = yes; then
|
||||||
|
showIncludes=-Wc,-showIncludes
|
||||||
|
else
|
||||||
|
showIncludes=-showIncludes
|
||||||
|
fi
|
||||||
|
"$@" $showIncludes > "$tmpdepfile"
|
||||||
|
stat=$?
|
||||||
|
grep -v '^Note: including file: ' "$tmpdepfile"
|
||||||
|
if test $stat -ne 0; then
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
exit $stat
|
||||||
|
fi
|
||||||
|
rm -f "$depfile"
|
||||||
|
echo "$object : \\" > "$depfile"
|
||||||
|
# The first sed program below extracts the file names and escapes
|
||||||
|
# backslashes for cygpath. The second sed program outputs the file
|
||||||
|
# name when reading, but also accumulates all include files in the
|
||||||
|
# hold buffer in order to output them again at the end. This only
|
||||||
|
# works with sed implementations that can handle large buffers.
|
||||||
|
sed < "$tmpdepfile" -n '
|
||||||
|
/^Note: including file: *\(.*\)/ {
|
||||||
|
s//\1/
|
||||||
|
s/\\/\\\\/g
|
||||||
|
p
|
||||||
|
}' | $cygpath_u | sort -u | sed -n '
|
||||||
|
s/ /\\ /g
|
||||||
|
s/\(.*\)/'"$tab"'\1 \\/p
|
||||||
|
s/.\(.*\) \\/\1:/
|
||||||
|
H
|
||||||
|
$ {
|
||||||
|
s/.*/'"$tab"'/
|
||||||
|
G
|
||||||
|
p
|
||||||
|
}' >> "$depfile"
|
||||||
|
echo >> "$depfile" # make sure the fragment doesn't end with a backslash
|
||||||
|
rm -f "$tmpdepfile"
|
||||||
|
;;
|
||||||
|
|
||||||
|
msvc7msys)
|
||||||
|
# This case exists only to let depend.m4 do its work. It works by
|
||||||
|
# looking at the text of this script. This case will never be run,
|
||||||
|
# since it is checked for above.
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
|
||||||
#nosideeffect)
|
#nosideeffect)
|
||||||
# This comment above is used by automake to tell side-effect
|
# This comment above is used by automake to tell side-effect
|
||||||
|
|
@ -240,41 +569,49 @@ tru64)
|
||||||
|
|
||||||
dashmstdout)
|
dashmstdout)
|
||||||
# Important note: in order to support this mode, a compiler *must*
|
# Important note: in order to support this mode, a compiler *must*
|
||||||
# always write the proprocessed file to stdout, regardless of -o,
|
# always write the preprocessed file to stdout, regardless of -o.
|
||||||
# because we must use -o when running libtool.
|
"$@" || exit $?
|
||||||
test -z "$dashmflag" && dashmflag=-M
|
|
||||||
( IFS=" "
|
# Remove the call to Libtool.
|
||||||
case " $* " in
|
if test "$libtool" = yes; then
|
||||||
*" --mode=compile "*) # this is libtool, let us make it quiet
|
while test "X$1" != 'X--mode=compile'; do
|
||||||
for arg
|
shift
|
||||||
do # cycle over the arguments
|
done
|
||||||
case "$arg" in
|
shift
|
||||||
"--mode=compile")
|
fi
|
||||||
# insert --quiet before "--mode=compile"
|
|
||||||
set fnord "$@" --quiet
|
# Remove '-o $object'.
|
||||||
shift # fnord
|
IFS=" "
|
||||||
;;
|
for arg
|
||||||
esac
|
do
|
||||||
set fnord "$@" "$arg"
|
case $arg in
|
||||||
shift # fnord
|
-o)
|
||||||
shift # "$arg"
|
shift
|
||||||
done
|
;;
|
||||||
|
$object)
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
set fnord "$@" "$arg"
|
||||||
|
shift # fnord
|
||||||
|
shift # $arg
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
"$@" $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
|
done
|
||||||
) &
|
|
||||||
proc=$!
|
test -z "$dashmflag" && dashmflag=-M
|
||||||
"$@"
|
# Require at least two characters before searching for ':'
|
||||||
stat=$?
|
# in the target name. This is to cope with DOS-style filenames:
|
||||||
wait "$proc"
|
# a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
|
||||||
if test "$stat" != 0; then exit $stat; fi
|
"$@" $dashmflag |
|
||||||
|
sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
|
||||||
rm -f "$depfile"
|
rm -f "$depfile"
|
||||||
cat < "$tmpdepfile" > "$depfile"
|
cat < "$tmpdepfile" > "$depfile"
|
||||||
tr ' ' '
|
# Some versions of the HPUX 10.20 sed can't process this sed invocation
|
||||||
' < "$tmpdepfile" | \
|
# correctly. Breaking it into two sed invocations is a workaround.
|
||||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
tr ' ' "$nl" < "$tmpdepfile" \
|
||||||
## correctly. Breaking it into two sed invocations is a workaround.
|
| sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
|
||||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
| sed -e 's/$/ :/' >> "$depfile"
|
||||||
rm -f "$tmpdepfile"
|
rm -f "$tmpdepfile"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
|
@ -285,74 +622,93 @@ dashXmstdout)
|
||||||
;;
|
;;
|
||||||
|
|
||||||
makedepend)
|
makedepend)
|
||||||
# X makedepend
|
"$@" || exit $?
|
||||||
(
|
# Remove any Libtool call
|
||||||
shift
|
if test "$libtool" = yes; then
|
||||||
cleared=no
|
while test "X$1" != 'X--mode=compile'; do
|
||||||
for arg in "$@"; do
|
shift
|
||||||
case $cleared in no)
|
|
||||||
set ""; shift
|
|
||||||
cleared=yes
|
|
||||||
esac
|
|
||||||
case "$arg" in
|
|
||||||
-D*|-I*)
|
|
||||||
set fnord "$@" "$arg"; shift;;
|
|
||||||
-*)
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
set fnord "$@" "$arg"; shift;;
|
|
||||||
esac
|
|
||||||
done
|
done
|
||||||
obj_suffix="`echo $object | sed 's/^.*\././'`"
|
shift
|
||||||
touch "$tmpdepfile"
|
fi
|
||||||
${MAKEDEPEND-makedepend} 2>/dev/null -o"$obj_suffix" -f"$tmpdepfile" "$@"
|
# X makedepend
|
||||||
) &
|
shift
|
||||||
proc=$!
|
cleared=no eat=no
|
||||||
"$@"
|
for arg
|
||||||
stat=$?
|
do
|
||||||
wait "$proc"
|
case $cleared in
|
||||||
if test "$stat" != 0; then exit $stat; fi
|
no)
|
||||||
|
set ""; shift
|
||||||
|
cleared=yes ;;
|
||||||
|
esac
|
||||||
|
if test $eat = yes; then
|
||||||
|
eat=no
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
case "$arg" in
|
||||||
|
-D*|-I*)
|
||||||
|
set fnord "$@" "$arg"; shift ;;
|
||||||
|
# Strip any option that makedepend may not understand. Remove
|
||||||
|
# the object too, otherwise makedepend will parse it as a source file.
|
||||||
|
-arch)
|
||||||
|
eat=yes ;;
|
||||||
|
-*|$object)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
set fnord "$@" "$arg"; shift ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
obj_suffix=`echo "$object" | sed 's/^.*\././'`
|
||||||
|
touch "$tmpdepfile"
|
||||||
|
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
|
||||||
rm -f "$depfile"
|
rm -f "$depfile"
|
||||||
cat < "$tmpdepfile" > "$depfile"
|
# makedepend may prepend the VPATH from the source file name to the object.
|
||||||
tail +3 "$tmpdepfile" | tr ' ' '
|
# No need to regex-escape $object, excess matching of '.' is harmless.
|
||||||
' | \
|
sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
|
||||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
# Some versions of the HPUX 10.20 sed can't process the last invocation
|
||||||
## correctly. Breaking it into two sed invocations is a workaround.
|
# correctly. Breaking it into two sed invocations is a workaround.
|
||||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
sed '1,2d' "$tmpdepfile" \
|
||||||
|
| tr ' ' "$nl" \
|
||||||
|
| sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
|
||||||
|
| sed -e 's/$/ :/' >> "$depfile"
|
||||||
rm -f "$tmpdepfile" "$tmpdepfile".bak
|
rm -f "$tmpdepfile" "$tmpdepfile".bak
|
||||||
;;
|
;;
|
||||||
|
|
||||||
cpp)
|
cpp)
|
||||||
# Important note: in order to support this mode, a compiler *must*
|
# Important note: in order to support this mode, a compiler *must*
|
||||||
# always write the proprocessed file to stdout, regardless of -o,
|
# always write the preprocessed file to stdout.
|
||||||
# because we must use -o when running libtool.
|
"$@" || exit $?
|
||||||
( IFS=" "
|
|
||||||
case " $* " in
|
# Remove the call to Libtool.
|
||||||
*" --mode=compile "*)
|
if test "$libtool" = yes; then
|
||||||
for arg
|
while test "X$1" != 'X--mode=compile'; do
|
||||||
do # cycle over the arguments
|
shift
|
||||||
case $arg in
|
done
|
||||||
"--mode=compile")
|
shift
|
||||||
# insert --quiet before "--mode=compile"
|
fi
|
||||||
set fnord "$@" --quiet
|
|
||||||
shift # fnord
|
# Remove '-o $object'.
|
||||||
;;
|
IFS=" "
|
||||||
esac
|
for arg
|
||||||
set fnord "$@" "$arg"
|
do
|
||||||
shift # fnord
|
case $arg in
|
||||||
shift # "$arg"
|
-o)
|
||||||
done
|
shift
|
||||||
|
;;
|
||||||
|
$object)
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
set fnord "$@" "$arg"
|
||||||
|
shift # fnord
|
||||||
|
shift # $arg
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
"$@" -E |
|
done
|
||||||
sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
|
|
||||||
sed '$ s: \\$::' > "$tmpdepfile"
|
"$@" -E \
|
||||||
) &
|
| sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
|
||||||
proc=$!
|
-e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
|
||||||
"$@"
|
| sed '$ s: \\$::' > "$tmpdepfile"
|
||||||
stat=$?
|
|
||||||
wait "$proc"
|
|
||||||
if test "$stat" != 0; then exit $stat; fi
|
|
||||||
rm -f "$depfile"
|
rm -f "$depfile"
|
||||||
echo "$object : \\" > "$depfile"
|
echo "$object : \\" > "$depfile"
|
||||||
cat < "$tmpdepfile" >> "$depfile"
|
cat < "$tmpdepfile" >> "$depfile"
|
||||||
|
|
@ -362,42 +718,56 @@ cpp)
|
||||||
|
|
||||||
msvisualcpp)
|
msvisualcpp)
|
||||||
# Important note: in order to support this mode, a compiler *must*
|
# Important note: in order to support this mode, a compiler *must*
|
||||||
# always write the proprocessed file to stdout, regardless of -o,
|
# always write the preprocessed file to stdout.
|
||||||
# because we must use -o when running libtool.
|
"$@" || exit $?
|
||||||
( IFS=" "
|
|
||||||
case " $* " in
|
# Remove the call to Libtool.
|
||||||
*" --mode=compile "*)
|
if test "$libtool" = yes; then
|
||||||
for arg
|
while test "X$1" != 'X--mode=compile'; do
|
||||||
do # cycle over the arguments
|
shift
|
||||||
case $arg in
|
done
|
||||||
"--mode=compile")
|
shift
|
||||||
# insert --quiet before "--mode=compile"
|
fi
|
||||||
set fnord "$@" --quiet
|
|
||||||
shift # fnord
|
IFS=" "
|
||||||
;;
|
for arg
|
||||||
esac
|
do
|
||||||
set fnord "$@" "$arg"
|
case "$arg" in
|
||||||
shift # fnord
|
-o)
|
||||||
shift # "$arg"
|
shift
|
||||||
done
|
|
||||||
;;
|
;;
|
||||||
|
$object)
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
|
||||||
|
set fnord "$@"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
set fnord "$@" "$arg"
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
"$@" -E |
|
done
|
||||||
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
|
"$@" -E 2>/dev/null |
|
||||||
) &
|
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
|
||||||
proc=$!
|
|
||||||
"$@"
|
|
||||||
stat=$?
|
|
||||||
wait "$proc"
|
|
||||||
if test "$stat" != 0; then exit $stat; fi
|
|
||||||
rm -f "$depfile"
|
rm -f "$depfile"
|
||||||
echo "$object : \\" > "$depfile"
|
echo "$object : \\" > "$depfile"
|
||||||
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
|
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
|
||||||
echo " " >> "$depfile"
|
echo "$tab" >> "$depfile"
|
||||||
. "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
|
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
|
||||||
rm -f "$tmpdepfile"
|
rm -f "$tmpdepfile"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
msvcmsys)
|
||||||
|
# This case exists only to let depend.m4 do its work. It works by
|
||||||
|
# looking at the text of this script. This case will never be run,
|
||||||
|
# since it is checked for above.
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
|
||||||
none)
|
none)
|
||||||
exec "$@"
|
exec "$@"
|
||||||
;;
|
;;
|
||||||
|
|
@ -409,3 +779,13 @@ none)
|
||||||
esac
|
esac
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|
||||||
|
# Local Variables:
|
||||||
|
# mode: shell-script
|
||||||
|
# sh-indentation: 2
|
||||||
|
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||||
|
# time-stamp-start: "scriptversion="
|
||||||
|
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||||
|
# time-stamp-time-zone: "UTC0"
|
||||||
|
# time-stamp-end: "; # UTC"
|
||||||
|
# End:
|
||||||
|
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
||||||
# Having a separate GNUmakefile lets me use features of GNU make
|
|
||||||
# to generate the man pages.
|
|
||||||
# This makefile is used only if you run GNU Make.
|
|
||||||
# It is necessary if you want to build targets usually of interest
|
|
||||||
# only to the maintainer.
|
|
||||||
|
|
||||||
have-Makefile := $(shell test -f Makefile && echo yes)
|
|
||||||
|
|
||||||
# If the user runs GNU make but has not yet run ./configure,
|
|
||||||
# give them a diagnostic.
|
|
||||||
ifeq ($(have-Makefile),yes)
|
|
||||||
|
|
||||||
include Makefile
|
|
||||||
include $(srcdir)/Makefile.maint
|
|
||||||
|
|
||||||
else
|
|
||||||
|
|
||||||
all:
|
|
||||||
@echo There seems to be no Makefile in this directory.
|
|
||||||
@echo "You must run ./configure before running \`make'."
|
|
||||||
@exit 1
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
@ -1,25 +1,35 @@
|
||||||
## Process this file with automake to get Makefile.in
|
## Process this file with automake to get Makefile.in
|
||||||
|
|
||||||
SUBDIRS = es
|
|
||||||
|
|
||||||
info_TEXINFOS = tinc.texi
|
info_TEXINFOS = tinc.texi
|
||||||
|
tinc_TEXINFOS = tincinclude.texi
|
||||||
|
|
||||||
dyn_MANS =
|
man_MANS = tincd.8 tinc.conf.5
|
||||||
man_aux = $(dyn_MANS:.8=.x)
|
|
||||||
|
|
||||||
man_MANS = tincd.8 tinc.conf.5 $(dyn_MANS)
|
EXTRA_DIST = tincinclude.texi.in tincd.8.in tinc.conf.5.in sample-config
|
||||||
|
|
||||||
PERL = @PERL@
|
CLEANFILES = *.html tincd.8 tinc.conf.5 tincinclude.texi
|
||||||
HELP2MAN = help2man
|
|
||||||
MAINTAINERCLEANFILES = $(dyn_MANS)
|
|
||||||
|
|
||||||
EXTRA_DIST = $(man_MANS) $(HELP2MAN) $(man_aux) \
|
texi2html: tinc.texi
|
||||||
Makefile.maint GNUmakefile Makefile.summ sample-config.tar.gz
|
$(AM_V_GEN)texi2html -split=chapter $<
|
||||||
|
|
||||||
# Use `ginstall' in the definition of man_MANS to avoid
|
tincd.8.html: tincd.8
|
||||||
# confusion with the `install' target. The install rule transforms `ginstall'
|
$(AM_V_GEN)w3mman2html $< > $@
|
||||||
# to install before applying any user-specified name transformations.
|
|
||||||
transform = s/ginstall/install/; @program_transform_name@
|
|
||||||
|
|
||||||
# For additional rules usually of interest only to the maintainer,
|
tinc.conf.5.html: tinc.conf.5
|
||||||
# see GNUmakefile and Makefile.maint.
|
$(AM_V_GEN)w3mman2html $< > $@
|
||||||
|
|
||||||
|
substitute = sed \
|
||||||
|
-e s,'@PACKAGE\@',"$(PACKAGE)",g \
|
||||||
|
-e s,'@VERSION\@',"$(VERSION)",g \
|
||||||
|
-e s,'@sysconfdir\@',"$(sysconfdir)",g \
|
||||||
|
-e s,'@runstatedir\@',"$(runstatedir)",g \
|
||||||
|
-e s,'@localstatedir\@',"$(localstatedir)",g
|
||||||
|
|
||||||
|
tincd.8: $(srcdir)/tincd.8.in
|
||||||
|
$(AM_V_GEN)$(substitute) $(srcdir)/tincd.8.in > $@
|
||||||
|
|
||||||
|
tinc.conf.5: $(srcdir)/tinc.conf.5.in
|
||||||
|
$(AM_V_GEN)$(substitute) $(srcdir)/tinc.conf.5.in > $@
|
||||||
|
|
||||||
|
tincinclude.texi: $(srcdir)/tincinclude.texi.in
|
||||||
|
$(AM_V_GEN)$(substitute) $(srcdir)/tincinclude.texi.in > $@
|
||||||
|
|
|
||||||
1112
doc/Makefile.in
1112
doc/Makefile.in
File diff suppressed because it is too large
Load diff
|
|
@ -1,38 +0,0 @@
|
||||||
# This -*- Makefile -*- uses features of GNU make.
|
|
||||||
# It is included via GNUmakefile.
|
|
||||||
|
|
||||||
# The following one line summaries were extracted from the
|
|
||||||
# original man pages using this bit of sh code:
|
|
||||||
# for i in *.1; do echo "$i: "|tr -d '\012'; \
|
|
||||||
# grep -A1 SH.NAME $i|sed '/SH NAME/d;s/^[^ ][^ ]* .- //'; done
|
|
||||||
|
|
||||||
include Makefile.summ
|
|
||||||
|
|
||||||
HELP2MAN-run = $(PERL) -w -- $(srcdir)/$(HELP2MAN)
|
|
||||||
|
|
||||||
# Depend on configure.in to get version number changes.
|
|
||||||
$(dyn_MANS): $(top_srcdir)/configure.in
|
|
||||||
|
|
||||||
# Depend on the source file containing the --help text.
|
|
||||||
# Filter out irregular cases.
|
|
||||||
regular-men = $(filter-out $(irregular-men),$(dyn_MANS))
|
|
||||||
$(regular-men): %.8: $(top_srcdir)/src/%.c
|
|
||||||
|
|
||||||
executable = $(patsubst %/install,%/ginstall, ../src/$(basename $@))
|
|
||||||
$(dyn_MANS): %.8: %.x $(HELP2MAN)
|
|
||||||
@if test -f $(executable); then \
|
|
||||||
echo "Updating man page $@"; \
|
|
||||||
rm -f $@-t $@; \
|
|
||||||
$(HELP2MAN-run) \
|
|
||||||
--name="$($(basename $@)-summary)" \
|
|
||||||
--include=$(basename $@).x \
|
|
||||||
$(executable) > $@-t; \
|
|
||||||
chmod -w $@-t; \
|
|
||||||
mv $@-t $@; \
|
|
||||||
else \
|
|
||||||
echo "WARNING: The man page $@ cannot be updated yet."; \
|
|
||||||
echo " Retry once the corresponding executable is built."; \
|
|
||||||
fi
|
|
||||||
|
|
||||||
sample-config.tar.gz:
|
|
||||||
GZIP=$(GZIP_ENV) $(AMTAR) chozf sample-config.tar.gz sample-config
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
||||||
# -*- makefile -*-
|
|
||||||
tincd-summary = tinc VPN daemon
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
## Process this file with automake to get Makefile.in
|
|
||||||
|
|
||||||
# Nothing to see here, go away!
|
|
||||||
|
|
@ -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@
|
|
||||||
|
|
||||||
# Nothing to see here, go away!
|
|
||||||
|
|
||||||
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@
|
|
||||||
HAVE_TUNTAP = @HAVE_TUNTAP@
|
|
||||||
INCLUDES = @INCLUDES@
|
|
||||||
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
|
|
||||||
INSTOBJEXT = @INSTOBJEXT@
|
|
||||||
INTLBISON = @INTLBISON@
|
|
||||||
INTLLIBS = @INTLLIBS@
|
|
||||||
INTLOBJS = @INTLOBJS@
|
|
||||||
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
|
|
||||||
LIBICONV = @LIBICONV@
|
|
||||||
LINUX_IF_TUN_H = @LINUX_IF_TUN_H@
|
|
||||||
LN_S = @LN_S@
|
|
||||||
MKINSTALLDIRS = @MKINSTALLDIRS@
|
|
||||||
MSGFMT = @MSGFMT@
|
|
||||||
OBJEXT = @OBJEXT@
|
|
||||||
PACKAGE = @PACKAGE@
|
|
||||||
PERL = @PERL@
|
|
||||||
POFILES = @POFILES@
|
|
||||||
POSUB = @POSUB@
|
|
||||||
RANLIB = @RANLIB@
|
|
||||||
USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
|
|
||||||
USE_NLS = @USE_NLS@
|
|
||||||
VERSION = @VERSION@
|
|
||||||
am__include = @am__include@
|
|
||||||
am__quote = @am__quote@
|
|
||||||
install_sh = @install_sh@
|
|
||||||
subdir = doc/es
|
|
||||||
mkinstalldirs = $(SHELL) $(top_srcdir)/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 doc/es/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:
|
|
||||||
375
doc/help2man
375
doc/help2man
|
|
@ -1,375 +0,0 @@
|
||||||
#!/usr/bin/perl -w
|
|
||||||
|
|
||||||
# Generate a short man page from --help and --version output.
|
|
||||||
# Copyright © 1997, 98 Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
# any later version.
|
|
||||||
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software Foundation,
|
|
||||||
# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
|
|
||||||
# Written by Brendan O'Dea <bod@compusol.com.au>
|
|
||||||
|
|
||||||
use 5.004;
|
|
||||||
use strict;
|
|
||||||
use Getopt::Long;
|
|
||||||
use POSIX qw(strftime setlocale LC_TIME);
|
|
||||||
|
|
||||||
my $this_program = 'help2man';
|
|
||||||
my $this_version = '1.006';
|
|
||||||
my $version_info = <<EOT;
|
|
||||||
$this_program $this_version
|
|
||||||
|
|
||||||
Copyright (C) 1997, 98 Free Software Foundation, Inc.
|
|
||||||
This is free software; see the source for copying conditions. There is NO
|
|
||||||
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
|
|
||||||
Written by Brendan O'Dea <bod\@compusol.com.au>
|
|
||||||
EOT
|
|
||||||
|
|
||||||
my $help_info = <<EOT;
|
|
||||||
`$this_program' generates a man page out of `--help' and `--version' output.
|
|
||||||
|
|
||||||
Usage: $this_program [OPTION]... EXECUTABLE
|
|
||||||
|
|
||||||
--name=STRING use `STRING' as the description for the NAME paragraph
|
|
||||||
--include=FILE include material from `FILE'
|
|
||||||
--opt-include=FILE include material from `FILE' if it exists
|
|
||||||
--output=FILE send output to `FILE'
|
|
||||||
--no-info suppress pointer to Texinfo manual
|
|
||||||
--help print this help, then exit
|
|
||||||
--version print $this_program program version number, then exit
|
|
||||||
|
|
||||||
EXECUTABLE should accept `--help' and `version' options.
|
|
||||||
EOT
|
|
||||||
|
|
||||||
my ($include, $opt_name, $opt_include, $opt_output, $opt_no_info);
|
|
||||||
|
|
||||||
# Parse options.
|
|
||||||
GetOptions (
|
|
||||||
'name=s' => \$opt_name,
|
|
||||||
'include=s' => \$include,
|
|
||||||
'opt-include=s' => \$opt_include,
|
|
||||||
'output=s' => \$opt_output,
|
|
||||||
'no-info' => \$opt_no_info,
|
|
||||||
help => sub { print $help_info; exit },
|
|
||||||
version => sub { print $version_info; exit },
|
|
||||||
) or die $help_info;
|
|
||||||
|
|
||||||
die $help_info unless @ARGV == 1;
|
|
||||||
|
|
||||||
my %include = ();
|
|
||||||
my @include = (); # to retain order
|
|
||||||
|
|
||||||
# Process include file (if given). Format is:
|
|
||||||
#
|
|
||||||
# [section name]
|
|
||||||
# verbatim text
|
|
||||||
|
|
||||||
if ($include or $opt_include)
|
|
||||||
{
|
|
||||||
if (open INC, $include || $opt_include)
|
|
||||||
{
|
|
||||||
my $sect;
|
|
||||||
|
|
||||||
while (<INC>)
|
|
||||||
{
|
|
||||||
if (/^\[([^]]+)\]/)
|
|
||||||
{
|
|
||||||
$sect = uc $1;
|
|
||||||
$sect =~ s/^\s+//;
|
|
||||||
$sect =~ s/\s+$//;
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Silently ignore anything before the first
|
|
||||||
# section--allows for comments and revision info.
|
|
||||||
next unless $sect;
|
|
||||||
|
|
||||||
push @include, $sect unless $include{$sect};
|
|
||||||
$include{$sect} ||= '';
|
|
||||||
$include{$sect} .= $_;
|
|
||||||
}
|
|
||||||
|
|
||||||
close INC;
|
|
||||||
|
|
||||||
die "$this_program: no valid information found in `$include'\n"
|
|
||||||
unless %include;
|
|
||||||
|
|
||||||
# Compress trailing blank lines.
|
|
||||||
for (keys %include)
|
|
||||||
{
|
|
||||||
$include{$_} =~ s/\n+$//;
|
|
||||||
$include{$_} .= "\n" unless /^NAME$/;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
die "$this_program: can't open `$include' ($!)\n" if $include;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Turn off localisation of executable's ouput.
|
|
||||||
@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
|
|
||||||
|
|
||||||
# Turn off localisation of date (for strftime)
|
|
||||||
setlocale LC_TIME, 'C';
|
|
||||||
|
|
||||||
# Grab help and version paragraphs from executable
|
|
||||||
my @help = split /\n\n+/, `$ARGV[0] --help 2>/dev/null`
|
|
||||||
or die "$this_program: can't get `--help' info from $ARGV[0]\n";
|
|
||||||
|
|
||||||
my @version = split /\n\n+/, `$ARGV[0] --version 2>/dev/null`
|
|
||||||
or die "$this_program: can't get `--version' info from $ARGV[0]\n";
|
|
||||||
|
|
||||||
my $date = strftime "%B %Y", localtime;
|
|
||||||
my $program = $ARGV[0]; $program =~ s!.*/!!;
|
|
||||||
my $package = $program;
|
|
||||||
my $version;
|
|
||||||
|
|
||||||
if ($opt_output)
|
|
||||||
{
|
|
||||||
unlink $opt_output
|
|
||||||
or die "$this_program: can't unlink $opt_output ($!)\n"
|
|
||||||
if -e $opt_output;
|
|
||||||
|
|
||||||
open STDOUT, ">$opt_output"
|
|
||||||
or die "$this_program: can't create $opt_output ($!)\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
# The first line of the --version information is assumed to be in one
|
|
||||||
# of the following formats:
|
|
||||||
#
|
|
||||||
# <version>
|
|
||||||
# <program> <version>
|
|
||||||
# GNU <program> <version>
|
|
||||||
# <program> (GNU <package>) <version>
|
|
||||||
# <program> - GNU <package> <version>
|
|
||||||
#
|
|
||||||
# and seperated from any copyright/author details by a blank line.
|
|
||||||
|
|
||||||
$_ = shift @version;
|
|
||||||
|
|
||||||
if (/^(\S+)\s+\((GNU\s+[^)]+)\)\s+(.*)/ or
|
|
||||||
/^(\S+)\s+-\s*(GNU\s+\S+)\s+(.*)/)
|
|
||||||
{
|
|
||||||
$program = $1;
|
|
||||||
$package = $2;
|
|
||||||
$version = $3;
|
|
||||||
}
|
|
||||||
elsif (/^(GNU\s+)?(\S+)\s+(.*)/)
|
|
||||||
{
|
|
||||||
$program = $2;
|
|
||||||
$package = $1 ? "$1$2" : $2;
|
|
||||||
$version = $3;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$version = $_;
|
|
||||||
}
|
|
||||||
|
|
||||||
$program =~ s!.*/!!;
|
|
||||||
|
|
||||||
# no info for `info' itself
|
|
||||||
$opt_no_info = 1 if $program eq 'info';
|
|
||||||
|
|
||||||
# --name overrides --include contents
|
|
||||||
$include{NAME} = "$program \\- $opt_name" if $opt_name;
|
|
||||||
|
|
||||||
# Default (useless) NAME paragraph
|
|
||||||
$include{NAME} ||= "$program \\- manual page for $program $version";
|
|
||||||
|
|
||||||
# Man pages traditionally have the page title in caps.
|
|
||||||
my $PROGRAM = uc $program;
|
|
||||||
|
|
||||||
# Header.
|
|
||||||
print <<EOT;
|
|
||||||
.\" DO NOT MODIFY THIS FILE! It was generated by $this_program $this_version.
|
|
||||||
.TH $PROGRAM 1 "$date" "$package $version" "FSF"
|
|
||||||
.SH NAME
|
|
||||||
$include{NAME}
|
|
||||||
EOT
|
|
||||||
|
|
||||||
my $accumulate = 1;
|
|
||||||
my @description = ();
|
|
||||||
|
|
||||||
sub convert_option;
|
|
||||||
|
|
||||||
# Output converted --help information.
|
|
||||||
for (@help)
|
|
||||||
{
|
|
||||||
chomp;
|
|
||||||
|
|
||||||
if (s/^Usage:\s+\S+\s+(.*)\n?//)
|
|
||||||
{
|
|
||||||
# Turn the usage clause into a synopsis.
|
|
||||||
my $synopsis = '';
|
|
||||||
|
|
||||||
do {
|
|
||||||
my $syn = $1;
|
|
||||||
$syn =~ s/(([][]|\.\.+)+)/\\fR$1\\fI/g;
|
|
||||||
$syn =~ s/^/\\fI/ unless $syn =~ s/^\\fR//;
|
|
||||||
$syn .= '\fR';
|
|
||||||
$syn =~ s/\\fI(\s*)\\fR/$1/g;
|
|
||||||
|
|
||||||
$synopsis .= ".br\n" unless $accumulate;
|
|
||||||
$synopsis .= ".B $program\n";
|
|
||||||
$synopsis .= "$syn\n";
|
|
||||||
$accumulate = 0;
|
|
||||||
} while s/^(?:Usage|\s*or):\s+\S+\s+(.*)\n?//;
|
|
||||||
|
|
||||||
# Include file overrides SYNOPSIS.
|
|
||||||
print ".SH SYNOPSIS\n", $include{SYNOPSIS} || $synopsis;
|
|
||||||
|
|
||||||
# Dump any accumulated description text.
|
|
||||||
print ".SH DESCRIPTION\n";
|
|
||||||
print @description;
|
|
||||||
|
|
||||||
# Add additional description text from include file.
|
|
||||||
if ($include{DESCRIPTION})
|
|
||||||
{
|
|
||||||
print ".PP\n" unless $include{DESCRIPTION} =~ /^\..P/;
|
|
||||||
print $include{DESCRIPTION};
|
|
||||||
}
|
|
||||||
|
|
||||||
next unless $_;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Accumulate text if the synopsis has not been produced yet.
|
|
||||||
if ($accumulate)
|
|
||||||
{
|
|
||||||
push @description, ".PP\n" if @description;
|
|
||||||
push @description, "$_\n";
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Catch start of options.
|
|
||||||
if (/^Options:/)
|
|
||||||
{
|
|
||||||
print qq(.SH OPTIONS\n);
|
|
||||||
s/Options://;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Catch bug report text.
|
|
||||||
if (/^Report bugs |^Email bug reports to /)
|
|
||||||
{
|
|
||||||
print qq(.SH "REPORTING BUGS"\n$_\n);
|
|
||||||
next;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Special case for tar 1.12: --label=NAME\nPATTERN.
|
|
||||||
s{(\n[ \t]*)(-V,[ \t]+--label=NAME.*)\n[ \t]+PATTERN[ \t]+}
|
|
||||||
{$1$2$1\\&...=PATTERN };
|
|
||||||
|
|
||||||
# Convert options.
|
|
||||||
s/(\s)(-[][\w=-]+|\\&\S+)/$1 . convert_option $2/ge;
|
|
||||||
|
|
||||||
# Option subsections have second line indented.
|
|
||||||
print qq(.SS "$1"\n) if s/^(\S.*)\n(\s)/$2/;
|
|
||||||
|
|
||||||
# Lines indented more than about 10 spaces may be assumed to be
|
|
||||||
# continuations of the previous line.
|
|
||||||
s/\n {10,}/ /g;
|
|
||||||
|
|
||||||
# Lines following dotted (*) or numbered points may also be
|
|
||||||
# continued if indented to the same level as the text following
|
|
||||||
# the point.
|
|
||||||
1 while s{((?:^|\n)(\s+)(?:[1-9][.)]|\*)(\s+)(?:[^\n]+))\n\2 \3(\S)}
|
|
||||||
{$1 $4}g;
|
|
||||||
|
|
||||||
# Indented paragraph.
|
|
||||||
if (/^\s/)
|
|
||||||
{
|
|
||||||
for (split /\n/)
|
|
||||||
{
|
|
||||||
s/^\s+//;
|
|
||||||
s/([^,])\s+/$1\n/;
|
|
||||||
print ".TP\n$_\n" if $_;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
# Anything else.
|
|
||||||
else
|
|
||||||
{
|
|
||||||
print ".PP\n$_\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Print any include items other than the ones we have already dealt
|
|
||||||
# with.
|
|
||||||
for (@include)
|
|
||||||
{
|
|
||||||
print qq(.SH "$_"\n$include{$_})
|
|
||||||
unless /^(NAME|SYNOPSIS|DESCRIPTION|SEE ALSO)$/;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Refer to the real documentation.
|
|
||||||
if ($include{'SEE ALSO'} or !$opt_no_info)
|
|
||||||
{
|
|
||||||
print qq(.SH "SEE ALSO"\n);
|
|
||||||
print $include{'SEE ALSO'}, ".PP\n" if $include{'SEE ALSO'};
|
|
||||||
|
|
||||||
print <<EOT unless $opt_no_info;
|
|
||||||
The full documentation for
|
|
||||||
.B $program
|
|
||||||
is maintained as a Texinfo manual. If the
|
|
||||||
.B info
|
|
||||||
and
|
|
||||||
.B $program
|
|
||||||
programs are properly installed at your site, the command
|
|
||||||
.IP
|
|
||||||
.B info $program
|
|
||||||
.PP
|
|
||||||
should give you access to the complete manual.
|
|
||||||
EOT
|
|
||||||
}
|
|
||||||
|
|
||||||
# Output converted --version information.
|
|
||||||
for (@version)
|
|
||||||
{
|
|
||||||
chomp;
|
|
||||||
|
|
||||||
# Join hyphenated lines.
|
|
||||||
s/([A-Za-z])-\n */$1/g;
|
|
||||||
|
|
||||||
# Convert copyright symbol or (c) to nroff character.
|
|
||||||
s/Copyright\s+(?:\xa9|\([Cc]\))/Copyright \\(co/g;
|
|
||||||
|
|
||||||
# Insert appropriate headings for copyright and author.
|
|
||||||
if (/^Copyright\s\\/) { print ".SH COPYRIGHT\n" }
|
|
||||||
elsif (/^Written\s+by/) { print ".SH AUTHOR\n" }
|
|
||||||
else { print ".PP\n"; }
|
|
||||||
|
|
||||||
# Insert line breaks before additional copyright messages and the
|
|
||||||
# disclaimer.
|
|
||||||
s/(.)\n(Copyright\s|This is free software)/$1\n.br\n$2/g;
|
|
||||||
|
|
||||||
print "$_\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
exit;
|
|
||||||
|
|
||||||
# Convert option dashes to \- to stop nroff from hyphenating 'em, and
|
|
||||||
# embolden. Option arguments get italicised.
|
|
||||||
sub convert_option
|
|
||||||
{
|
|
||||||
my $option = '\fB' . shift;
|
|
||||||
|
|
||||||
$option =~ s/-/\\-/g;
|
|
||||||
unless ($option =~ s/\[=(.*)\]$/\\fR[=\\fI$1\\fR]/)
|
|
||||||
{
|
|
||||||
$option =~ s/=(.)/\\fR=\\fI$1/;
|
|
||||||
$option =~ s/ (.)/ \\fI$1/;
|
|
||||||
$option .= '\fR';
|
|
||||||
}
|
|
||||||
|
|
||||||
$option;
|
|
||||||
}
|
|
||||||
Binary file not shown.
15
doc/sample-config/hosts/alpha
Normal file
15
doc/sample-config/hosts/alpha
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
# Sample host configuration file
|
||||||
|
|
||||||
|
# The real IP address of this tinc host. Can be used by other tinc hosts.
|
||||||
|
Address = 123.234.35.67
|
||||||
|
|
||||||
|
# Portnumber for incoming connections. Default is 655.
|
||||||
|
Port = 655
|
||||||
|
|
||||||
|
# Subnet on the virtual private network that is local for this host.
|
||||||
|
Subnet = 192.168.1.0/24
|
||||||
|
|
||||||
|
# The public key generated by `tincd -n example -K' is stored here
|
||||||
|
-----BEGIN RSA PUBLIC KEY-----
|
||||||
|
...
|
||||||
|
-----END RSA PUBLIC KEY-----
|
||||||
16
doc/sample-config/hosts/beta
Normal file
16
doc/sample-config/hosts/beta
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
# Sample host configuration file
|
||||||
|
# This file was generated by host beta.
|
||||||
|
|
||||||
|
# The real IP address of this tinc host. Can be used by other tinc hosts.
|
||||||
|
Address = 123.45.67.189
|
||||||
|
|
||||||
|
# Portnumber for incoming connections. Default is 655.
|
||||||
|
Port = 6500
|
||||||
|
|
||||||
|
# Subnet on the virtual private network that is local for this host.
|
||||||
|
Subnet = 192.168.2.0/24
|
||||||
|
|
||||||
|
# The public key generated by `tincd -n example -K' is stored here
|
||||||
|
-----BEGIN RSA PUBLIC KEY-----
|
||||||
|
...
|
||||||
|
-----END RSA PUBLIC KEY-----
|
||||||
1
doc/sample-config/rsa_key.priv
Normal file
1
doc/sample-config/rsa_key.priv
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
# Generate this file with `tincd -n example -K`
|
||||||
4
doc/sample-config/tinc-down
Normal file
4
doc/sample-config/tinc-down
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# This file closes down the tap device.
|
||||||
|
|
||||||
|
ifconfig $INTERFACE down
|
||||||
11
doc/sample-config/tinc-up
Normal file
11
doc/sample-config/tinc-up
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# This file sets up the tap device.
|
||||||
|
# It gives you the freedom to do anything you want with it.
|
||||||
|
# Use the correct name for the tap device:
|
||||||
|
# The environment variable $INTERFACE is set to the right name
|
||||||
|
# on most platforms, but if it doesn't work try to set it manually.
|
||||||
|
|
||||||
|
# Give it the right ip and netmask. Remember, the subnet of the
|
||||||
|
# tap device must be larger than that of the individual Subnets
|
||||||
|
# as defined in the host configuration file!
|
||||||
|
ifconfig $INTERFACE 192.168.1.1 netmask 255.255.0.0
|
||||||
22
doc/sample-config/tinc.conf
Normal file
22
doc/sample-config/tinc.conf
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
# Sample tinc configuration file
|
||||||
|
|
||||||
|
# This is a comment.
|
||||||
|
# Spaces and tabs are eliminated.
|
||||||
|
# The = sign isn't strictly necessary any longer, though you may want
|
||||||
|
# to leave it in as it improves readability :)
|
||||||
|
# Variable names are treated case insensitive.
|
||||||
|
|
||||||
|
# The name of this tinc host. Required.
|
||||||
|
Name = alpha
|
||||||
|
|
||||||
|
# The internet host to connect with.
|
||||||
|
# Comment these out to make yourself a listen-only connection
|
||||||
|
# You must use the name of another tinc host.
|
||||||
|
# May be used multiple times for redundance.
|
||||||
|
ConnectTo = beta
|
||||||
|
|
||||||
|
# The tap device tinc will use.
|
||||||
|
# /dev/tap0 for ethertap, FreeBSD or OpenBSD
|
||||||
|
# /dev/tun0 for Solaris
|
||||||
|
# /dev/net/tun for Linux tun/tap
|
||||||
|
Device = /dev/net/tun
|
||||||
13416
doc/texinfo.tex
13416
doc/texinfo.tex
File diff suppressed because it is too large
Load diff
340
doc/tinc.conf.5
340
doc/tinc.conf.5
|
|
@ -1,340 +0,0 @@
|
||||||
.Dd 2002-04-09
|
|
||||||
.Dt TINC.CONF 5
|
|
||||||
.\" Manual page created by:
|
|
||||||
.\" Ivo Timmermans <itimmermans@bigfoot.com>
|
|
||||||
.\" Guus Sliepen <guus@sliepen.warande.net>
|
|
||||||
.Sh NAME
|
|
||||||
.Nm tinc.conf
|
|
||||||
.Nd tinc daemon configuration
|
|
||||||
.Sh DESCRIPTION
|
|
||||||
The files in the
|
|
||||||
.Pa /etc/tinc/
|
|
||||||
directory contain runtime and security information for the tinc daemon.
|
|
||||||
.Sh NETWORKS
|
|
||||||
It is perfectly ok for you to run more than one tinc daemon.
|
|
||||||
However, in its default form,
|
|
||||||
you will soon notice that you can't use two different configuration files without the
|
|
||||||
.Fl c
|
|
||||||
option.
|
|
||||||
.Pp
|
|
||||||
We have thought of another way of dealing with this: network names.
|
|
||||||
This means that you call
|
|
||||||
.Nm
|
|
||||||
with the
|
|
||||||
.Fl n
|
|
||||||
option, which will assign a name to this daemon.
|
|
||||||
.Pp
|
|
||||||
The effect of this is that the daemon will set its configuration root to
|
|
||||||
.Pa /etc/tinc/ Ns Ar NETNAME Ns Pa / ,
|
|
||||||
where
|
|
||||||
.Ar NETNAME
|
|
||||||
is your argument to the
|
|
||||||
.Fl n
|
|
||||||
option.
|
|
||||||
You'll notice that messages appear in syslog as coming from
|
|
||||||
.Nm tincd. Ns Ar NETNAME .
|
|
||||||
.Pp
|
|
||||||
However, it is not strictly necessary that you call tinc with the
|
|
||||||
.Fl n
|
|
||||||
option.
|
|
||||||
In this case, the network name would just be empty,
|
|
||||||
and it will be used as such.
|
|
||||||
.Nm tinc
|
|
||||||
now looks for files in
|
|
||||||
.Pa /etc/tinc/ ,
|
|
||||||
instead of
|
|
||||||
.Pa /etc/tinc/ Ns Ar NETNAME Ns Pa / ;
|
|
||||||
the configuration file should be
|
|
||||||
.Pa /etc/tinc/tinc.conf ,
|
|
||||||
and the host configuration files are now expected to be in
|
|
||||||
.Pa /etc/tinc/hosts/ .
|
|
||||||
.Pp
|
|
||||||
But it is highly recommended that you use this feature of
|
|
||||||
.Nm tinc ,
|
|
||||||
because it will be so much clearer whom your daemon talks to.
|
|
||||||
Hence, we will assume that you use it.
|
|
||||||
.Sh NAMES
|
|
||||||
Each tinc daemon should have a name that is unique in the network which it will be part of.
|
|
||||||
The name will be used by other tinc daemons for identification.
|
|
||||||
The name has to be declared in the
|
|
||||||
.Pa /etc/tinc/ Ns Ar NETNAME Ns Pa /tinc.conf
|
|
||||||
file.
|
|
||||||
.Pp
|
|
||||||
To make things easy,
|
|
||||||
choose something that will give unique and easy to remember names to your tinc daemon(s).
|
|
||||||
You could try things like hostnames, owner surnames or location names.
|
|
||||||
.Sh PUBLIC/PRIVATE KEYS
|
|
||||||
You should use
|
|
||||||
.Ic tincd -K
|
|
||||||
to generate public/private keypairs.
|
|
||||||
It will generate two keys.
|
|
||||||
The private key should be stored in a separate file
|
|
||||||
.Pa /etc/tinc/ Ns Ar NETNAME Ns Pa /rsa_key.priv
|
|
||||||
\-\- where
|
|
||||||
.Ar NETNAME
|
|
||||||
stands for the network (see
|
|
||||||
.Sx NETWORKS )
|
|
||||||
above.
|
|
||||||
The public key should be stored in the host configuration file
|
|
||||||
.Pa /etc/tinc/ Ns Ar NETNAME Ns Pa /hosts/ Ns Va NAME
|
|
||||||
\-\- where
|
|
||||||
.Va NAME
|
|
||||||
stands for the name of the local tinc daemon (see
|
|
||||||
.Sx NAMES ) .
|
|
||||||
.Sh SERVER CONFIGURATION
|
|
||||||
The server configuration of the daemon is done in the file
|
|
||||||
.Pa /etc/tinc/ Ns Ar NETNAME Ns Pa /tinc.conf .
|
|
||||||
This file consists of comments (lines started with a
|
|
||||||
.Li # )
|
|
||||||
or assignments in the form of:
|
|
||||||
.Pp
|
|
||||||
.Va Variable Li = Ar Value .
|
|
||||||
.Pp
|
|
||||||
The variable names are case insensitive, and any spaces, tabs,
|
|
||||||
newlines and carriage returns are ignored.
|
|
||||||
Note: it is not required that you put in the
|
|
||||||
.Li =
|
|
||||||
sign, but doing so improves readability.
|
|
||||||
If you leave it out, remember to replace it with at least one space character.
|
|
||||||
.Pp
|
|
||||||
Here are all valid variables, listed in alphabetical order.
|
|
||||||
The default value is given between parentheses.
|
|
||||||
.Bl -tag -width indent
|
|
||||||
.It Va AddressFamily Li = ipv4 | ipv6 | any Po ipv4 Pc Bq experimental
|
|
||||||
This option affects the address family of listening and outgoing sockets.
|
|
||||||
If
|
|
||||||
.Qq any
|
|
||||||
is selected, then depending on the operating system both IPv4 and IPv6 or just
|
|
||||||
IPv6 listening sockets will be created.
|
|
||||||
.It Va BindToInterface Li = Ar interface Bq experimental
|
|
||||||
If your computer has more than one network interface,
|
|
||||||
.Nm tinc
|
|
||||||
will by default listen on all of them for incoming connections.
|
|
||||||
It is possible to bind only to a single interface with this variable.
|
|
||||||
.Pp
|
|
||||||
This option may not work on all platforms.
|
|
||||||
.It Va ConnectTo Li = Ar name
|
|
||||||
Specifies which other tinc daemon to connect to on startup.
|
|
||||||
Multiple
|
|
||||||
.Va ConnectTo
|
|
||||||
variables may be specified,
|
|
||||||
in which case outgoing connections to each specified tinc daemon are made.
|
|
||||||
The names should be known to this tinc daemon
|
|
||||||
(i.e., there should be a host configuration file for the name on the
|
|
||||||
.Va ConnectTo
|
|
||||||
line).
|
|
||||||
.Pp
|
|
||||||
If you don't specify a host with
|
|
||||||
.Va ConnectTo ,
|
|
||||||
.Nm tinc
|
|
||||||
won't try to connect to other daemons at all,
|
|
||||||
and will instead just listen for incoming connections.
|
|
||||||
.It Va Device Li = Ar device Po /dev/tap0 or /dev/misc/net/tun Pc
|
|
||||||
The virtual network device to use.
|
|
||||||
.Nm tinc
|
|
||||||
will automatically detect what kind of device it is.
|
|
||||||
Note that you can only use one device per daemon.
|
|
||||||
The info pages of the tinc package contain more information
|
|
||||||
about configuring the virtual network device.
|
|
||||||
.It Va Hostnames Li = yes | no Pq no
|
|
||||||
This option selects whether IP addresses (both real and on the VPN) should
|
|
||||||
be resolved. Since DNS lookups are blocking, it might affect tinc's
|
|
||||||
efficiency, even stopping the daemon for a few seconds every time it does
|
|
||||||
a lookup if your DNS server is not responding.
|
|
||||||
.Pp
|
|
||||||
This does not affect resolving hostnames to IP addresses from the
|
|
||||||
host configuration files.
|
|
||||||
.It Va Interface Li = Ar interface
|
|
||||||
Defines the name of the interface corresponding to the virtual network device.
|
|
||||||
Depending on the operating system and the type of device this may or may not actually set the name.
|
|
||||||
Currently this option only affects the Linux tun/tap device.
|
|
||||||
.It Va KeyExpire Li = Ar period Pq 3600
|
|
||||||
This option controls the period the encryption keys used to encrypt the data are valid.
|
|
||||||
It is common practice to change keys at regular intervals to make it even harder for crackers,
|
|
||||||
even though it is thought to be nearly impossible to crack a single key.
|
|
||||||
.It Va MACExpire Li = Ar period Pq 600
|
|
||||||
This option controls the amount of time MAC addresses are kept before they are removed.
|
|
||||||
This only has effect when
|
|
||||||
.Va Mode
|
|
||||||
is set to
|
|
||||||
.Qq switch .
|
|
||||||
.It Va MaxTimeout Li = Ar period Pq 900
|
|
||||||
This is the maximum delay before trying to reconnect to other tinc daemons.
|
|
||||||
.It Va Mode Li = router | switch | hub Pq router
|
|
||||||
This option selects the way packets are routed to other daemons.
|
|
||||||
.Bl -tag -width indent
|
|
||||||
.It router
|
|
||||||
In this mode
|
|
||||||
.Va Subnet
|
|
||||||
variables in the host configuration files will be used to form a routing table.
|
|
||||||
Only unicast packets of routable protocols (IPv4 and IPv6) are supported in this mode.
|
|
||||||
.It switch
|
|
||||||
In this mode the MAC addresses of the packets on the VPN will be used to
|
|
||||||
dynamically create a routing table just like an Ethernet switch does.
|
|
||||||
Unicast, multicast and broadcast packets of every protocol that runs over Ethernet are supported in this mode
|
|
||||||
at the cost of frequent broadcast ARP requests and routing table updates.
|
|
||||||
.It hub
|
|
||||||
This mode is almost the same as the switch mode, but instead
|
|
||||||
every packet will be broadcast to the other daemons
|
|
||||||
while no routing table is managed.
|
|
||||||
.El
|
|
||||||
.It Va Name Li = Ar name Bq required
|
|
||||||
This is the name which identifies this tinc daemon.
|
|
||||||
It must be unique for the virtual private network this daemon will connect to.
|
|
||||||
.It Va PingTimeout Li = Ar period Pq 60
|
|
||||||
The number of seconds of inactivity that
|
|
||||||
.Nm tinc
|
|
||||||
will wait before sending a probe to the other end.
|
|
||||||
If that other end doesn't answer within that same amount of time,
|
|
||||||
the connection is terminated,
|
|
||||||
and the others will be notified of this.
|
|
||||||
.It Va PriorityInheritance Li = yes | no Po no Pc Bq experimental
|
|
||||||
When this option is enabled the value of the TOS field of tunneled IPv4 packets
|
|
||||||
will be inherited by the UDP packets that are sent out.
|
|
||||||
.It Va PrivateKey Li = Ar key Bq obsolete
|
|
||||||
The private RSA key of this tinc daemon.
|
|
||||||
It will allow this tinc daemon to authenticate itself to other daemons.
|
|
||||||
.It Va PrivateKeyFile Li = Ar filename Bq recommended
|
|
||||||
The file in which the private RSA key of this tinc daemon resides.
|
|
||||||
Note that there must be exactly one of
|
|
||||||
.Va PrivateKey
|
|
||||||
or
|
|
||||||
.Va PrivateKeyFile
|
|
||||||
specified in the configuration file.
|
|
||||||
.El
|
|
||||||
.Sh HOST CONFIGURATION FILES
|
|
||||||
The host configuration files contain all information needed
|
|
||||||
to establish a connection to those hosts.
|
|
||||||
A host configuration file is also required for the local tinc daemon,
|
|
||||||
it will use it to read in it's listen port, public key and subnets.
|
|
||||||
.Pp
|
|
||||||
The idea is that these files are portable.
|
|
||||||
You can safely mail your own host configuration file to someone else.
|
|
||||||
That other person can then copy it to his own hosts directory,
|
|
||||||
and now his tinc daemon will be able to connect to your tinc daemon.
|
|
||||||
Since host configuration files only contain public keys,
|
|
||||||
no secrets are revealed by sending out this information.
|
|
||||||
.Bl -tag -width indent
|
|
||||||
.It Va Address Li = Ar address Bq recommended
|
|
||||||
The IP address or hostname of this tinc daemon on the real network.
|
|
||||||
This wil only be used when trying to make an outgoing connection to this tinc daemon.
|
|
||||||
Multiple
|
|
||||||
.Va Address
|
|
||||||
variables can be specified, in which case each address will be tried until a working
|
|
||||||
connection has been established.
|
|
||||||
.It Va Cipher Li = Ar cipher Pq blowfish
|
|
||||||
The symmetric cipher algorithm used to encrypt UDP packets.
|
|
||||||
Any cipher supported by OpenSSL is recognised.
|
|
||||||
Furthermore, specifying
|
|
||||||
.Qq none
|
|
||||||
will turn off packet encryption.
|
|
||||||
.It Va Compression Li = Ar level Pq 0
|
|
||||||
This option sets the level of compression used for UDP packets.
|
|
||||||
Possible values are 0 (off), 1 (fast) and any integer up to 9 (best).
|
|
||||||
.It Va Digest Li = Ar digest Pq sha1
|
|
||||||
The digest algorithm used to authenticate UDP packets.
|
|
||||||
Any digest supported by OpenSSL is recognised.
|
|
||||||
Furthermore, specifying
|
|
||||||
.Qq none
|
|
||||||
will turn off packet authentication.
|
|
||||||
.It Va IndirectData Li = yes | no Pq no
|
|
||||||
This option specifies whether other tinc daemons besides the one you specified with
|
|
||||||
.Va ConnectTo
|
|
||||||
can make a direct connection to you.
|
|
||||||
This is especially useful if you are behind a firewall
|
|
||||||
and it is impossible to make a connection from the outside to your tinc daemon.
|
|
||||||
Otherwise, it is best to leave this option out or set it to no.
|
|
||||||
.It Va MACLength Li = Ar length Pq 4
|
|
||||||
The length of the message authentication code used to authenticate UDP packets.
|
|
||||||
Can be anything from
|
|
||||||
.Qq 0
|
|
||||||
up to the length of the digest produced by the digest algorithm.
|
|
||||||
.It Va Port Li = Ar port Pq 655
|
|
||||||
The port number on which this tinc daemon is listening for incoming connections.
|
|
||||||
.It Va PublicKey Li = Ar key Bq obsolete
|
|
||||||
The public RSA key of this tinc daemon.
|
|
||||||
It will be used to cryptographically verify it's identity and to set up a secure connection.
|
|
||||||
.It Va PublicKeyFile Li = Ar filename Bq obsolete
|
|
||||||
The file in which the public RSA key of this tinc daemon resides.
|
|
||||||
.Pp
|
|
||||||
From version 1.0pre4 on
|
|
||||||
.Nm tinc
|
|
||||||
will store the public key directly into the host configuration file in PEM format,
|
|
||||||
the above two options then are not necessary.
|
|
||||||
Either the PEM format is used, or exactly one of the above two options must be specified
|
|
||||||
in each host configuration file,
|
|
||||||
if you want to be able to establish a connection with that host.
|
|
||||||
.It Va Subnet Li = Ar address Ns Op Li / Ns Ar prefixlength
|
|
||||||
The subnet which this tinc daemon will serve.
|
|
||||||
.Nm tinc
|
|
||||||
tries to look up which other daemon it should send a packet to by searching the appropriate subnet.
|
|
||||||
If the packet matches a subnet,
|
|
||||||
it will be sent to the daemon who has this subnet in his host configuration file.
|
|
||||||
Multiple
|
|
||||||
.Va Subnet
|
|
||||||
variables can be specified.
|
|
||||||
.Pp
|
|
||||||
Subnets can either be single MAC, IPv4 or IPv6 addresses,
|
|
||||||
in which case a subnet consisting of only that single address is assumed,
|
|
||||||
or they can be a IPv4 or IPv6 network address with a prefixlength.
|
|
||||||
Shorthand notations are not supported.
|
|
||||||
For example, IPv4 subnets must be in a form like 192.168.1.0/24,
|
|
||||||
where 192.168.1.0 is the network address and 24 is the number of bits set in the netmask.
|
|
||||||
Note that subnets like 192.168.1.1/24 are invalid!
|
|
||||||
Read a networking HOWTO/FAQ/guide if you don't understand this.
|
|
||||||
IPv6 subnets are notated like fec0:0:0:1:0:0:0:0/64.
|
|
||||||
MAC addresses are notated like 0:1a:2b:3c:4d:5e.
|
|
||||||
.It Va TCPOnly Li = yes | no Pq no
|
|
||||||
If this variable is set to yes,
|
|
||||||
then the packets are tunnelled over the TCP connection instead of a UDP connection.
|
|
||||||
This is especially useful for those who want to run a tinc daemon
|
|
||||||
from behind a masquerading firewall,
|
|
||||||
or if UDP packet routing is disabled somehow.
|
|
||||||
Setting this options also implicitly sets IndirectData.
|
|
||||||
.El
|
|
||||||
.Sh FILES
|
|
||||||
.Bl -tag -width indent
|
|
||||||
.It Pa /etc/tinc/
|
|
||||||
The top directory for configuration files.
|
|
||||||
.It Pa /etc/tinc/ Ns Ar NETNAME Ns Pa /tinc.conf
|
|
||||||
The default name of the server configuration file for net
|
|
||||||
.Ar NETNAME .
|
|
||||||
.It Pa /etc/tinc/ Ns Ar NETNAME Ns Pa /hosts/
|
|
||||||
Host configuration files are kept in this directory.
|
|
||||||
.It Pa /etc/tinc/ Ns Ar NETNAME Ns Pa /tinc-up
|
|
||||||
If an executable file with this name exists,
|
|
||||||
it will be executed right after the tinc daemon has connected to the virtual network device.
|
|
||||||
It can be used to set up the corresponding network interface.
|
|
||||||
.Pp
|
|
||||||
The environment variable
|
|
||||||
.Ev $NETNAME
|
|
||||||
will be passed to the executable.
|
|
||||||
If specified with the
|
|
||||||
.Va Interface
|
|
||||||
configuration variable,
|
|
||||||
or if the virtual network device is a Linux tun/tap device,
|
|
||||||
the environment variable
|
|
||||||
.Ev $INTERFACE
|
|
||||||
will be set to the name of the network interface.
|
|
||||||
.It Pa /etc/tinc/ Ns Ar NETNAME Ns Pa /tinc-down
|
|
||||||
If an executable file with this name exists,
|
|
||||||
it will be executed right before the tinc daemon is going to close
|
|
||||||
its connection to the virtual network device.
|
|
||||||
The same environment variables will be passed as mentioned above.
|
|
||||||
.El
|
|
||||||
.Sh SEE ALSO
|
|
||||||
.Xr tincd 8 ,
|
|
||||||
.Pa http://tinc.nl.linux.org/ ,
|
|
||||||
.Pa http://www.linuxdoc.org/LDP/nag2/ .
|
|
||||||
.Pp
|
|
||||||
The full documentation for
|
|
||||||
.Nm tinc
|
|
||||||
is maintained as a Texinfo manual.
|
|
||||||
If the info and tinc programs are properly installed at your site, the command
|
|
||||||
.Ic info tinc
|
|
||||||
should give you access to the complete manual.
|
|
||||||
.Pp
|
|
||||||
.Nm tinc
|
|
||||||
comes with ABSOLUTELY NO WARRANTY.
|
|
||||||
This is free software, and you are welcome to redistribute it under certain conditions;
|
|
||||||
see the file COPYING for details.
|
|
||||||
673
doc/tinc.conf.5.in
Normal file
673
doc/tinc.conf.5.in
Normal file
|
|
@ -0,0 +1,673 @@
|
||||||
|
.Dd 2016-10-29
|
||||||
|
.Dt TINC.CONF 5
|
||||||
|
.\" Manual page created by:
|
||||||
|
.\" Ivo Timmermans
|
||||||
|
.\" Guus Sliepen <guus@tinc-vpn.org>
|
||||||
|
.Sh NAME
|
||||||
|
.Nm tinc.conf
|
||||||
|
.Nd tinc daemon configuration
|
||||||
|
.Sh DESCRIPTION
|
||||||
|
The files in the
|
||||||
|
.Pa @sysconfdir@/tinc/
|
||||||
|
directory contain runtime and security information for the tinc daemon.
|
||||||
|
.Sh NETWORKS
|
||||||
|
It is perfectly ok for you to run more than one tinc daemon.
|
||||||
|
However, in its default form,
|
||||||
|
you will soon notice that you can't use two different configuration files without the
|
||||||
|
.Fl c
|
||||||
|
option.
|
||||||
|
.Pp
|
||||||
|
We have thought of another way of dealing with this: network names.
|
||||||
|
This means that you call
|
||||||
|
.Nm
|
||||||
|
with the
|
||||||
|
.Fl n
|
||||||
|
option, which will assign a name to this daemon.
|
||||||
|
.Pp
|
||||||
|
The effect of this is that the daemon will set its configuration root to
|
||||||
|
.Pa @sysconfdir@/tinc/ Ns Ar NETNAME Ns Pa / ,
|
||||||
|
where
|
||||||
|
.Ar NETNAME
|
||||||
|
is your argument to the
|
||||||
|
.Fl n
|
||||||
|
option.
|
||||||
|
You'll notice that messages appear in syslog as coming from
|
||||||
|
.Nm tincd. Ns Ar NETNAME .
|
||||||
|
.Pp
|
||||||
|
However, it is not strictly necessary that you call tinc with the
|
||||||
|
.Fl n
|
||||||
|
option.
|
||||||
|
In this case, the network name would just be empty,
|
||||||
|
and it will be used as such.
|
||||||
|
.Nm tinc
|
||||||
|
now looks for files in
|
||||||
|
.Pa @sysconfdir@/tinc/ ,
|
||||||
|
instead of
|
||||||
|
.Pa @sysconfdir@/tinc/ Ns Ar NETNAME Ns Pa / ;
|
||||||
|
the configuration file should be
|
||||||
|
.Pa @sysconfdir@/tinc/tinc.conf ,
|
||||||
|
and the host configuration files are now expected to be in
|
||||||
|
.Pa @sysconfdir@/tinc/hosts/ .
|
||||||
|
.Pp
|
||||||
|
But it is highly recommended that you use this feature of
|
||||||
|
.Nm tinc ,
|
||||||
|
because it will be so much clearer whom your daemon talks to.
|
||||||
|
Hence, we will assume that you use it.
|
||||||
|
.Sh NAMES
|
||||||
|
Each tinc daemon must have a name that is unique in the network which it will be part of.
|
||||||
|
The name will be used by other tinc daemons for identification.
|
||||||
|
The name has to be declared in the
|
||||||
|
.Pa @sysconfdir@/tinc/ Ns Ar NETNAME Ns Pa /tinc.conf
|
||||||
|
file.
|
||||||
|
.Pp
|
||||||
|
To make things easy,
|
||||||
|
choose something that will give unique and easy to remember names to your tinc daemon(s).
|
||||||
|
You could try things like hostnames, owner surnames or location names.
|
||||||
|
.Sh PUBLIC/PRIVATE KEYS
|
||||||
|
You should use
|
||||||
|
.Ic tincd -K
|
||||||
|
to generate public/private keypairs.
|
||||||
|
It will generate two keys.
|
||||||
|
The private key should be stored in a separate file
|
||||||
|
.Pa @sysconfdir@/tinc/ Ns Ar NETNAME Ns Pa /rsa_key.priv
|
||||||
|
\-\- where
|
||||||
|
.Ar NETNAME
|
||||||
|
stands for the network (see
|
||||||
|
.Sx NETWORKS )
|
||||||
|
above.
|
||||||
|
The public key should be stored in the host configuration file
|
||||||
|
.Pa @sysconfdir@/tinc/ Ns Ar NETNAME Ns Pa /hosts/ Ns Va NAME
|
||||||
|
\-\- where
|
||||||
|
.Va NAME
|
||||||
|
stands for the name of the local tinc daemon (see
|
||||||
|
.Sx NAMES ) .
|
||||||
|
.Sh SERVER CONFIGURATION
|
||||||
|
The server configuration of the daemon is done in the file
|
||||||
|
.Pa @sysconfdir@/tinc/ Ns Ar NETNAME Ns Pa /tinc.conf .
|
||||||
|
This file consists of comments (lines started with a
|
||||||
|
.Li # )
|
||||||
|
or assignments in the form of:
|
||||||
|
.Pp
|
||||||
|
.Va Variable Li = Ar Value .
|
||||||
|
.Pp
|
||||||
|
The variable names are case insensitive, and any spaces, tabs,
|
||||||
|
newlines and carriage returns are ignored.
|
||||||
|
Note: it is not required that you put in the
|
||||||
|
.Li =
|
||||||
|
sign, but doing so improves readability.
|
||||||
|
If you leave it out, remember to replace it with at least one space character.
|
||||||
|
.Pp
|
||||||
|
The server configuration is complemented with host specific configuration (see the next section).
|
||||||
|
Although all configuration options for the local host listed in this document can also be put in
|
||||||
|
.Pa @sysconfdir@/tinc/ Ns Ar NETNAME Ns Pa /tinc.conf ,
|
||||||
|
it is recommended to put host specific configuration options in the host configuration file,
|
||||||
|
as this makes it easy to exchange with other nodes.
|
||||||
|
.Pp
|
||||||
|
Here are all valid variables, listed in alphabetical order.
|
||||||
|
The default value is given between parentheses.
|
||||||
|
.Bl -tag -width indent
|
||||||
|
.It Va AddressFamily Li = ipv4 | ipv6 | any Pq any
|
||||||
|
This option affects the address family of listening and outgoing sockets.
|
||||||
|
If
|
||||||
|
.Qq any
|
||||||
|
is selected, then depending on the operating system both IPv4 and IPv6 or just
|
||||||
|
IPv6 listening sockets will be created.
|
||||||
|
.It Va BindToAddress Li = Ar address Oo Ar port Oc Bq experimental
|
||||||
|
If your computer has more than one IPv4 or IPv6 address,
|
||||||
|
.Nm tinc
|
||||||
|
will by default listen on all of them for incoming connections.
|
||||||
|
Multiple
|
||||||
|
.Va BindToAddress
|
||||||
|
variables may be specified,
|
||||||
|
in which case listening sockets for each specified address are made.
|
||||||
|
.Pp
|
||||||
|
If no
|
||||||
|
.Ar port
|
||||||
|
is specified, the socket will be bound to the port specified by the
|
||||||
|
.Va Port
|
||||||
|
option, or to port 655 if neither is given.
|
||||||
|
To only bind to a specific port but not to a specific address, use
|
||||||
|
.Li *
|
||||||
|
for the
|
||||||
|
.Ar address .
|
||||||
|
.Pp
|
||||||
|
This option may not work on all platforms.
|
||||||
|
.It Va BindToInterface Li = Ar interface Bq experimental
|
||||||
|
If your computer has more than one network interface,
|
||||||
|
.Nm tinc
|
||||||
|
will by default listen on all of them for incoming connections.
|
||||||
|
It is possible to bind only to a single interface with this variable.
|
||||||
|
.Pp
|
||||||
|
This option may not work on all platforms.
|
||||||
|
Also, on some platforms it will not actually bind to an interface,
|
||||||
|
but rather to the address that the interface has at the moment a socket is created.
|
||||||
|
.It Va Broadcast Li = no | mst | direct Po mst Pc Bq experimental
|
||||||
|
This option selects the way broadcast packets are sent to other daemons.
|
||||||
|
NOTE: all nodes in a VPN must use the same
|
||||||
|
.Va Broadcast
|
||||||
|
mode, otherwise routing loops can form.
|
||||||
|
.Bl -tag -width indent
|
||||||
|
.It no
|
||||||
|
Broadcast packets are never sent to other nodes.
|
||||||
|
.It mst
|
||||||
|
Broadcast packets are sent and forwarded via the VPN's Minimum Spanning Tree.
|
||||||
|
This ensures broadcast packets reach all nodes.
|
||||||
|
.It direct
|
||||||
|
Broadcast packets are sent directly to all nodes that can be reached directly.
|
||||||
|
Broadcast packets received from other nodes are never forwarded.
|
||||||
|
If the IndirectData option is also set, broadcast packets will only be sent to nodes which we have a meta connection to.
|
||||||
|
.El
|
||||||
|
.It Va ConnectTo Li = Ar name
|
||||||
|
Specifies which other tinc daemon to connect to on startup.
|
||||||
|
Multiple
|
||||||
|
.Va ConnectTo
|
||||||
|
variables may be specified,
|
||||||
|
in which case outgoing connections to each specified tinc daemon are made.
|
||||||
|
The names should be known to this tinc daemon
|
||||||
|
(i.e., there should be a host configuration file for the name on the
|
||||||
|
.Va ConnectTo
|
||||||
|
line).
|
||||||
|
.Pp
|
||||||
|
If you don't specify a host with
|
||||||
|
.Va ConnectTo ,
|
||||||
|
.Nm tinc
|
||||||
|
won't try to connect to other daemons at all,
|
||||||
|
and will instead just listen for incoming connections.
|
||||||
|
.It Va DecrementTTL Li = yes | no Po no Pc Bq experimental
|
||||||
|
When enabled,
|
||||||
|
.Nm tinc
|
||||||
|
will decrement the Time To Live field in IPv4 packets, or the Hop Limit field in IPv6 packets,
|
||||||
|
before forwarding a received packet to the virtual network device or to another node,
|
||||||
|
and will drop packets that have a TTL value of zero,
|
||||||
|
in which case it will send an ICMP Time Exceeded packet back.
|
||||||
|
.Pp
|
||||||
|
Do not use this option if you use switch mode and want to use IPv6.
|
||||||
|
.It Va Device Li = Ar device Po Pa /dev/tap0 , Pa /dev/net/tun No or other depending on platform Pc
|
||||||
|
The virtual network device to use.
|
||||||
|
.Nm tinc
|
||||||
|
will automatically detect what kind of device it is.
|
||||||
|
Note that you can only use one device per daemon.
|
||||||
|
Under Windows, use
|
||||||
|
.Va Interface
|
||||||
|
instead of
|
||||||
|
.Va Device .
|
||||||
|
The info pages of the tinc package contain more information
|
||||||
|
about configuring the virtual network device.
|
||||||
|
.It Va DeviceType Li = Ar type Pq platform dependent
|
||||||
|
The type of the virtual network device.
|
||||||
|
Tinc will normally automatically select the right type of tun/tap interface, and this option should not be used.
|
||||||
|
However, this option can be used to select one of the special interface types, if support for them is compiled in.
|
||||||
|
.Bl -tag -width indent
|
||||||
|
.It dummy
|
||||||
|
Use a dummy interface.
|
||||||
|
No packets are ever read or written to a virtual network device.
|
||||||
|
Useful for testing, or when setting up a node that only forwards packets for other nodes.
|
||||||
|
.It raw_socket
|
||||||
|
Open a raw socket, and bind it to a pre-existing
|
||||||
|
.Va Interface
|
||||||
|
(eth0 by default).
|
||||||
|
All packets are read from this interface.
|
||||||
|
Packets received for the local node are written to the raw socket.
|
||||||
|
However, at least on Linux, the operating system does not process IP packets destined for the local host.
|
||||||
|
.It multicast
|
||||||
|
Open a multicast UDP socket and bind it to the address and port (separated by spaces) and optionally a TTL value specified using
|
||||||
|
.Va Device .
|
||||||
|
Packets are read from and written to this multicast socket.
|
||||||
|
This can be used to connect to UML, QEMU or KVM instances listening on the same multicast address.
|
||||||
|
Do NOT connect multiple
|
||||||
|
.Nm tinc
|
||||||
|
daemons to the same multicast address, this will very likely cause routing loops.
|
||||||
|
Also note that this can cause decrypted VPN packets to be sent out on a real network if misconfigured.
|
||||||
|
.It uml Pq not compiled in by default
|
||||||
|
Create a UNIX socket with the filename specified by
|
||||||
|
.Va Device ,
|
||||||
|
or
|
||||||
|
.Pa @runstatedir@/ Ns Ar NETNAME Ns Pa .umlsocket
|
||||||
|
if not specified.
|
||||||
|
.Nm tinc
|
||||||
|
will wait for a User Mode Linux instance to connect to this socket.
|
||||||
|
.It vde Pq not compiled in by default
|
||||||
|
Uses the libvdeplug library to connect to a Virtual Distributed Ethernet switch,
|
||||||
|
using the UNIX socket specified by
|
||||||
|
.Va Device ,
|
||||||
|
or
|
||||||
|
.Pa @runstatedir@/vde.ctl
|
||||||
|
if not specified.
|
||||||
|
.El
|
||||||
|
Also, in case tinc does not seem to correctly interpret packets received from the virtual network device,
|
||||||
|
it can be used to change the way packets are interpreted:
|
||||||
|
.Bl -tag -width indent
|
||||||
|
.It tun Pq BSD and Linux
|
||||||
|
Set type to tun.
|
||||||
|
Depending on the platform, this can either be with or without an address family header (see below).
|
||||||
|
.It tunnohead Pq BSD
|
||||||
|
Set type to tun without an address family header.
|
||||||
|
Tinc will expect packets read from the virtual network device to start with an IP header.
|
||||||
|
On some platforms IPv6 packets cannot be read from or written to the device in this mode.
|
||||||
|
.It tunifhead Pq BSD
|
||||||
|
Set type to tun with an address family header.
|
||||||
|
Tinc will expect packets read from the virtual network device
|
||||||
|
to start with a four byte header containing the address family,
|
||||||
|
followed by an IP header.
|
||||||
|
This mode should support both IPv4 and IPv6 packets.
|
||||||
|
.It utun Pq OS X
|
||||||
|
Set type to utun.
|
||||||
|
This is only supported on OS X version 10.6.8 and higher, but doesn't require the tuntaposx module.
|
||||||
|
This mode should support both IPv4 and IPv6 packets.
|
||||||
|
.It tap Pq BSD and Linux
|
||||||
|
Set type to tap.
|
||||||
|
Tinc will expect packets read from the virtual network device
|
||||||
|
to start with an Ethernet header.
|
||||||
|
.El
|
||||||
|
.It Va DirectOnly Li = yes | no Po no Pc Bq experimental
|
||||||
|
When this option is enabled, packets that cannot be sent directly to the destination node,
|
||||||
|
but which would have to be forwarded by an intermediate node, are dropped instead.
|
||||||
|
When combined with the IndirectData option,
|
||||||
|
packets for nodes for which we do not have a meta connection with are also dropped.
|
||||||
|
.It Va Forwarding Li = off | internal | kernel Po internal Pc Bq experimental
|
||||||
|
This option selects the way indirect packets are forwarded.
|
||||||
|
.Bl -tag -width indent
|
||||||
|
.It off
|
||||||
|
Incoming packets that are not meant for the local node,
|
||||||
|
but which should be forwarded to another node, are dropped.
|
||||||
|
.It internal
|
||||||
|
Incoming packets that are meant for another node are forwarded by tinc internally.
|
||||||
|
.Pp
|
||||||
|
This is the default mode, and unless you really know you need another forwarding mode, don't change it.
|
||||||
|
.It kernel
|
||||||
|
Incoming packets are always sent to the TUN/TAP device, even if the packets are not for the local node.
|
||||||
|
This is less efficient, but allows the kernel to apply its routing and firewall rules on them,
|
||||||
|
and can also help debugging.
|
||||||
|
.El
|
||||||
|
.It Va GraphDumpFile Li = Ar filename Bq experimental
|
||||||
|
If this option is present,
|
||||||
|
.Nm tinc
|
||||||
|
will dump the current network graph to the file
|
||||||
|
.Ar filename
|
||||||
|
every minute, unless there were no changes to the graph.
|
||||||
|
The file is in a format that can be read by graphviz tools.
|
||||||
|
If
|
||||||
|
.Ar filename
|
||||||
|
starts with a pipe symbol |,
|
||||||
|
then the rest of the filename is interpreted as a shell command
|
||||||
|
that is executed, the graph is then sent to stdin.
|
||||||
|
.It Va Hostnames Li = yes | no Pq no
|
||||||
|
This option selects whether IP addresses (both real and on the VPN) should
|
||||||
|
be resolved. Since DNS lookups are blocking, it might affect tinc's
|
||||||
|
efficiency, even stopping the daemon for a few seconds every time it does
|
||||||
|
a lookup if your DNS server is not responding.
|
||||||
|
.Pp
|
||||||
|
This does not affect resolving hostnames to IP addresses from the
|
||||||
|
host configuration files, but whether hostnames should be resolved while logging.
|
||||||
|
.It Va IffOneQueue Li = yes | no Po no Pc Bq experimental
|
||||||
|
(Linux only) Set IFF_ONE_QUEUE flag on TUN/TAP devices.
|
||||||
|
.It Va Interface Li = Ar interface
|
||||||
|
Defines the name of the interface corresponding to the virtual network device.
|
||||||
|
Depending on the operating system and the type of device this may or may not actually set the name of the interface.
|
||||||
|
Under Windows, this variable is used to select which network interface will be used.
|
||||||
|
If you specified a
|
||||||
|
.Va Device ,
|
||||||
|
this variable is almost always already correctly set.
|
||||||
|
.It Va KeyExpire Li = Ar seconds Pq 3600
|
||||||
|
This option controls the period the encryption keys used to encrypt the data are valid.
|
||||||
|
It is common practice to change keys at regular intervals to make it even harder for crackers,
|
||||||
|
even though it is thought to be nearly impossible to crack a single key.
|
||||||
|
.It Va LocalDiscovery Li = yes | no Po no Pc Bq experimental
|
||||||
|
When enabled,
|
||||||
|
.Nm tinc
|
||||||
|
will try to detect peers that are on the same local network.
|
||||||
|
This will allow direct communication using LAN addresses, even if both peers are behind a NAT
|
||||||
|
and they only ConnectTo a third node outside the NAT,
|
||||||
|
which normally would prevent the peers from learning each other's LAN address.
|
||||||
|
.Pp
|
||||||
|
Currently, local discovery is implemented by sending broadcast packets to the LAN during path MTU discovery.
|
||||||
|
This feature may not work in all possible situations.
|
||||||
|
.It Va MACExpire Li = Ar seconds Pq 600
|
||||||
|
This option controls the amount of time MAC addresses are kept before they are removed.
|
||||||
|
This only has effect when
|
||||||
|
.Va Mode
|
||||||
|
is set to
|
||||||
|
.Qq switch .
|
||||||
|
.It Va MaxTimeout Li = Ar seconds Pq 900
|
||||||
|
This is the maximum delay before trying to reconnect to other tinc daemons.
|
||||||
|
.It Va Mode Li = router | switch | hub Pq router
|
||||||
|
This option selects the way packets are routed to other daemons.
|
||||||
|
.Bl -tag -width indent
|
||||||
|
.It router
|
||||||
|
In this mode
|
||||||
|
.Va Subnet
|
||||||
|
variables in the host configuration files will be used to form a routing table.
|
||||||
|
Only unicast packets of routable protocols (IPv4 and IPv6) are supported in this mode.
|
||||||
|
.Pp
|
||||||
|
This is the default mode, and unless you really know you need another mode, don't change it.
|
||||||
|
.It switch
|
||||||
|
In this mode the MAC addresses of the packets on the VPN will be used to
|
||||||
|
dynamically create a routing table just like an Ethernet switch does.
|
||||||
|
Unicast, multicast and broadcast packets of every protocol that runs over Ethernet are supported in this mode
|
||||||
|
at the cost of frequent broadcast ARP requests and routing table updates.
|
||||||
|
.Pp
|
||||||
|
This mode is primarily useful if you want to bridge Ethernet segments.
|
||||||
|
.It hub
|
||||||
|
This mode is almost the same as the switch mode, but instead
|
||||||
|
every packet will be broadcast to the other daemons
|
||||||
|
while no routing table is managed.
|
||||||
|
.El
|
||||||
|
.It Va Name Li = Ar name Bq required
|
||||||
|
This is the name which identifies this tinc daemon.
|
||||||
|
It must be unique for the virtual private network this daemon will connect to.
|
||||||
|
The Name may only consist of alphanumeric and underscore characters.
|
||||||
|
If
|
||||||
|
.Va Name
|
||||||
|
starts with a
|
||||||
|
.Li $ ,
|
||||||
|
then the contents of the environment variable that follows will be used.
|
||||||
|
In that case, invalid characters will be converted to underscores.
|
||||||
|
If
|
||||||
|
.Va Name
|
||||||
|
is
|
||||||
|
.Li $HOST ,
|
||||||
|
but no such environment variable exist, the hostname will be read using the gethostname() system call.
|
||||||
|
.It Va PingInterval Li = Ar seconds Pq 60
|
||||||
|
The number of seconds of inactivity that
|
||||||
|
.Nm tinc
|
||||||
|
will wait before sending a probe to the other end.
|
||||||
|
.It Va PingTimeout Li = Ar seconds Pq 5
|
||||||
|
The number of seconds to wait for a response to pings or to allow meta
|
||||||
|
connections to block. If the other end doesn't respond within this time,
|
||||||
|
the connection is terminated,
|
||||||
|
and the others will be notified of this.
|
||||||
|
.It Va PriorityInheritance Li = yes | no Po no Pc Bq experimental
|
||||||
|
When this option is enabled the value of the TOS field of tunneled IPv4 packets
|
||||||
|
will be inherited by the UDP packets that are sent out.
|
||||||
|
.It Va PrivateKey Li = Ar key Bq obsolete
|
||||||
|
The private RSA key of this tinc daemon.
|
||||||
|
It will allow this tinc daemon to authenticate itself to other daemons.
|
||||||
|
.It Va PrivateKeyFile Li = Ar filename Po Pa @sysconfdir@/tinc/ Ns Ar NETNAME Ns Pa /rsa_key.priv Pc
|
||||||
|
The file in which the private RSA key of this tinc daemon resides.
|
||||||
|
.It Va ProcessPriority Li = low | normal | high
|
||||||
|
When this option is used the priority of the tincd process will be adjusted.
|
||||||
|
Increasing the priority may help to reduce latency and packet loss on the VPN.
|
||||||
|
.It Va Proxy Li = socks4 | socks5 | http | exec Ar ... Bq experimental
|
||||||
|
Use a proxy when making outgoing connections.
|
||||||
|
The following proxy types are currently supported:
|
||||||
|
.Bl -tag -width indent
|
||||||
|
.It socks4 Ar address Ar port Op Ar username
|
||||||
|
Connects to the proxy using the SOCKS version 4 protocol.
|
||||||
|
Optionally, a
|
||||||
|
.Ar username
|
||||||
|
can be supplied which will be passed on to the proxy server.
|
||||||
|
Only IPv4 connections can be proxied using SOCKS 4.
|
||||||
|
.It socks5 Ar address Ar port Op Ar username Ar password
|
||||||
|
Connect to the proxy using the SOCKS version 5 protocol.
|
||||||
|
If a
|
||||||
|
.Ar username
|
||||||
|
and
|
||||||
|
.Ar password
|
||||||
|
are given, basic username/password authentication will be used,
|
||||||
|
otherwise no authentication will be used.
|
||||||
|
.It http Ar address Ar port
|
||||||
|
Connects to the proxy and sends a HTTP CONNECT request.
|
||||||
|
.It exec Ar command
|
||||||
|
Executes the given
|
||||||
|
.Ar command
|
||||||
|
which should set up the outgoing connection.
|
||||||
|
The environment variables
|
||||||
|
.Ev NAME ,
|
||||||
|
.Ev NODE ,
|
||||||
|
.Ev REMOTEADDRES
|
||||||
|
and
|
||||||
|
.Ev REMOTEPORT
|
||||||
|
are available.
|
||||||
|
.El
|
||||||
|
.It Va ReplayWindow Li = Ar bytes Pq 16
|
||||||
|
This is the size of the replay tracking window for each remote node, in bytes.
|
||||||
|
The window is a bitfield which tracks 1 packet per bit, so for example
|
||||||
|
the default setting of 16 will track up to 128 packets in the window. In high
|
||||||
|
bandwidth scenarios, setting this to a higher value can reduce packet loss from
|
||||||
|
the interaction of replay tracking with underlying real packet loss and/or
|
||||||
|
reordering. Setting this to zero will disable replay tracking completely and
|
||||||
|
pass all traffic, but leaves tinc vulnerable to replay-based attacks on your
|
||||||
|
traffic.
|
||||||
|
.It Va StrictSubnets Li = yes | no Po no Pc Bq experimental
|
||||||
|
When this option is enabled tinc will only use Subnet statements which are
|
||||||
|
present in the host config files in the local
|
||||||
|
.Pa @sysconfdir@/tinc/ Ns Ar NETNAME Ns Pa /hosts/
|
||||||
|
directory. Subnets learned via connections to other nodes and which are not
|
||||||
|
present in the local host config files are ignored.
|
||||||
|
.It Va TunnelServer Li = yes | no Po no Pc Bq experimental
|
||||||
|
When this option is enabled tinc will no longer forward information between other tinc daemons,
|
||||||
|
and will only allow connections with nodes for which host config files are present in the local
|
||||||
|
.Pa @sysconfdir@/tinc/ Ns Ar NETNAME Ns Pa /hosts/
|
||||||
|
directory.
|
||||||
|
Setting this options also implicitly sets StrictSubnets.
|
||||||
|
.It Va UDPRcvBuf Li = Ar bytes Pq OS default
|
||||||
|
Sets the socket receive buffer size for the UDP socket, in bytes.
|
||||||
|
If unset, the default buffer size will be used by the operating system.
|
||||||
|
.It Va UDPSndBuf Li = Ar bytes Pq OS default
|
||||||
|
Sets the socket send buffer size for the UDP socket, in bytes.
|
||||||
|
If unset, the default buffer size will be used by the operating system.
|
||||||
|
.El
|
||||||
|
.Sh HOST CONFIGURATION FILES
|
||||||
|
The host configuration files contain all information needed
|
||||||
|
to establish a connection to those hosts.
|
||||||
|
A host configuration file is also required for the local tinc daemon,
|
||||||
|
it will use it to read in it's listen port, public key and subnets.
|
||||||
|
.Pp
|
||||||
|
The idea is that these files are portable.
|
||||||
|
You can safely mail your own host configuration file to someone else.
|
||||||
|
That other person can then copy it to his own hosts directory,
|
||||||
|
and now his tinc daemon will be able to connect to your tinc daemon.
|
||||||
|
Since host configuration files only contain public keys,
|
||||||
|
no secrets are revealed by sending out this information.
|
||||||
|
.Bl -tag -width indent
|
||||||
|
.It Va Address Li = Ar address Oo Ar port Oc Bq recommended
|
||||||
|
The IP address or hostname of this tinc daemon on the real network.
|
||||||
|
This will only be used when trying to make an outgoing connection to this tinc daemon.
|
||||||
|
Optionally, a port can be specified to use for this address.
|
||||||
|
Multiple
|
||||||
|
.Va Address
|
||||||
|
variables can be specified, in which case each address will be tried until a working
|
||||||
|
connection has been established.
|
||||||
|
.It Va Cipher Li = Ar cipher Pq aes-256-cbc
|
||||||
|
The symmetric cipher algorithm used to encrypt UDP packets.
|
||||||
|
Any cipher supported by LibreSSL or OpenSSL is recognised.
|
||||||
|
Furthermore, specifying
|
||||||
|
.Qq none
|
||||||
|
will turn off packet encryption.
|
||||||
|
It is best to use only those ciphers which support CBC mode.
|
||||||
|
.It Va ClampMSS Li = yes | no Pq yes
|
||||||
|
This option specifies whether tinc should clamp the maximum segment size (MSS)
|
||||||
|
of TCP packets to the path MTU. This helps in situations where ICMP
|
||||||
|
Fragmentation Needed or Packet too Big messages are dropped by firewalls.
|
||||||
|
.It Va Compression Li = Ar level Pq 0
|
||||||
|
This option sets the level of compression used for UDP packets.
|
||||||
|
Possible values are 0 (off), 1 (fast zlib) and any integer up to 9 (best zlib),
|
||||||
|
10 (fast lzo) and 11 (best lzo).
|
||||||
|
.It Va Digest Li = Ar digest Pq sha256
|
||||||
|
The digest algorithm used to authenticate UDP packets.
|
||||||
|
Any digest supported by LibreSSL or OpenSSL is recognised.
|
||||||
|
Furthermore, specifying
|
||||||
|
.Qq none
|
||||||
|
will turn off packet authentication.
|
||||||
|
.It Va IndirectData Li = yes | no Pq no
|
||||||
|
When set to yes, only nodes which already have a meta connection to you
|
||||||
|
will try to establish direct communication with you.
|
||||||
|
It is best to leave this option out or set it to no.
|
||||||
|
.It Va MACLength Li = Ar length Pq 4
|
||||||
|
The length of the message authentication code used to authenticate UDP packets.
|
||||||
|
Can be anything from
|
||||||
|
.Qq 0
|
||||||
|
up to the length of the digest produced by the digest algorithm.
|
||||||
|
.It Va PMTU Li = Ar mtu Po 1514 Pc
|
||||||
|
This option controls the initial path MTU to this node.
|
||||||
|
.It Va PMTUDiscovery Li = yes | no Po yes Pc
|
||||||
|
When this option is enabled, tinc will try to discover the path MTU to this node.
|
||||||
|
After the path MTU has been discovered, it will be enforced on the VPN.
|
||||||
|
.It Va Port Li = Ar port Pq 655
|
||||||
|
The port number on which this tinc daemon is listening for incoming connections,
|
||||||
|
which is used if no port number is specified in an
|
||||||
|
.Va Address
|
||||||
|
statement.
|
||||||
|
.It Va PublicKey Li = Ar key Bq obsolete
|
||||||
|
The public RSA key of this tinc daemon.
|
||||||
|
It will be used to cryptographically verify it's identity and to set up a secure connection.
|
||||||
|
.It Va PublicKeyFile Li = Ar filename Bq obsolete
|
||||||
|
The file in which the public RSA key of this tinc daemon resides.
|
||||||
|
.Pp
|
||||||
|
From version 1.0pre4 on
|
||||||
|
.Nm tinc
|
||||||
|
will store the public key directly into the host configuration file in PEM format,
|
||||||
|
the above two options then are not necessary.
|
||||||
|
Either the PEM format is used, or exactly one of the above two options must be specified
|
||||||
|
in each host configuration file,
|
||||||
|
if you want to be able to establish a connection with that host.
|
||||||
|
.It Va Subnet Li = Ar address Ns Op Li / Ns Ar prefixlength Ns Op Li # Ns Ar weight
|
||||||
|
The subnet which this tinc daemon will serve.
|
||||||
|
.Nm tinc
|
||||||
|
tries to look up which other daemon it should send a packet to by searching the appropriate subnet.
|
||||||
|
If the packet matches a subnet,
|
||||||
|
it will be sent to the daemon who has this subnet in his host configuration file.
|
||||||
|
Multiple
|
||||||
|
.Va Subnet
|
||||||
|
variables can be specified.
|
||||||
|
.Pp
|
||||||
|
Subnets can either be single MAC, IPv4 or IPv6 addresses,
|
||||||
|
in which case a subnet consisting of only that single address is assumed,
|
||||||
|
or they can be a IPv4 or IPv6 network address with a prefixlength.
|
||||||
|
For example, IPv4 subnets must be in a form like 192.168.1.0/24,
|
||||||
|
where 192.168.1.0 is the network address and 24 is the number of bits set in the netmask.
|
||||||
|
Note that subnets like 192.168.1.1/24 are invalid!
|
||||||
|
Read a networking HOWTO/FAQ/guide if you don't understand this.
|
||||||
|
IPv6 subnets are notated like fec0:0:0:1::/64.
|
||||||
|
MAC addresses are notated like 0:1a:2b:3c:4d:5e.
|
||||||
|
.Pp
|
||||||
|
A Subnet can be given a weight to indicate its priority over identical Subnets
|
||||||
|
owned by different nodes. The default weight is 10. Lower values indicate
|
||||||
|
higher priority. Packets will be sent to the node with the highest priority,
|
||||||
|
unless that node is not reachable, in which case the node with the next highest
|
||||||
|
priority will be tried, and so on.
|
||||||
|
.It Va TCPOnly Li = yes | no Pq no Bq obsolete
|
||||||
|
If this variable is set to yes,
|
||||||
|
then the packets are tunnelled over the TCP connection instead of a UDP connection.
|
||||||
|
This is especially useful for those who want to run a tinc daemon
|
||||||
|
from behind a masquerading firewall,
|
||||||
|
or if UDP packet routing is disabled somehow.
|
||||||
|
Setting this options also implicitly sets IndirectData.
|
||||||
|
.Pp
|
||||||
|
Since version 1.0.10, tinc will automatically detect whether communication via
|
||||||
|
UDP is possible or not.
|
||||||
|
.El
|
||||||
|
.Sh SCRIPTS
|
||||||
|
Apart from reading the server and host configuration files,
|
||||||
|
tinc can also run scripts at certain moments.
|
||||||
|
Below is a list of filenames of scripts and a description of when they are run.
|
||||||
|
A script is only run if it exists and if it is executable.
|
||||||
|
.Pp
|
||||||
|
Scripts are run synchronously;
|
||||||
|
this means that tinc will temporarily stop processing packets until the called script finishes executing.
|
||||||
|
This guarantees that scripts will execute in the exact same order as the events that trigger them.
|
||||||
|
If you need to run commands asynchronously, you have to ensure yourself that they are being run in the background.
|
||||||
|
.Pp
|
||||||
|
Under Windows (not Cygwin), the scripts must have the extension
|
||||||
|
.Pa .bat .
|
||||||
|
.Bl -tag -width indent
|
||||||
|
.It Pa @sysconfdir@/tinc/ Ns Ar NETNAME Ns Pa /tinc-up
|
||||||
|
This is the most important script.
|
||||||
|
If it is present it will be executed right after the tinc daemon has been started and has connected to the virtual network device.
|
||||||
|
It should be used to set up the corresponding network interface,
|
||||||
|
but can also be used to start other things.
|
||||||
|
.Pp
|
||||||
|
Under Windows you can use the Network Connections control panel instead of creating this script.
|
||||||
|
.It Pa @sysconfdir@/tinc/ Ns Ar NETNAME Ns Pa /tinc-down
|
||||||
|
This script is started right before the tinc daemon quits.
|
||||||
|
.It Pa @sysconfdir@/tinc/ Ns Ar NETNAME Ns Pa /hosts/ Ns Ar HOST Ns Pa -up
|
||||||
|
This script is started when the tinc daemon with name
|
||||||
|
.Ar HOST
|
||||||
|
becomes reachable.
|
||||||
|
.It Pa @sysconfdir@/tinc/ Ns Ar NETNAME Ns Pa /hosts/ Ns Ar HOST Ns Pa -down
|
||||||
|
This script is started when the tinc daemon with name
|
||||||
|
.Ar HOST
|
||||||
|
becomes unreachable.
|
||||||
|
.It Pa @sysconfdir@/tinc/ Ns Ar NETNAME Ns Pa /host-up
|
||||||
|
This script is started when any host becomes reachable.
|
||||||
|
.It Pa @sysconfdir@/tinc/ Ns Ar NETNAME Ns Pa /host-down
|
||||||
|
This script is started when any host becomes unreachable.
|
||||||
|
.It Pa @sysconfdir@/tinc/ Ns Ar NETNAME Ns Pa /subnet-up
|
||||||
|
This script is started when a Subnet becomes reachable.
|
||||||
|
The Subnet and the node it belongs to are passed in environment variables.
|
||||||
|
.It Pa @sysconfdir@/tinc/ Ns Ar NETNAME Ns Pa /subnet-down
|
||||||
|
This script is started when a Subnet becomes unreachable.
|
||||||
|
.El
|
||||||
|
.Pp
|
||||||
|
The scripts are started without command line arguments, but can make use of certain environment variables.
|
||||||
|
Under UNIX like operating systems the names of environment variables must be preceded by a
|
||||||
|
.Li $
|
||||||
|
in scripts.
|
||||||
|
Under Windows, in
|
||||||
|
.Pa .bat
|
||||||
|
files, they have to be put between
|
||||||
|
.Li %
|
||||||
|
signs.
|
||||||
|
.Bl -tag -width indent
|
||||||
|
.It Ev NETNAME
|
||||||
|
If a netname was specified, this environment variable contains it.
|
||||||
|
.It Ev NAME
|
||||||
|
Contains the name of this tinc daemon.
|
||||||
|
.It Ev DEVICE
|
||||||
|
Contains the name of the virtual network device that tinc uses.
|
||||||
|
.It Ev INTERFACE
|
||||||
|
Contains the name of the virtual network interface that tinc uses.
|
||||||
|
This should be used for commands like
|
||||||
|
.Pa ifconfig .
|
||||||
|
.It Ev NODE
|
||||||
|
When a host becomes (un)reachable, this is set to its name.
|
||||||
|
If a subnet becomes (un)reachable, this is set to the owner of that subnet.
|
||||||
|
.It Ev REMOTEADDRESS
|
||||||
|
When a host becomes (un)reachable, this is set to its real address.
|
||||||
|
.It Ev REMOTEPORT
|
||||||
|
When a host becomes (un)reachable, this is set to the port number it uses for communication with other tinc daemons.
|
||||||
|
.It Ev SUBNET
|
||||||
|
When a subnet becomes (un)reachable, this is set to the subnet.
|
||||||
|
.It Ev WEIGHT
|
||||||
|
When a subnet becomes (un)reachable, this is set to the subnet weight.
|
||||||
|
.El
|
||||||
|
.Pp
|
||||||
|
Do not forget that under UNIX operating systems, you have to make the scripts executable, using the command
|
||||||
|
.Nm chmod Li a+x Pa script .
|
||||||
|
.Sh FILES
|
||||||
|
The most important files are:
|
||||||
|
.Bl -tag -width indent
|
||||||
|
.It Pa @sysconfdir@/tinc/
|
||||||
|
The top directory for configuration files.
|
||||||
|
.It Pa @sysconfdir@/tinc/ Ns Ar NETNAME Ns Pa /tinc.conf
|
||||||
|
The default name of the server configuration file for net
|
||||||
|
.Ar NETNAME .
|
||||||
|
.It Pa @sysconfdir@/tinc/ Ns Ar NETNAME Ns Pa /conf.d/
|
||||||
|
Optional directory from which any *.conf file will be loaded
|
||||||
|
.It Pa @sysconfdir@/tinc/ Ns Ar NETNAME Ns Pa /hosts/
|
||||||
|
Host configuration files are kept in this directory.
|
||||||
|
.It Pa @sysconfdir@/tinc/ Ns Ar NETNAME Ns Pa /tinc-up
|
||||||
|
If an executable file with this name exists,
|
||||||
|
it will be executed right after the tinc daemon has connected to the virtual network device.
|
||||||
|
It can be used to set up the corresponding network interface.
|
||||||
|
.It Pa @sysconfdir@/tinc/ Ns Ar NETNAME Ns Pa /tinc-down
|
||||||
|
If an executable file with this name exists,
|
||||||
|
it will be executed right before the tinc daemon is going to close
|
||||||
|
its connection to the virtual network device.
|
||||||
|
.El
|
||||||
|
.Sh SEE ALSO
|
||||||
|
.Xr tincd 8 ,
|
||||||
|
.Pa https://www.tinc-vpn.org/ ,
|
||||||
|
.Pa http://www.tldp.org/LDP/nag2/ .
|
||||||
|
.Pp
|
||||||
|
The full documentation for
|
||||||
|
.Nm tinc
|
||||||
|
is maintained as a Texinfo manual.
|
||||||
|
If the info and tinc programs are properly installed at your site, the command
|
||||||
|
.Ic info tinc
|
||||||
|
should give you access to the complete manual.
|
||||||
|
.Pp
|
||||||
|
.Nm tinc
|
||||||
|
comes with ABSOLUTELY NO WARRANTY.
|
||||||
|
This is free software, and you are welcome to redistribute it under certain conditions;
|
||||||
|
see the file COPYING for details.
|
||||||
2825
doc/tinc.info
2825
doc/tinc.info
File diff suppressed because it is too large
Load diff
1317
doc/tinc.info-1
1317
doc/tinc.info-1
File diff suppressed because it is too large
Load diff
520
doc/tinc.info-2
520
doc/tinc.info-2
|
|
@ -1,520 +0,0 @@
|
||||||
This is tinc.info, produced by makeinfo version 4.1 from tinc.texi.
|
|
||||||
|
|
||||||
INFO-DIR-SECTION Networking tools
|
|
||||||
START-INFO-DIR-ENTRY
|
|
||||||
* tinc: (tinc). The tinc Manual.
|
|
||||||
END-INFO-DIR-ENTRY
|
|
||||||
|
|
||||||
This is the info manual for tinc, a Virtual Private Network daemon.
|
|
||||||
|
|
||||||
Copyright (C) 1998-2002 Ivo Timmermans <itimmermans@bigfoot.com>,
|
|
||||||
Guus Sliepen <guus@sliepen.warande.net> and Wessel Dankers
|
|
||||||
<wsl@nl.linux.org>.
|
|
||||||
|
|
||||||
$Id: tinc.texi,v 1.8.4.28 2002/04/09 11:43:29 guus Exp $
|
|
||||||
|
|
||||||
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 that the
|
|
||||||
entire resulting derived work is distributed under the terms of a
|
|
||||||
permission notice identical to this one.
|
|
||||||
|
|
||||||
|
|
||||||
File: tinc.info, Node: The UDP tunnel, Next: The meta-connection, Prev: The connection, Up: The connection
|
|
||||||
|
|
||||||
The UDP tunnel
|
|
||||||
--------------
|
|
||||||
|
|
||||||
The data itself is read from a character device file, the so-called
|
|
||||||
_virtual network device_. This device is associated with a network
|
|
||||||
interface. Any data sent to this interface can be read from the device,
|
|
||||||
and any data written to the device gets sent from the interface. Data
|
|
||||||
to and from the device is formatted as if it were a normal Ethernet
|
|
||||||
card, so a frame is preceded by two MAC addresses and a _frame type_
|
|
||||||
field.
|
|
||||||
|
|
||||||
So when tinc reads an Ethernet frame from the device, it determines
|
|
||||||
its type. When tinc is in it's default routing mode, it can handle IPv4
|
|
||||||
and IPv6 packets. Depending on the Subnet lines, it will send the
|
|
||||||
packets off to their destination. In the `switch' and `hub' mode, tinc
|
|
||||||
will use broadcasts and MAC address discovery to deduce the destination
|
|
||||||
of the packets. Since the latter modes only depend on the link layer
|
|
||||||
information, any protocol that runs over Ethernet is supported (for
|
|
||||||
instance IPX and Appletalk).
|
|
||||||
|
|
||||||
After the destination has been determined, a sequence number will be
|
|
||||||
added to the packet. The packet will then be encrypted and a message
|
|
||||||
authentication code will be appended.
|
|
||||||
|
|
||||||
When that is done, time has come to actually transport the packet to
|
|
||||||
the destination computer. We do this by sending the packet over an UDP
|
|
||||||
connection to the destination host. This is called _encapsulating_,
|
|
||||||
the VPN packet (though now encrypted) is encapsulated in another IP
|
|
||||||
datagram.
|
|
||||||
|
|
||||||
When the destination receives this packet, the same thing happens,
|
|
||||||
only in reverse. So it checks the message authentication code,
|
|
||||||
decrypts the contents of the UDP datagram, checks the sequence number
|
|
||||||
and writes the decrypted information to its own virtual network device.
|
|
||||||
|
|
||||||
To let the kernel on the receiving end accept the packet, the
|
|
||||||
destination MAC address must match that of the virtual network
|
|
||||||
interface. If tinc is in it's default routing mode, ARP does not work,
|
|
||||||
so the correct destination MAC cannot be set by the sending daemons.
|
|
||||||
tinc solves this by always overwriting the destination MAC address with
|
|
||||||
fe:fd:0:0:0:0. That is also the reason why you must set the MAC address
|
|
||||||
of your tap interface to that address.
|
|
||||||
|
|
||||||
|
|
||||||
File: tinc.info, Node: The meta-connection, Prev: The UDP tunnel, Up: The connection
|
|
||||||
|
|
||||||
The meta-connection
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
Having only an UDP connection available is not enough. Though
|
|
||||||
suitable for transmitting data, we want to be able to reliably send
|
|
||||||
other information, such as routing and session key information to
|
|
||||||
somebody.
|
|
||||||
|
|
||||||
TCP is a better alternative, because it already contains protection
|
|
||||||
against information being lost, unlike UDP.
|
|
||||||
|
|
||||||
So we establish two connections. One for the encrypted VPN data,
|
|
||||||
and one for other information, the meta-data. Hence, we call the second
|
|
||||||
connection the meta-connection. We can now be sure that the
|
|
||||||
meta-information doesn't get lost on the way to another computer.
|
|
||||||
|
|
||||||
Like with any communication, we must have a protocol, so that
|
|
||||||
everybody knows what everything stands for, and how she should react.
|
|
||||||
Because we have two connections, we also have two protocols. The
|
|
||||||
protocol used for the UDP data is the "data-protocol," the other one is
|
|
||||||
the "meta-protocol."
|
|
||||||
|
|
||||||
The reason we don't use TCP for both protocols is that UDP is much
|
|
||||||
better for encapsulation, even while it is less reliable. The real
|
|
||||||
problem is that when TCP would be used to encapsulate a TCP stream
|
|
||||||
that's on the private network, for every packet sent there would be
|
|
||||||
three ACKs sent instead of just one. Furthermore, if there would be a
|
|
||||||
timeout, both TCP streams would sense the timeout, and both would start
|
|
||||||
re-sending packets.
|
|
||||||
|
|
||||||
|
|
||||||
File: tinc.info, Node: The meta-protocol, Next: Security, Prev: The connection, Up: Technical information
|
|
||||||
|
|
||||||
The meta-protocol
|
|
||||||
=================
|
|
||||||
|
|
||||||
The meta protocol is used to tie all tinc daemons together, and
|
|
||||||
exchange information about which tinc daemon serves which virtual
|
|
||||||
subnet.
|
|
||||||
|
|
||||||
The meta protocol consists of requests that can be sent to the other
|
|
||||||
side. Each request has a unique number and several parameters. All
|
|
||||||
requests are represented in the standard ASCII character set. It is
|
|
||||||
possible to use tools such as telnet or netcat to connect to a tinc
|
|
||||||
daemon and to read and write requests by hand, provided that one
|
|
||||||
understands the numeric codes sent.
|
|
||||||
|
|
||||||
The authentication scheme is described in *Note Authentication
|
|
||||||
protocol::. After a successful authentication, the server and the
|
|
||||||
client will exchange all the information about other tinc daemons and
|
|
||||||
subnets they know of, so that both sides (and all the other tinc
|
|
||||||
daemons behind them) have their information synchronised.
|
|
||||||
|
|
||||||
daemon message
|
|
||||||
--------------------------------------------------------------------------
|
|
||||||
origin ADD_EDGE node1 12.23.34.45 655 node2 21.32.43.54 655 222 0
|
|
||||||
| | | \___________________/ | +-> options
|
|
||||||
| | | | +----> weight
|
|
||||||
| | | +----------------> see below
|
|
||||||
| | +--> UDP port
|
|
||||||
| +----------> real address
|
|
||||||
+------------------> name of node on one side of the edge
|
|
||||||
|
|
||||||
origin ADD_SUBNET node 192.168.1.0/24
|
|
||||||
| | +--> prefixlength
|
|
||||||
| +--------> IPv4 network address
|
|
||||||
+------------------> owner of this subnet
|
|
||||||
--------------------------------------------------------------------------
|
|
||||||
|
|
||||||
In case a connection between two daemons is closed or broken,
|
|
||||||
DEL_EDGE messages are sent to inform the other daemons of that fact.
|
|
||||||
Each daemon will calculate a new route to the the daemons, or mark them
|
|
||||||
unreachable if there isn't any.
|
|
||||||
|
|
||||||
The keys used to encrypt VPN packets are not sent out directly. This
|
|
||||||
is because it would generate a lot of traffic on VPNs with many
|
|
||||||
daemons, and chances are that not every tinc daemon will ever send a
|
|
||||||
packet to every other daemon. Instead, if a daemon needs a key it sends
|
|
||||||
a request for it via the meta connection of the nearest hop in the
|
|
||||||
direction of the destination. If any hop on the way has already learned
|
|
||||||
the key, it will act as a proxy and forward its copy back to the
|
|
||||||
requester.
|
|
||||||
|
|
||||||
daemon message
|
|
||||||
--------------------------------------------------------------------------
|
|
||||||
daemon REQ_KEY origin destination
|
|
||||||
| +--> name of the tinc daemon it wants the key from
|
|
||||||
+----------> name of the daemon that wants the key
|
|
||||||
|
|
||||||
daemon ANS_KEY origin destination 4ae0b0a82d6e0078 91 64 4
|
|
||||||
| | \______________/ | | +--> MAC length
|
|
||||||
| | | | +-----> digest algorithm
|
|
||||||
| | | +--------> cipher algorithm
|
|
||||||
| | +--> 128 bits key
|
|
||||||
| +--> name of the daemon that wants the key
|
|
||||||
+----------> name of the daemon that uses this key
|
|
||||||
|
|
||||||
daemon KEY_CHANGED origin
|
|
||||||
+--> daemon that has changed it's packet key
|
|
||||||
--------------------------------------------------------------------------
|
|
||||||
|
|
||||||
There is also a mechanism to check if hosts are still alive. Since
|
|
||||||
network failures or a crash can cause a daemon to be killed without
|
|
||||||
properly shutting down the TCP connection, this is necessary to keep an
|
|
||||||
up to date connection list. PINGs are sent at regular intervals, except
|
|
||||||
when there is also some other traffic. A little bit of salt (random
|
|
||||||
data) is added with each PING and PONG message, to make sure that long
|
|
||||||
sequences of PING/PONG messages without any other traffic won't result
|
|
||||||
in known plaintext.
|
|
||||||
|
|
||||||
daemon message
|
|
||||||
--------------------------------------------------------------------------
|
|
||||||
origin PING
|
|
||||||
dest. PONG
|
|
||||||
--------------------------------------------------------------------------
|
|
||||||
|
|
||||||
This basically covers what is sent over the meta connection by tinc.
|
|
||||||
|
|
||||||
|
|
||||||
File: tinc.info, Node: Security, Prev: The meta-protocol, Up: Technical information
|
|
||||||
|
|
||||||
About tinc's encryption and other security-related issues.
|
|
||||||
==========================================================
|
|
||||||
|
|
||||||
tinc got its name from "TINC," short for _There Is No Cabal_; the
|
|
||||||
alleged Cabal was/is an organisation that was said to keep an eye on the
|
|
||||||
entire Internet. As this is exactly what you _don't_ want, we named
|
|
||||||
the tinc project after TINC.
|
|
||||||
|
|
||||||
But in order to be "immune" to eavesdropping, you'll have to encrypt
|
|
||||||
your data. Because tinc is a _Secure_ VPN (SVPN) daemon, it does
|
|
||||||
exactly that: encrypt. tinc by default uses blowfish encryption with
|
|
||||||
128 bit keys in CBC mode, 32 bit sequence numbers and 4 byte long
|
|
||||||
message authentication codes to make sure eavesdroppers cannot get and
|
|
||||||
cannot change any information at all from the packets they can
|
|
||||||
intercept. The encryption algorithm and message authentication
|
|
||||||
algorithm can be changed in the configuration. The length of the message
|
|
||||||
authentication codes is also adjustable. The length of the key for the
|
|
||||||
encryption algorithm is always the default length used by OpenSSL.
|
|
||||||
|
|
||||||
* Menu:
|
|
||||||
|
|
||||||
* Authentication protocol::
|
|
||||||
* Encryption of network packets::
|
|
||||||
|
|
||||||
|
|
||||||
File: tinc.info, Node: Authentication protocol, Next: Encryption of network packets, Prev: Security, Up: Security
|
|
||||||
|
|
||||||
Authentication protocol
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
A new scheme for authentication in tinc has been devised, which
|
|
||||||
offers some improvements over the protocol used in 1.0pre2 and 1.0pre3.
|
|
||||||
Explanation is below.
|
|
||||||
|
|
||||||
daemon message
|
|
||||||
--------------------------------------------------------------------------
|
|
||||||
client <attempts connection>
|
|
||||||
|
|
||||||
server <accepts connection>
|
|
||||||
|
|
||||||
client ID client 12
|
|
||||||
| +---> version
|
|
||||||
+-------> name of tinc daemon
|
|
||||||
|
|
||||||
server ID server 12
|
|
||||||
| +---> version
|
|
||||||
+-------> name of tinc daemon
|
|
||||||
|
|
||||||
client META_KEY 5f0823a93e35b69e...7086ec7866ce582b
|
|
||||||
\_________________________________/
|
|
||||||
+-> RSAKEYLEN bits totally random string S1,
|
|
||||||
encrypted with server's public RSA key
|
|
||||||
|
|
||||||
server META_KEY 6ab9c1640388f8f0...45d1a07f8a672630
|
|
||||||
\_________________________________/
|
|
||||||
+-> RSAKEYLEN bits totally random string S2,
|
|
||||||
encrypted with client's public RSA key
|
|
||||||
|
|
||||||
From now on:
|
|
||||||
- the client will symmetrically encrypt outgoing traffic using S1
|
|
||||||
- the server will symmetrically encrypt outgoing traffic using S2
|
|
||||||
|
|
||||||
client CHALLENGE da02add1817c1920989ba6ae2a49cecbda0
|
|
||||||
\_________________________________/
|
|
||||||
+-> CHALLEN bits totally random string H1
|
|
||||||
|
|
||||||
server CHALLENGE 57fb4b2ccd70d6bb35a64c142f47e61d57f
|
|
||||||
\_________________________________/
|
|
||||||
+-> CHALLEN bits totally random string H2
|
|
||||||
|
|
||||||
client CHAL_REPLY 816a86
|
|
||||||
+-> 160 bits SHA1 of H2
|
|
||||||
|
|
||||||
server CHAL_REPLY 928ffe
|
|
||||||
+-> 160 bits SHA1 of H1
|
|
||||||
|
|
||||||
After the correct challenge replies are received, both ends have proved
|
|
||||||
their identity. Further information is exchanged.
|
|
||||||
|
|
||||||
client ACK 655 12.23.34.45 123 0
|
|
||||||
| | | +-> options
|
|
||||||
| | +----> estimated weight
|
|
||||||
| +------------> IP address of server as seen by client
|
|
||||||
+--------------------> UDP port of client
|
|
||||||
|
|
||||||
server ACK 655 21.32.43.54 321 0
|
|
||||||
| | | +-> options
|
|
||||||
| | +----> estimated weight
|
|
||||||
| +------------> IP address of client as seen by server
|
|
||||||
+--------------------> UDP port of server
|
|
||||||
--------------------------------------------------------------------------
|
|
||||||
|
|
||||||
This new scheme has several improvements, both in efficiency and
|
|
||||||
security.
|
|
||||||
|
|
||||||
First of all, the server sends exactly the same kind of messages
|
|
||||||
over the wire as the client. The previous versions of tinc first
|
|
||||||
authenticated the client, and then the server. This scheme even allows
|
|
||||||
both sides to send their messages simultaneously, there is no need to
|
|
||||||
wait for the other to send something first. This means that any
|
|
||||||
calculations that need to be done upon sending or receiving a message
|
|
||||||
can also be done in parallel. This is especially important when doing
|
|
||||||
RSA encryption/decryption. Given that these calculations are the main
|
|
||||||
part of the CPU time spent for the authentication, speed is improved by
|
|
||||||
a factor 2.
|
|
||||||
|
|
||||||
Second, only one RSA encrypted message is sent instead of two. This
|
|
||||||
reduces the amount of information attackers can see (and thus use for a
|
|
||||||
cryptographic attack). It also improves speed by a factor two, making
|
|
||||||
the total speedup a factor 4.
|
|
||||||
|
|
||||||
Third, and most important: The symmetric cipher keys are exchanged
|
|
||||||
first, the challenge is done afterwards. In the previous authentication
|
|
||||||
scheme, because a man-in-the-middle could pass the challenge/chal_reply
|
|
||||||
phase (by just copying the messages between the two real tinc daemons),
|
|
||||||
but no information was exchanged that was really needed to read the
|
|
||||||
rest of the messages, the challenge/chal_reply phase was of no real
|
|
||||||
use. The man-in-the-middle was only stopped by the fact that only after
|
|
||||||
the ACK messages were encrypted with the symmetric cipher. Potentially,
|
|
||||||
it could even send it's own symmetric key to the server (if it knew the
|
|
||||||
server's public key) and read some of the metadata the server would
|
|
||||||
send it (it was impossible for the mitm to read actual network packets
|
|
||||||
though). The new scheme however prevents this.
|
|
||||||
|
|
||||||
This new scheme makes sure that first of all, symmetric keys are
|
|
||||||
exchanged. The rest of the messages are then encrypted with the
|
|
||||||
symmetric cipher. Then, each side can only read received messages if
|
|
||||||
they have their private key. The challenge is there to let the other
|
|
||||||
side know that the private key is really known, because a challenge
|
|
||||||
reply can only be sent back if the challenge is decrypted correctly,
|
|
||||||
and that can only be done with knowledge of the private key.
|
|
||||||
|
|
||||||
Fourth: the first thing that is send via the symmetric cipher
|
|
||||||
encrypted connection is a totally random string, so that there is no
|
|
||||||
known plaintext (for an attacker) in the beginning of the encrypted
|
|
||||||
stream.
|
|
||||||
|
|
||||||
|
|
||||||
File: tinc.info, Node: Encryption of network packets, Prev: Authentication protocol, Up: Security
|
|
||||||
|
|
||||||
Encryption of network packet
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
A data packet can only be sent if the encryption key is known to both
|
|
||||||
parties, and the connection is activated. If the encryption key is not
|
|
||||||
known, a request is sent to the destination using the meta connection
|
|
||||||
to retrieve it. The packet is stored in a queue while waiting for the
|
|
||||||
key to arrive.
|
|
||||||
|
|
||||||
The UDP packet containing the network packet from the VPN has the
|
|
||||||
following layout:
|
|
||||||
|
|
||||||
... | IP header | UDP header | seqno | VPN packet | MAC | UDP trailer
|
|
||||||
\___________________/\_____/
|
|
||||||
| |
|
|
||||||
V +---> digest algorithm
|
|
||||||
Encrypted with symmetric cipher
|
|
||||||
|
|
||||||
So, the entire VPN packet is encrypted using a symmetric cipher. A
|
|
||||||
32 bits sequence number is added in front of the actual VPN packet, to
|
|
||||||
act as a unique IV for each packet and to prevent replay attacks. A
|
|
||||||
message authentication code is added to the UDP packet to prevent
|
|
||||||
alteration of packets. By default the first 4 bytes of the digest are
|
|
||||||
used for this, but this can be changed using the MACLength
|
|
||||||
configuration variable.
|
|
||||||
|
|
||||||
|
|
||||||
File: tinc.info, Node: About us, Next: Concept Index, Prev: Technical information, Up: Top
|
|
||||||
|
|
||||||
About us
|
|
||||||
********
|
|
||||||
|
|
||||||
* Menu:
|
|
||||||
|
|
||||||
* Contact Information::
|
|
||||||
* Authors::
|
|
||||||
|
|
||||||
|
|
||||||
File: tinc.info, Node: Contact Information, Next: Authors, Prev: About us, Up: About us
|
|
||||||
|
|
||||||
Contact information
|
|
||||||
===================
|
|
||||||
|
|
||||||
tinc's website is at <http://tinc.nl.linux.org/>, this server is
|
|
||||||
located in the Netherlands.
|
|
||||||
|
|
||||||
We have an IRC channel on the Open Projects IRC network. Connect to
|
|
||||||
irc.openprojects.net (http://openprojects.nu/services/irc.html), and
|
|
||||||
join channel #tinc.
|
|
||||||
|
|
||||||
|
|
||||||
File: tinc.info, Node: Authors, Prev: Contact Information, Up: About us
|
|
||||||
|
|
||||||
Authors
|
|
||||||
=======
|
|
||||||
|
|
||||||
Ivo Timmermans (zarq) (<itimmermans@bigfoot.com>)
|
|
||||||
Main coder/hacker and maintainer of the package.
|
|
||||||
|
|
||||||
Guus Sliepen (guus) (<guus@sliepen.warande.net>)
|
|
||||||
Originator of it all, co-author.
|
|
||||||
|
|
||||||
Wessel Dankers (Ubiq) (<wsl@nl.linux.org>)
|
|
||||||
For the name `tinc' and various suggestions.
|
|
||||||
|
|
||||||
We have received a lot of valuable input from users. With their
|
|
||||||
help, tinc has become the flexible and robust tool that it is today.
|
|
||||||
We have composed a list of contributions, in the file called `THANKS' in
|
|
||||||
the source distribution.
|
|
||||||
|
|
||||||
|
|
||||||
File: tinc.info, Node: Concept Index, Prev: About us, Up: Top
|
|
||||||
|
|
||||||
Concept Index
|
|
||||||
*************
|
|
||||||
|
|
||||||
* Menu:
|
|
||||||
|
|
||||||
* ACK: Authentication protocol.
|
|
||||||
* ADD_EDGE: The meta-protocol.
|
|
||||||
* ADD_SUBNET: The meta-protocol.
|
|
||||||
* Address: Host configuration variables.
|
|
||||||
* AddressFamily: Main configuration variables.
|
|
||||||
* ANS_KEY: The meta-protocol.
|
|
||||||
* arp <1>: Error messages.
|
|
||||||
* arp: Network interfaces.
|
|
||||||
* authentication: Authentication protocol.
|
|
||||||
* binary package: Building and installing tinc.
|
|
||||||
* BindToInterface: Main configuration variables.
|
|
||||||
* Cabal: Security.
|
|
||||||
* CHAL_REPLY: Authentication protocol.
|
|
||||||
* CHALLENGE: Authentication protocol.
|
|
||||||
* CIDR notation: Host configuration variables.
|
|
||||||
* Cipher: Host configuration variables.
|
|
||||||
* client: How connections work.
|
|
||||||
* command line: Runtime options.
|
|
||||||
* Compression: Host configuration variables.
|
|
||||||
* connection: The connection.
|
|
||||||
* ConnectTo: Main configuration variables.
|
|
||||||
* daemon: Running tinc.
|
|
||||||
* data-protocol: The meta-connection.
|
|
||||||
* Debian: Configuring the kernel.
|
|
||||||
* debug level: Runtime options.
|
|
||||||
* DEL_EDGE: The meta-protocol.
|
|
||||||
* Device: Main configuration variables.
|
|
||||||
* device files: Device files.
|
|
||||||
* Digest: Host configuration variables.
|
|
||||||
* encapsulating: The UDP tunnel.
|
|
||||||
* encryption: Encryption of network packets.
|
|
||||||
* ethertap: Configuring the kernel.
|
|
||||||
* example: Example configuration.
|
|
||||||
* frame type: The UDP tunnel.
|
|
||||||
* FreeBSD: Supported platforms.
|
|
||||||
* hardware address: Network interfaces.
|
|
||||||
* Hostnames: Main configuration variables.
|
|
||||||
* hub: Main configuration variables.
|
|
||||||
* ID: Authentication protocol.
|
|
||||||
* ifconfig: Network interfaces.
|
|
||||||
* IndirectData: Host configuration variables.
|
|
||||||
* Interface: Main configuration variables.
|
|
||||||
* IRC: Contact Information.
|
|
||||||
* Kernel-HOWTO: Configuring the kernel.
|
|
||||||
* key generation: Generating keypairs.
|
|
||||||
* KEY_CHANGED: The meta-protocol.
|
|
||||||
* KeyExpire: Main configuration variables.
|
|
||||||
* libraries: Libraries.
|
|
||||||
* license: OpenSSL.
|
|
||||||
* Linux: Supported platforms.
|
|
||||||
* MAC address: Network interfaces.
|
|
||||||
* MACExpire: Main configuration variables.
|
|
||||||
* MACLength: Host configuration variables.
|
|
||||||
* meta-protocol: The meta-connection.
|
|
||||||
* META_KEY: Authentication protocol.
|
|
||||||
* Mode: Main configuration variables.
|
|
||||||
* multiple networks: Multiple networks.
|
|
||||||
* Name: Main configuration variables.
|
|
||||||
* netlink_dev: Configuring the kernel.
|
|
||||||
* netmask: Network interfaces.
|
|
||||||
* netname: Multiple networks.
|
|
||||||
* Network Administrators Guide: Configuration introduction.
|
|
||||||
* OpenBSD: Supported platforms.
|
|
||||||
* OpenSSL: OpenSSL.
|
|
||||||
* options: Runtime options.
|
|
||||||
* PEM format: Host configuration variables.
|
|
||||||
* PING: The meta-protocol.
|
|
||||||
* PingTimeout: Main configuration variables.
|
|
||||||
* platforms: Supported platforms.
|
|
||||||
* PONG: The meta-protocol.
|
|
||||||
* Port: Host configuration variables.
|
|
||||||
* port numbers: Other files.
|
|
||||||
* PriorityInheritance: Main configuration variables.
|
|
||||||
* private: VPNs.
|
|
||||||
* PrivateKey: Main configuration variables.
|
|
||||||
* PrivateKeyFile: Main configuration variables.
|
|
||||||
* PublicKey: Host configuration variables.
|
|
||||||
* PublicKeyFile: Host configuration variables.
|
|
||||||
* RedHat: Configuring the kernel.
|
|
||||||
* release: Supported platforms.
|
|
||||||
* REQ_KEY: The meta-protocol.
|
|
||||||
* requirements: Libraries.
|
|
||||||
* router: Main configuration variables.
|
|
||||||
* runtime options: Runtime options.
|
|
||||||
* scalability: tinc.
|
|
||||||
* server: How connections work.
|
|
||||||
* Solaris: Supported platforms.
|
|
||||||
* Subnet: Host configuration variables.
|
|
||||||
* SVPN: Security.
|
|
||||||
* switch: Main configuration variables.
|
|
||||||
* TCP: The meta-connection.
|
|
||||||
* TCPonly: Host configuration variables.
|
|
||||||
* TINC: Security.
|
|
||||||
* tinc: Introduction.
|
|
||||||
* tinc-up: Network interfaces.
|
|
||||||
* tincd: tinc.
|
|
||||||
* Traditional VPNs: tinc.
|
|
||||||
* tun: Configuring the kernel.
|
|
||||||
* UDP <1>: Encryption of network packets.
|
|
||||||
* UDP: The UDP tunnel.
|
|
||||||
* virtual: VPNs.
|
|
||||||
* virtual network device: The UDP tunnel.
|
|
||||||
* VPN: VPNs.
|
|
||||||
* vpnd: tinc.
|
|
||||||
* website: Contact Information.
|
|
||||||
* zlib: zlib.
|
|
||||||
|
|
||||||
|
|
||||||
1974
doc/tinc.texi
1974
doc/tinc.texi
File diff suppressed because it is too large
Load diff
|
|
@ -1,22 +1,28 @@
|
||||||
.Dd 2002-03-25
|
.Dd 2014-05-11
|
||||||
.Dt TINCD 8
|
.Dt TINCD 8
|
||||||
.\" Manual page created by:
|
.\" Manual page created by:
|
||||||
.\" Ivo Timmermans <itimmermans@bigfoot.com>
|
.\" Ivo Timmermans
|
||||||
.\" Guus Sliepen <guus@sliepen.warande.net>
|
.\" Guus Sliepen <guus@tinc-vpn.org>
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
.Nm tincd
|
.Nm tincd
|
||||||
.Nd tinc VPN daemon
|
.Nd tinc VPN daemon
|
||||||
.Sh SYNOPSIS
|
.Sh SYNOPSIS
|
||||||
.Nm
|
.Nm
|
||||||
.Op Fl cdDkKn
|
.Op Fl cdDkKnoLRU
|
||||||
.Op Fl -bypass-security
|
|
||||||
.Op Fl -config Ns = Ns Ar DIR
|
.Op Fl -config Ns = Ns Ar DIR
|
||||||
.Op Fl -debug Ns = Ns Ar LEVEL
|
|
||||||
.Op Fl -generate-keys Ns Op = Ns Ar BITS
|
|
||||||
.Op Fl -help
|
|
||||||
.Op Fl -kill Ns = Ns Ar SIGNAL
|
|
||||||
.Op Fl -net Ns = Ns Ar NETNAME
|
|
||||||
.Op Fl -no-detach
|
.Op Fl -no-detach
|
||||||
|
.Op Fl -debug Ns Op = Ns Ar LEVEL
|
||||||
|
.Op Fl -kill Ns Op = Ns Ar SIGNAL
|
||||||
|
.Op Fl -net Ns = Ns Ar NETNAME
|
||||||
|
.Op Fl -generate-keys Ns Op = Ns Ar BITS
|
||||||
|
.Op Fl -option Ns = Ns Ar [HOST.]KEY=VALUE
|
||||||
|
.Op Fl -mlock
|
||||||
|
.Op Fl -logfile Ns Op = Ns Ar FILE
|
||||||
|
.Op Fl -pidfile Ns = Ns Ar FILE
|
||||||
|
.Op Fl -bypass-security
|
||||||
|
.Op Fl -chroot
|
||||||
|
.Op Fl -user Ns = Ns Ar USER
|
||||||
|
.Op Fl -help
|
||||||
.Op Fl -version
|
.Op Fl -version
|
||||||
.Sh DESCRIPTION
|
.Sh DESCRIPTION
|
||||||
This is the daemon of tinc, a secure virtual private network (VPN) project.
|
This is the daemon of tinc, a secure virtual private network (VPN) project.
|
||||||
|
|
@ -31,37 +37,93 @@ If that succeeds,
|
||||||
it will detach from the controlling terminal and continue in the background,
|
it will detach from the controlling terminal and continue in the background,
|
||||||
accepting and setting up connections to other tinc daemons
|
accepting and setting up connections to other tinc daemons
|
||||||
that are part of the virtual private network.
|
that are part of the virtual private network.
|
||||||
|
Under Windows (not Cygwin) tinc will install itself as a service,
|
||||||
|
which will be restarted automatically after reboots.
|
||||||
.Sh OPTIONS
|
.Sh OPTIONS
|
||||||
.Bl -tag -width indent
|
.Bl -tag -width indent
|
||||||
.It Fl -bypass-security
|
|
||||||
Disables encryption and authentication.
|
|
||||||
Only useful for debugging.
|
|
||||||
.It Fl c, -config Ns = Ns Ar DIR
|
.It Fl c, -config Ns = Ns Ar DIR
|
||||||
Read configuration options from
|
Read configuration files from
|
||||||
.Ar DIR .
|
.Ar DIR
|
||||||
|
instead of
|
||||||
|
.Pa @sysconfdir@/tinc/ .
|
||||||
|
.It Fl D, -no-detach
|
||||||
|
Don't fork and detach.
|
||||||
|
This will also disable the automatic restart mechanism for fatal errors.
|
||||||
|
If not mentioned otherwise, this will show log messages on the standard error output.
|
||||||
.It Fl d, -debug Ns Op = Ns Ar LEVEL
|
.It Fl d, -debug Ns Op = Ns Ar LEVEL
|
||||||
Increase debug level or set it to
|
Increase debug level or set it to
|
||||||
.Ar LEVEL
|
.Ar LEVEL
|
||||||
(see below).
|
(see below).
|
||||||
.It Fl K, -generate-keys Ns Op = Ns Ar BITS
|
|
||||||
Generate public/private RSA keypair and exit.
|
|
||||||
If
|
|
||||||
.Ar BITS
|
|
||||||
is omitted, the default length will be 1024 bits.
|
|
||||||
.It Fl -help
|
|
||||||
Display short list of options.
|
|
||||||
.It Fl k, -kill Ns Op = Ns Ar SIGNAL
|
.It Fl k, -kill Ns Op = Ns Ar SIGNAL
|
||||||
Attempt to kill a running
|
Attempt to kill a running
|
||||||
.Nm
|
.Nm
|
||||||
(optionally with the specified
|
(optionally with the specified
|
||||||
.Ar SIGNAL
|
.Ar SIGNAL
|
||||||
instead of SIGTERM) and exit.
|
instead of SIGTERM) and exit.
|
||||||
|
Under Windows (not Cygwin) the optional argument is ignored,
|
||||||
|
the service will always be stopped and removed.
|
||||||
.It Fl n, -net Ns = Ns Ar NETNAME
|
.It Fl n, -net Ns = Ns Ar NETNAME
|
||||||
Connect to net
|
Connect to net
|
||||||
.Ar NETNAME .
|
.Ar NETNAME .
|
||||||
.It Fl D, -no-detach
|
This will let tinc read all configuration files from
|
||||||
Don't fork and detach.
|
.Pa @sysconfdir@/tinc/ Ar NETNAME .
|
||||||
This will also disable the automatic restart mechanism for fatal errors.
|
Specifying
|
||||||
|
.Li .
|
||||||
|
for
|
||||||
|
.Ar NETNAME
|
||||||
|
is the same as not specifying any
|
||||||
|
.Ar NETNAME .
|
||||||
|
.It Fl K, -generate-keys Ns Op = Ns Ar BITS
|
||||||
|
Generate public/private RSA keypair and exit.
|
||||||
|
If
|
||||||
|
.Ar BITS
|
||||||
|
is omitted, the default length will be 2048 bits.
|
||||||
|
When saving keys to existing files, tinc will not delete the old keys,
|
||||||
|
you have to remove them manually.
|
||||||
|
.It Fl o, -option Ns = Ns Ar [HOST.]KEY=VALUE
|
||||||
|
Without specifying a
|
||||||
|
.Ar HOST ,
|
||||||
|
this will set server configuration variable
|
||||||
|
.Ar KEY
|
||||||
|
to
|
||||||
|
.Ar VALUE .
|
||||||
|
If specified as
|
||||||
|
.Ar HOST.KEY=VALUE ,
|
||||||
|
this will set the host configuration variable
|
||||||
|
.Ar KEY
|
||||||
|
of the host named
|
||||||
|
.Ar HOST
|
||||||
|
to
|
||||||
|
.Ar VALUE .
|
||||||
|
This option can be used more than once to specify multiple configuration variables.
|
||||||
|
.It Fl L, -mlock
|
||||||
|
Lock tinc into main memory.
|
||||||
|
This will prevent sensitive data like shared private keys to be written to the system swap files/partitions.
|
||||||
|
.It Fl -logfile Ns Op = Ns Ar FILE
|
||||||
|
Write log entries to a file instead of to the system logging facility.
|
||||||
|
If
|
||||||
|
.Ar FILE
|
||||||
|
is omitted, the default is
|
||||||
|
.Pa @localstatedir@/log/tinc. Ns Ar NETNAME Ns Pa .log.
|
||||||
|
.It Fl -pidfile Ns = Ns Ar FILE
|
||||||
|
Write PID to
|
||||||
|
.Ar FILE
|
||||||
|
instead of
|
||||||
|
.Pa @runstatedir@/tinc. Ns Ar NETNAME Ns Pa .pid.
|
||||||
|
Under Windows this option will be ignored.
|
||||||
|
.It Fl -bypass-security
|
||||||
|
Disables encryption and authentication of the meta protocol.
|
||||||
|
Only useful for debugging.
|
||||||
|
.It Fl R, -chroot
|
||||||
|
With this option tinc chroots into the directory where network
|
||||||
|
config is located (@sysconfdir@/tinc/NETNAME if -n option is used,
|
||||||
|
or to the directory specified with -c option) after initialization.
|
||||||
|
.It Fl U, -user Ns = Ns Ar USER
|
||||||
|
setuid to the specified
|
||||||
|
.Ar USER
|
||||||
|
after initialization.
|
||||||
|
.It Fl -help
|
||||||
|
Display short list of options.
|
||||||
.It Fl -version
|
.It Fl -version
|
||||||
Output version information and exit.
|
Output version information and exit.
|
||||||
.El
|
.El
|
||||||
|
|
@ -80,7 +142,15 @@ and if
|
||||||
didn't succeed to connect to an uplink the first time after it started,
|
didn't succeed to connect to an uplink the first time after it started,
|
||||||
it defaults to the maximum time of 15 minutes.
|
it defaults to the maximum time of 15 minutes.
|
||||||
.It HUP
|
.It HUP
|
||||||
Closes all connections, rereads the configuration file and restarts the daemon.
|
Partially rereads configuration files.
|
||||||
|
Connections to hosts whose host config file are removed are closed.
|
||||||
|
New outgoing connections specified in
|
||||||
|
.Pa tinc.conf
|
||||||
|
will be made.
|
||||||
|
If the
|
||||||
|
.Fl -logfile
|
||||||
|
option is used, this will also close and reopen the log file,
|
||||||
|
useful when log rotation is used.
|
||||||
.It INT
|
.It INT
|
||||||
Temporarily increases debug level to 5.
|
Temporarily increases debug level to 5.
|
||||||
Send this signal again to revert to the original level.
|
Send this signal again to revert to the original level.
|
||||||
|
|
@ -101,11 +171,11 @@ Each level inherits all messages of the previous level:
|
||||||
This will log a message indicating
|
This will log a message indicating
|
||||||
.Nm
|
.Nm
|
||||||
has started along with a version number.
|
has started along with a version number.
|
||||||
It will also any serious error.
|
It will also log any serious error.
|
||||||
.It 1
|
.It 1
|
||||||
This will log all connections that are made with other tinc daemons.
|
This will log all connections that are made with other tinc daemons.
|
||||||
.It 2
|
.It 2
|
||||||
This will log status and error messages from other tinc daemons.
|
This will log status and error messages from scripts and other tinc daemons.
|
||||||
.It 3
|
.It 3
|
||||||
This will log all requests that are exchanged with other tinc daemons. These include
|
This will log all requests that are exchanged with other tinc daemons. These include
|
||||||
authentication, key exchange and connection list updates.
|
authentication, key exchange and connection list updates.
|
||||||
|
|
@ -116,29 +186,11 @@ This will log all network traffic over the virtual private network.
|
||||||
.El
|
.El
|
||||||
.Sh FILES
|
.Sh FILES
|
||||||
.Bl -tag -width indent
|
.Bl -tag -width indent
|
||||||
.It Pa /etc/tinc/ Ns Ar NETNAME Ns Pa /tinc.conf
|
.It Pa @sysconfdir@/tinc/
|
||||||
The configuration file for
|
Directory containing the configuration files tinc uses.
|
||||||
.Nm .
|
For more information, see
|
||||||
.It Pa /etc/tinc/ Ns Ar NETNAME Ns Pa /tinc-up
|
.Xr tinc.conf 5 .
|
||||||
Script which is executed as soon as the virtual network device has been allocated.
|
.It Pa @runstatedir@/tinc. Ns Ar NETNAME Ns Pa .pid
|
||||||
Purpose is to further configure that device.
|
|
||||||
.It Pa /etc/tinc/ Ns Ar NETNAME Ns Pa /tinc-down
|
|
||||||
Script which is executed when
|
|
||||||
.Nm
|
|
||||||
exits.
|
|
||||||
Purpose is to cleanly shut down the virtual network device before it will be deallocated.
|
|
||||||
.It Pa /etc/tinc/ Ns Ar NETNAME Ns Pa /hosts/*
|
|
||||||
The directory containing the host configuration files
|
|
||||||
used to authenticate other tinc daemons.
|
|
||||||
.It Pa /etc/tinc/ Ns Ar NETNAME Ns Pa /hosts/ Ns Ar NAME Ns Pa -up
|
|
||||||
Script which is executed as soon as host
|
|
||||||
.Ar NAME
|
|
||||||
becomes reachable.
|
|
||||||
.It Pa /etc/tinc/ Ns Ar NETNAME Ns Pa /hosts/ Ns Ar NAME Ns Pa -down
|
|
||||||
Script which is executed as soon as host
|
|
||||||
.Ar NAME
|
|
||||||
becomes unreachable.
|
|
||||||
.It Pa /var/run/tinc. Ns Ar NETNAME Ns Pa .pid
|
|
||||||
The PID of the currently running
|
The PID of the currently running
|
||||||
.Nm
|
.Nm
|
||||||
is stored in this file.
|
is stored in this file.
|
||||||
|
|
@ -150,12 +202,12 @@ option may not work correctly.
|
||||||
.Pp
|
.Pp
|
||||||
.Sy The cryptography in tinc is not well tested yet. Use it at your own risk!
|
.Sy The cryptography in tinc is not well tested yet. Use it at your own risk!
|
||||||
.Pp
|
.Pp
|
||||||
If you find any bugs, report them to tinc@nl.linux.org.
|
If you find any bugs, report them to tinc@tinc-vpn.org.
|
||||||
.Sh TODO
|
.Sh TODO
|
||||||
A lot, especially security auditing.
|
A lot, especially security auditing.
|
||||||
.Sh SEE ALSO
|
.Sh SEE ALSO
|
||||||
.Xr tinc.conf 5 ,
|
.Xr tinc.conf 5 ,
|
||||||
.Pa http://tinc.nl.linux.org/ ,
|
.Pa https://www.tinc-vpn.org/ ,
|
||||||
.Pa http://www.cabal.org/ .
|
.Pa http://www.cabal.org/ .
|
||||||
.Pp
|
.Pp
|
||||||
The full documentation for tinc is maintained as a Texinfo manual.
|
The full documentation for tinc is maintained as a Texinfo manual.
|
||||||
|
|
@ -168,7 +220,7 @@ tinc comes with ABSOLUTELY NO WARRANTY.
|
||||||
This is free software, and you are welcome to redistribute it under certain conditions;
|
This is free software, and you are welcome to redistribute it under certain conditions;
|
||||||
see the file COPYING for details.
|
see the file COPYING for details.
|
||||||
.Sh AUTHORS
|
.Sh AUTHORS
|
||||||
.An "Ivo Timmermans" Aq itimmermans@bigfoot.com
|
.An "Ivo Timmermans"
|
||||||
.An "Guus Sliepen" Aq guus@sliepen.warande.net
|
.An "Guus Sliepen" Aq guus@tinc-vpn.org
|
||||||
.Pp
|
.Pp
|
||||||
And thanks to many others for their contributions to tinc!
|
And thanks to many others for their contributions to tinc!
|
||||||
5
doc/tincinclude.texi
Normal file
5
doc/tincinclude.texi
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
@set VERSION 1.0.36
|
||||||
|
@set PACKAGE tinc
|
||||||
|
@set sysconfdir /etc
|
||||||
|
@set localstatedir /var
|
||||||
|
@set runstatedir /run
|
||||||
5
doc/tincinclude.texi.in
Normal file
5
doc/tincinclude.texi.in
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
@set VERSION @VERSION@
|
||||||
|
@set PACKAGE @PACKAGE@
|
||||||
|
@set sysconfdir @sysconfdir@
|
||||||
|
@set localstatedir @localstatedir@
|
||||||
|
@set runstatedir @runstatedir@
|
||||||
706
install-sh
706
install-sh
|
|
@ -1,251 +1,529 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
#
|
|
||||||
# install - install a program, script, or datafile
|
# install - install a program, script, or datafile
|
||||||
# This comes from X11R5 (mit/util/scripts/install.sh).
|
|
||||||
|
scriptversion=2018-03-11.20; # UTC
|
||||||
|
|
||||||
|
# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
||||||
|
# later released in X11R6 (xc/config/util/install.sh) with the
|
||||||
|
# following copyright and license.
|
||||||
#
|
#
|
||||||
# Copyright 1991 by the Massachusetts Institute of Technology
|
# Copyright (C) 1994 X Consortium
|
||||||
#
|
#
|
||||||
# Permission to use, copy, modify, distribute, and sell this software and its
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
# documentation for any purpose is hereby granted without fee, provided that
|
# of this software and associated documentation files (the "Software"), to
|
||||||
# the above copyright notice appear in all copies and that both that
|
# deal in the Software without restriction, including without limitation the
|
||||||
# copyright notice and this permission notice appear in supporting
|
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||||
# documentation, and that the name of M.I.T. not be used in advertising or
|
# sell copies of the Software, and to permit persons to whom the Software is
|
||||||
# publicity pertaining to distribution of the software without specific,
|
# furnished to do so, subject to the following conditions:
|
||||||
# written prior permission. M.I.T. makes no representations about the
|
#
|
||||||
# suitability of this software for any purpose. It is provided "as is"
|
# The above copyright notice and this permission notice shall be included in
|
||||||
# without express or implied warranty.
|
# all copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||||
|
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
|
||||||
|
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
#
|
||||||
|
# Except as contained in this notice, the name of the X Consortium shall not
|
||||||
|
# be used in advertising or otherwise to promote the sale, use or other deal-
|
||||||
|
# ings in this Software without prior written authorization from the X Consor-
|
||||||
|
# tium.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# FSF changes to this file are in the public domain.
|
||||||
#
|
#
|
||||||
# Calling this script install-sh is preferred over install.sh, to prevent
|
# Calling this script install-sh is preferred over install.sh, to prevent
|
||||||
# `make' implicit rules from creating a file called install from it
|
# 'make' implicit rules from creating a file called install from it
|
||||||
# when there is no Makefile.
|
# when there is no Makefile.
|
||||||
#
|
#
|
||||||
# This script is compatible with the BSD install script, but was written
|
# This script is compatible with the BSD install script, but was written
|
||||||
# from scratch. It can only install one file at a time, a restriction
|
# from scratch.
|
||||||
# shared with many OS's install programs.
|
|
||||||
|
|
||||||
|
tab=' '
|
||||||
# set DOITPROG to echo to test this script
|
nl='
|
||||||
|
|
||||||
# Don't use :- since 4.3BSD and earlier shells don't like it.
|
|
||||||
doit="${DOITPROG-}"
|
|
||||||
|
|
||||||
|
|
||||||
# put in absolute paths if you don't have them in your path; or use env. vars.
|
|
||||||
|
|
||||||
mvprog="${MVPROG-mv}"
|
|
||||||
cpprog="${CPPROG-cp}"
|
|
||||||
chmodprog="${CHMODPROG-chmod}"
|
|
||||||
chownprog="${CHOWNPROG-chown}"
|
|
||||||
chgrpprog="${CHGRPPROG-chgrp}"
|
|
||||||
stripprog="${STRIPPROG-strip}"
|
|
||||||
rmprog="${RMPROG-rm}"
|
|
||||||
mkdirprog="${MKDIRPROG-mkdir}"
|
|
||||||
|
|
||||||
transformbasename=""
|
|
||||||
transform_arg=""
|
|
||||||
instcmd="$mvprog"
|
|
||||||
chmodcmd="$chmodprog 0755"
|
|
||||||
chowncmd=""
|
|
||||||
chgrpcmd=""
|
|
||||||
stripcmd=""
|
|
||||||
rmcmd="$rmprog -f"
|
|
||||||
mvcmd="$mvprog"
|
|
||||||
src=""
|
|
||||||
dst=""
|
|
||||||
dir_arg=""
|
|
||||||
|
|
||||||
while [ x"$1" != x ]; do
|
|
||||||
case $1 in
|
|
||||||
-c) instcmd="$cpprog"
|
|
||||||
shift
|
|
||||||
continue;;
|
|
||||||
|
|
||||||
-d) dir_arg=true
|
|
||||||
shift
|
|
||||||
continue;;
|
|
||||||
|
|
||||||
-m) chmodcmd="$chmodprog $2"
|
|
||||||
shift
|
|
||||||
shift
|
|
||||||
continue;;
|
|
||||||
|
|
||||||
-o) chowncmd="$chownprog $2"
|
|
||||||
shift
|
|
||||||
shift
|
|
||||||
continue;;
|
|
||||||
|
|
||||||
-g) chgrpcmd="$chgrpprog $2"
|
|
||||||
shift
|
|
||||||
shift
|
|
||||||
continue;;
|
|
||||||
|
|
||||||
-s) stripcmd="$stripprog"
|
|
||||||
shift
|
|
||||||
continue;;
|
|
||||||
|
|
||||||
-t=*) transformarg=`echo $1 | sed 's/-t=//'`
|
|
||||||
shift
|
|
||||||
continue;;
|
|
||||||
|
|
||||||
-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
|
|
||||||
shift
|
|
||||||
continue;;
|
|
||||||
|
|
||||||
*) if [ x"$src" = x ]
|
|
||||||
then
|
|
||||||
src=$1
|
|
||||||
else
|
|
||||||
# this colon is to work around a 386BSD /bin/sh bug
|
|
||||||
:
|
|
||||||
dst=$1
|
|
||||||
fi
|
|
||||||
shift
|
|
||||||
continue;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ x"$src" = x ]
|
|
||||||
then
|
|
||||||
echo "install: no input file specified"
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
true
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ x"$dir_arg" != x ]; then
|
|
||||||
dst=$src
|
|
||||||
src=""
|
|
||||||
|
|
||||||
if [ -d $dst ]; then
|
|
||||||
instcmd=:
|
|
||||||
chmodcmd=""
|
|
||||||
else
|
|
||||||
instcmd=mkdir
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
|
|
||||||
# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
|
|
||||||
# might cause directories to be created, which would be especially bad
|
|
||||||
# if $src (and thus $dsttmp) contains '*'.
|
|
||||||
|
|
||||||
if [ -f $src -o -d $src ]
|
|
||||||
then
|
|
||||||
true
|
|
||||||
else
|
|
||||||
echo "install: $src does not exist"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ x"$dst" = x ]
|
|
||||||
then
|
|
||||||
echo "install: no destination specified"
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
true
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If destination is a directory, append the input filename; if your system
|
|
||||||
# does not like double slashes in filenames, you may need to add some logic
|
|
||||||
|
|
||||||
if [ -d $dst ]
|
|
||||||
then
|
|
||||||
dst="$dst"/`basename $src`
|
|
||||||
else
|
|
||||||
true
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
## this sed command emulates the dirname command
|
|
||||||
dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
|
|
||||||
|
|
||||||
# Make sure that the destination directory exists.
|
|
||||||
# this part is taken from Noah Friedman's mkinstalldirs script
|
|
||||||
|
|
||||||
# Skip lots of stat calls in the usual case.
|
|
||||||
if [ ! -d "$dstdir" ]; then
|
|
||||||
defaultIFS='
|
|
||||||
'
|
'
|
||||||
IFS="${IFS-${defaultIFS}}"
|
IFS=" $tab$nl"
|
||||||
|
|
||||||
oIFS="${IFS}"
|
# Set DOITPROG to "echo" to test this script.
|
||||||
# Some sh's can't handle IFS=/ for some reason.
|
|
||||||
IFS='%'
|
|
||||||
set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
|
|
||||||
IFS="${oIFS}"
|
|
||||||
|
|
||||||
pathcomp=''
|
doit=${DOITPROG-}
|
||||||
|
doit_exec=${doit:-exec}
|
||||||
|
|
||||||
while [ $# -ne 0 ] ; do
|
# Put in absolute file names if you don't have them in your path;
|
||||||
pathcomp="${pathcomp}${1}"
|
# or use environment vars.
|
||||||
shift
|
|
||||||
|
|
||||||
if [ ! -d "${pathcomp}" ] ;
|
chgrpprog=${CHGRPPROG-chgrp}
|
||||||
then
|
chmodprog=${CHMODPROG-chmod}
|
||||||
$mkdirprog "${pathcomp}"
|
chownprog=${CHOWNPROG-chown}
|
||||||
else
|
cmpprog=${CMPPROG-cmp}
|
||||||
true
|
cpprog=${CPPROG-cp}
|
||||||
fi
|
mkdirprog=${MKDIRPROG-mkdir}
|
||||||
|
mvprog=${MVPROG-mv}
|
||||||
|
rmprog=${RMPROG-rm}
|
||||||
|
stripprog=${STRIPPROG-strip}
|
||||||
|
|
||||||
pathcomp="${pathcomp}/"
|
posix_mkdir=
|
||||||
|
|
||||||
|
# Desired mode of installed file.
|
||||||
|
mode=0755
|
||||||
|
|
||||||
|
chgrpcmd=
|
||||||
|
chmodcmd=$chmodprog
|
||||||
|
chowncmd=
|
||||||
|
mvcmd=$mvprog
|
||||||
|
rmcmd="$rmprog -f"
|
||||||
|
stripcmd=
|
||||||
|
|
||||||
|
src=
|
||||||
|
dst=
|
||||||
|
dir_arg=
|
||||||
|
dst_arg=
|
||||||
|
|
||||||
|
copy_on_change=false
|
||||||
|
is_target_a_directory=possibly
|
||||||
|
|
||||||
|
usage="\
|
||||||
|
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
|
||||||
|
or: $0 [OPTION]... SRCFILES... DIRECTORY
|
||||||
|
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
|
||||||
|
or: $0 [OPTION]... -d DIRECTORIES...
|
||||||
|
|
||||||
|
In the 1st form, copy SRCFILE to DSTFILE.
|
||||||
|
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
|
||||||
|
In the 4th, create DIRECTORIES.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
--help display this help and exit.
|
||||||
|
--version display version info and exit.
|
||||||
|
|
||||||
|
-c (ignored)
|
||||||
|
-C install only if different (preserve the last data modification time)
|
||||||
|
-d create directories instead of installing files.
|
||||||
|
-g GROUP $chgrpprog installed files to GROUP.
|
||||||
|
-m MODE $chmodprog installed files to MODE.
|
||||||
|
-o USER $chownprog installed files to USER.
|
||||||
|
-s $stripprog installed files.
|
||||||
|
-t DIRECTORY install into DIRECTORY.
|
||||||
|
-T report an error if DSTFILE is a directory.
|
||||||
|
|
||||||
|
Environment variables override the default commands:
|
||||||
|
CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
|
||||||
|
RMPROG STRIPPROG
|
||||||
|
"
|
||||||
|
|
||||||
|
while test $# -ne 0; do
|
||||||
|
case $1 in
|
||||||
|
-c) ;;
|
||||||
|
|
||||||
|
-C) copy_on_change=true;;
|
||||||
|
|
||||||
|
-d) dir_arg=true;;
|
||||||
|
|
||||||
|
-g) chgrpcmd="$chgrpprog $2"
|
||||||
|
shift;;
|
||||||
|
|
||||||
|
--help) echo "$usage"; exit $?;;
|
||||||
|
|
||||||
|
-m) mode=$2
|
||||||
|
case $mode in
|
||||||
|
*' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
|
||||||
|
echo "$0: invalid mode: $mode" >&2
|
||||||
|
exit 1;;
|
||||||
|
esac
|
||||||
|
shift;;
|
||||||
|
|
||||||
|
-o) chowncmd="$chownprog $2"
|
||||||
|
shift;;
|
||||||
|
|
||||||
|
-s) stripcmd=$stripprog;;
|
||||||
|
|
||||||
|
-t)
|
||||||
|
is_target_a_directory=always
|
||||||
|
dst_arg=$2
|
||||||
|
# Protect names problematic for 'test' and other utilities.
|
||||||
|
case $dst_arg in
|
||||||
|
-* | [=\(\)!]) dst_arg=./$dst_arg;;
|
||||||
|
esac
|
||||||
|
shift;;
|
||||||
|
|
||||||
|
-T) is_target_a_directory=never;;
|
||||||
|
|
||||||
|
--version) echo "$0 $scriptversion"; exit $?;;
|
||||||
|
|
||||||
|
--) shift
|
||||||
|
break;;
|
||||||
|
|
||||||
|
-*) echo "$0: invalid option: $1" >&2
|
||||||
|
exit 1;;
|
||||||
|
|
||||||
|
*) break;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# We allow the use of options -d and -T together, by making -d
|
||||||
|
# take the precedence; this is for compatibility with GNU install.
|
||||||
|
|
||||||
|
if test -n "$dir_arg"; then
|
||||||
|
if test -n "$dst_arg"; then
|
||||||
|
echo "$0: target directory not allowed when installing a directory." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ x"$dir_arg" != x ]
|
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
|
||||||
then
|
# When -d is used, all remaining arguments are directories to create.
|
||||||
$doit $instcmd $dst &&
|
# When -t is used, the destination is already specified.
|
||||||
|
# Otherwise, the last argument is the destination. Remove it from $@.
|
||||||
|
for arg
|
||||||
|
do
|
||||||
|
if test -n "$dst_arg"; then
|
||||||
|
# $@ is not empty: it contains at least $arg.
|
||||||
|
set fnord "$@" "$dst_arg"
|
||||||
|
shift # fnord
|
||||||
|
fi
|
||||||
|
shift # arg
|
||||||
|
dst_arg=$arg
|
||||||
|
# Protect names problematic for 'test' and other utilities.
|
||||||
|
case $dst_arg in
|
||||||
|
-* | [=\(\)!]) dst_arg=./$dst_arg;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
|
if test $# -eq 0; then
|
||||||
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
|
if test -z "$dir_arg"; then
|
||||||
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
|
echo "$0: no input file specified." >&2
|
||||||
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
|
exit 1
|
||||||
else
|
fi
|
||||||
|
# It's OK to call 'install-sh -d' without argument.
|
||||||
|
# This can happen when creating conditional directories.
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
# If we're going to rename the final executable, determine the name now.
|
if test -z "$dir_arg"; then
|
||||||
|
if test $# -gt 1 || test "$is_target_a_directory" = always; then
|
||||||
|
if test ! -d "$dst_arg"; then
|
||||||
|
echo "$0: $dst_arg: Is not a directory." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
if [ x"$transformarg" = x ]
|
if test -z "$dir_arg"; then
|
||||||
then
|
do_exit='(exit $ret); exit $ret'
|
||||||
dstfile=`basename $dst`
|
trap "ret=129; $do_exit" 1
|
||||||
else
|
trap "ret=130; $do_exit" 2
|
||||||
dstfile=`basename $dst $transformbasename |
|
trap "ret=141; $do_exit" 13
|
||||||
sed $transformarg`$transformbasename
|
trap "ret=143; $do_exit" 15
|
||||||
fi
|
|
||||||
|
|
||||||
# don't allow the sed command to completely eliminate the filename
|
# Set umask so as not to create temps with too-generous modes.
|
||||||
|
# However, 'strip' requires both read and write access to temps.
|
||||||
|
case $mode in
|
||||||
|
# Optimize common cases.
|
||||||
|
*644) cp_umask=133;;
|
||||||
|
*755) cp_umask=22;;
|
||||||
|
|
||||||
if [ x"$dstfile" = x ]
|
*[0-7])
|
||||||
then
|
if test -z "$stripcmd"; then
|
||||||
dstfile=`basename $dst`
|
u_plus_rw=
|
||||||
else
|
else
|
||||||
true
|
u_plus_rw='% 200'
|
||||||
fi
|
fi
|
||||||
|
cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
|
||||||
|
*)
|
||||||
|
if test -z "$stripcmd"; then
|
||||||
|
u_plus_rw=
|
||||||
|
else
|
||||||
|
u_plus_rw=,u+rw
|
||||||
|
fi
|
||||||
|
cp_umask=$mode$u_plus_rw;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
# Make a temp file name in the proper directory.
|
for src
|
||||||
|
do
|
||||||
|
# Protect names problematic for 'test' and other utilities.
|
||||||
|
case $src in
|
||||||
|
-* | [=\(\)!]) src=./$src;;
|
||||||
|
esac
|
||||||
|
|
||||||
dsttmp=$dstdir/#inst.$$#
|
if test -n "$dir_arg"; then
|
||||||
|
dst=$src
|
||||||
|
dstdir=$dst
|
||||||
|
test -d "$dstdir"
|
||||||
|
dstdir_status=$?
|
||||||
|
else
|
||||||
|
|
||||||
# Move or copy the file name to the temp name
|
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
|
||||||
|
# might cause directories to be created, which would be especially bad
|
||||||
|
# if $src (and thus $dsttmp) contains '*'.
|
||||||
|
if test ! -f "$src" && test ! -d "$src"; then
|
||||||
|
echo "$0: $src does not exist." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
$doit $instcmd $src $dsttmp &&
|
if test -z "$dst_arg"; then
|
||||||
|
echo "$0: no destination specified." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
dst=$dst_arg
|
||||||
|
|
||||||
trap "rm -f ${dsttmp}" 0 &&
|
# If destination is a directory, append the input filename.
|
||||||
|
if test -d "$dst"; then
|
||||||
|
if test "$is_target_a_directory" = never; then
|
||||||
|
echo "$0: $dst_arg: Is a directory" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
dstdir=$dst
|
||||||
|
dstbase=`basename "$src"`
|
||||||
|
case $dst in
|
||||||
|
*/) dst=$dst$dstbase;;
|
||||||
|
*) dst=$dst/$dstbase;;
|
||||||
|
esac
|
||||||
|
dstdir_status=0
|
||||||
|
else
|
||||||
|
dstdir=`dirname "$dst"`
|
||||||
|
test -d "$dstdir"
|
||||||
|
dstdir_status=$?
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# and set any options; do chmod last to preserve setuid bits
|
case $dstdir in
|
||||||
|
*/) dstdirslash=$dstdir;;
|
||||||
|
*) dstdirslash=$dstdir/;;
|
||||||
|
esac
|
||||||
|
|
||||||
# If any of these fail, we abort the whole thing. If we want to
|
obsolete_mkdir_used=false
|
||||||
# ignore errors from any of these, just make sure not to ignore
|
|
||||||
# errors from the above "$doit $instcmd $src $dsttmp" command.
|
|
||||||
|
|
||||||
if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
|
if test $dstdir_status != 0; then
|
||||||
if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
|
case $posix_mkdir in
|
||||||
if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
|
'')
|
||||||
if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
|
# Create intermediate dirs using mode 755 as modified by the umask.
|
||||||
|
# This is like FreeBSD 'install' as of 1997-10-28.
|
||||||
|
umask=`umask`
|
||||||
|
case $stripcmd.$umask in
|
||||||
|
# Optimize common cases.
|
||||||
|
*[2367][2367]) mkdir_umask=$umask;;
|
||||||
|
.*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
|
||||||
|
|
||||||
# Now rename the file to the real destination.
|
*[0-7])
|
||||||
|
mkdir_umask=`expr $umask + 22 \
|
||||||
|
- $umask % 100 % 40 + $umask % 20 \
|
||||||
|
- $umask % 10 % 4 + $umask % 2
|
||||||
|
`;;
|
||||||
|
*) mkdir_umask=$umask,go-w;;
|
||||||
|
esac
|
||||||
|
|
||||||
$doit $rmcmd -f $dstdir/$dstfile &&
|
# With -d, create the new directory with the user-specified mode.
|
||||||
$doit $mvcmd $dsttmp $dstdir/$dstfile
|
# Otherwise, rely on $mkdir_umask.
|
||||||
|
if test -n "$dir_arg"; then
|
||||||
|
mkdir_mode=-m$mode
|
||||||
|
else
|
||||||
|
mkdir_mode=
|
||||||
|
fi
|
||||||
|
|
||||||
fi &&
|
posix_mkdir=false
|
||||||
|
case $umask in
|
||||||
|
*[123567][0-7][0-7])
|
||||||
|
# POSIX mkdir -p sets u+wx bits regardless of umask, which
|
||||||
|
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# Note that $RANDOM variable is not portable (e.g. dash); Use it
|
||||||
|
# here however when possible just to lower collision chance.
|
||||||
|
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
|
||||||
|
|
||||||
|
trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
|
||||||
|
|
||||||
exit 0
|
# Because "mkdir -p" follows existing symlinks and we likely work
|
||||||
|
# directly in world-writeable /tmp, make sure that the '$tmpdir'
|
||||||
|
# directory is successfully created first before we actually test
|
||||||
|
# 'mkdir -p' feature.
|
||||||
|
if (umask $mkdir_umask &&
|
||||||
|
$mkdirprog $mkdir_mode "$tmpdir" &&
|
||||||
|
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
|
||||||
|
then
|
||||||
|
if test -z "$dir_arg" || {
|
||||||
|
# Check for POSIX incompatibilities with -m.
|
||||||
|
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
|
||||||
|
# other-writable bit of parent directory when it shouldn't.
|
||||||
|
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
|
||||||
|
test_tmpdir="$tmpdir/a"
|
||||||
|
ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
|
||||||
|
case $ls_ld_tmpdir in
|
||||||
|
d????-?r-*) different_mode=700;;
|
||||||
|
d????-?--*) different_mode=755;;
|
||||||
|
*) false;;
|
||||||
|
esac &&
|
||||||
|
$mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
|
||||||
|
ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
|
||||||
|
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
then posix_mkdir=:
|
||||||
|
fi
|
||||||
|
rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
|
||||||
|
else
|
||||||
|
# Remove any dirs left behind by ancient mkdir implementations.
|
||||||
|
rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
|
||||||
|
fi
|
||||||
|
trap '' 0;;
|
||||||
|
esac;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if
|
||||||
|
$posix_mkdir && (
|
||||||
|
umask $mkdir_umask &&
|
||||||
|
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
|
||||||
|
)
|
||||||
|
then :
|
||||||
|
else
|
||||||
|
|
||||||
|
# The umask is ridiculous, or mkdir does not conform to POSIX,
|
||||||
|
# or it failed possibly due to a race condition. Create the
|
||||||
|
# directory the slow way, step by step, checking for races as we go.
|
||||||
|
|
||||||
|
case $dstdir in
|
||||||
|
/*) prefix='/';;
|
||||||
|
[-=\(\)!]*) prefix='./';;
|
||||||
|
*) prefix='';;
|
||||||
|
esac
|
||||||
|
|
||||||
|
oIFS=$IFS
|
||||||
|
IFS=/
|
||||||
|
set -f
|
||||||
|
set fnord $dstdir
|
||||||
|
shift
|
||||||
|
set +f
|
||||||
|
IFS=$oIFS
|
||||||
|
|
||||||
|
prefixes=
|
||||||
|
|
||||||
|
for d
|
||||||
|
do
|
||||||
|
test X"$d" = X && continue
|
||||||
|
|
||||||
|
prefix=$prefix$d
|
||||||
|
if test -d "$prefix"; then
|
||||||
|
prefixes=
|
||||||
|
else
|
||||||
|
if $posix_mkdir; then
|
||||||
|
(umask=$mkdir_umask &&
|
||||||
|
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
|
||||||
|
# Don't fail if two instances are running concurrently.
|
||||||
|
test -d "$prefix" || exit 1
|
||||||
|
else
|
||||||
|
case $prefix in
|
||||||
|
*\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
|
||||||
|
*) qprefix=$prefix;;
|
||||||
|
esac
|
||||||
|
prefixes="$prefixes '$qprefix'"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
prefix=$prefix/
|
||||||
|
done
|
||||||
|
|
||||||
|
if test -n "$prefixes"; then
|
||||||
|
# Don't fail if two instances are running concurrently.
|
||||||
|
(umask $mkdir_umask &&
|
||||||
|
eval "\$doit_exec \$mkdirprog $prefixes") ||
|
||||||
|
test -d "$dstdir" || exit 1
|
||||||
|
obsolete_mkdir_used=true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test -n "$dir_arg"; then
|
||||||
|
{ test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
|
||||||
|
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
|
||||||
|
{ test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
|
||||||
|
test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
|
||||||
|
else
|
||||||
|
|
||||||
|
# Make a couple of temp file names in the proper directory.
|
||||||
|
dsttmp=${dstdirslash}_inst.$$_
|
||||||
|
rmtmp=${dstdirslash}_rm.$$_
|
||||||
|
|
||||||
|
# Trap to clean up those temp files at exit.
|
||||||
|
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
|
||||||
|
|
||||||
|
# Copy the file name to the temp name.
|
||||||
|
(umask $cp_umask &&
|
||||||
|
{ test -z "$stripcmd" || {
|
||||||
|
# Create $dsttmp read-write so that cp doesn't create it read-only,
|
||||||
|
# which would cause strip to fail.
|
||||||
|
if test -z "$doit"; then
|
||||||
|
: >"$dsttmp" # No need to fork-exec 'touch'.
|
||||||
|
else
|
||||||
|
$doit touch "$dsttmp"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
} &&
|
||||||
|
$doit_exec $cpprog "$src" "$dsttmp") &&
|
||||||
|
|
||||||
|
# and set any options; do chmod last to preserve setuid bits.
|
||||||
|
#
|
||||||
|
# If any of these fail, we abort the whole thing. If we want to
|
||||||
|
# ignore errors from any of these, just make sure not to ignore
|
||||||
|
# errors from the above "$doit $cpprog $src $dsttmp" command.
|
||||||
|
#
|
||||||
|
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
|
||||||
|
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
|
||||||
|
{ test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
|
||||||
|
{ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
|
||||||
|
|
||||||
|
# If -C, don't bother to copy if it wouldn't change the file.
|
||||||
|
if $copy_on_change &&
|
||||||
|
old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
|
||||||
|
new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
|
||||||
|
set -f &&
|
||||||
|
set X $old && old=:$2:$4:$5:$6 &&
|
||||||
|
set X $new && new=:$2:$4:$5:$6 &&
|
||||||
|
set +f &&
|
||||||
|
test "$old" = "$new" &&
|
||||||
|
$cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
|
||||||
|
then
|
||||||
|
rm -f "$dsttmp"
|
||||||
|
else
|
||||||
|
# Rename the file to the real destination.
|
||||||
|
$doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
|
||||||
|
|
||||||
|
# The rename failed, perhaps because mv can't rename something else
|
||||||
|
# to itself, or perhaps because mv is so ancient that it does not
|
||||||
|
# support -f.
|
||||||
|
{
|
||||||
|
# Now remove or move aside any old file at destination location.
|
||||||
|
# We try this two ways since rm can't unlink itself on some
|
||||||
|
# systems and the destination file might be busy for other
|
||||||
|
# reasons. In this case, the final cleanup might fail but the new
|
||||||
|
# file should still install successfully.
|
||||||
|
{
|
||||||
|
test ! -f "$dst" ||
|
||||||
|
$doit $rmcmd -f "$dst" 2>/dev/null ||
|
||||||
|
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
|
||||||
|
{ $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
|
||||||
|
} ||
|
||||||
|
{ echo "$0: cannot unlink or rename $dst" >&2
|
||||||
|
(exit 1); exit 1
|
||||||
|
}
|
||||||
|
} &&
|
||||||
|
|
||||||
|
# Now rename the file to the real destination.
|
||||||
|
$doit $mvcmd "$dsttmp" "$dst"
|
||||||
|
}
|
||||||
|
fi || exit 1
|
||||||
|
|
||||||
|
trap '' 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Local variables:
|
||||||
|
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||||
|
# time-stamp-start: "scriptversion="
|
||||||
|
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||||
|
# time-stamp-time-zone: "UTC0"
|
||||||
|
# time-stamp-end: "; # UTC"
|
||||||
|
# End:
|
||||||
|
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
2001-09-13 GNU <bug-gnu-utils@gnu.org>
|
|
||||||
|
|
||||||
* Version 0.10.40 released.
|
|
||||||
|
|
||||||
313
intl/Makefile.in
313
intl/Makefile.in
|
|
@ -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 <st001906@hrz1.hrz.tu-darmstadt.de>"
|
|
||||||
echo "# and Bruno Haible <haible@clisp.cons.org>."
|
|
||||||
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
intl/dcigettext.c
1259
intl/dcigettext.c
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 <drepper@gnu.ai.mit.edu>, 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 <drepper@gnu.org>, 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
intl/gettext.h
102
intl/gettext.h
|
|
@ -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
intl/gettextP.h
252
intl/gettextP.h
|
|
@ -1,252 +0,0 @@
|
||||||
/* Header describing internals of libintl library.
|
|
||||||
Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
|
|
||||||
Written by Ulrich Drepper <drepper@cygnus.com>, 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);
|
|
||||||
}
|
|
||||||
405
intl/l10nflist.c
405
intl/l10nflist.c
|
|
@ -1,405 +0,0 @@
|
||||||
/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
|
|
||||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 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
intl/loadinfo.h
109
intl/loadinfo.h
|
|
@ -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 <drepper@cygnus.com>, 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 <haible@clisp.cons.org>. */
|
|
||||||
|
|
||||||
#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
|
|
||||||
# bugs@gnu.org.
|
|
||||||
|
|
||||||
# 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
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue