direvent-5.4/ 0000755 0001750 0001750 00000000000 14641012421 013163 5 ustar 00gray gray 0000000 0000000 direvent-5.4/ABOUT-NLS 0000644 0001750 0001750 00000267133 14635340326 014441 0 ustar 00gray gray 0000000 0000000 1 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 free software 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 on translations can contact the appropriate team.
1.1 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. Installers may use special
options at configuration time for changing the default behaviour. The
command:
./configure --disable-nls
will _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' library
and will decide to use it. If not, you may have to to use the
`--with-libintl-prefix' option to tell `configure' where to look for it.
Internationalized packages usually have 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.
1.2 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. If you happen to have the `LC_ALL' or some other
`LC_xxx' environment variables set, you should unset them before
setting `LANG', otherwise the setting of `LANG' will not have the
desired effect. 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.
The locale naming convention of `LL_CC', with `LL' denoting the
language and `CC' denoting the country, is the one use on systems based
on GNU libc. On other systems, some variations of this scheme are
used, such as `LL' or `LL_CC.ENCODING'. You can get the list of
locales supported by your system for your language by running the
command `locale -a | grep '^LL''.
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'.
Special advice for Norwegian users: The language code for Norwegian
bokma*l changed from `no' to `nb' recently (in 2003). During the
transition period, while some message catalogs for this language are
installed under `nb' and some older ones under `no', it's recommended
for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and
older translations are used.
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.
1.3 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://translationproject.org/', in the "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 `coordinator@translationproject.org' 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 skills are praised more than
programming skills, here.
1.4 Available Packages
======================
Languages are not equally supported in all packages. The following
matrix shows the current state of internationalization, as of June
2010. 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 af am an ar as ast az be be@latin bg bn_IN bs ca
+--------------------------------------------------+
a2ps | [] [] |
aegis | |
ant-phone | |
anubis | |
aspell | [] [] |
bash | |
bfd | |
bibshelf | [] |
binutils | |
bison | |
bison-runtime | [] |
bluez-pin | [] [] |
bombono-dvd | |
buzztard | |
cflow | |
clisp | |
coreutils | [] [] |
cpio | |
cppi | |
cpplib | [] |
cryptsetup | |
dfarc | |
dialog | [] [] |
dico | |
diffutils | [] |
dink | |
doodle | |
e2fsprogs | [] |
enscript | [] |
exif | |
fetchmail | [] |
findutils | [] |
flex | [] |
freedink | |
gas | |
gawk | [] [] |
gcal | [] |
gcc | |
gettext-examples | [] [] [] [] |
gettext-runtime | [] [] |
gettext-tools | [] [] |
gip | [] |
gjay | |
gliv | [] |
glunarclock | [] [] |
gnubiff | |
gnucash | [] |
gnuedu | |
gnulib | |
gnunet | |
gnunet-gtk | |
gnutls | |
gold | |
gpe-aerial | |
gpe-beam | |
gpe-bluetooth | |
gpe-calendar | |
gpe-clock | [] |
gpe-conf | |
gpe-contacts | |
gpe-edit | |
gpe-filemanager | |
gpe-go | |
gpe-login | |
gpe-ownerinfo | [] |
gpe-package | |
gpe-sketchbook | |
gpe-su | [] |
gpe-taskmanager | [] |
gpe-timesheet | [] |
gpe-today | [] |
gpe-todo | |
gphoto2 | |
gprof | [] |
gpsdrive | |
gramadoir | |
grep | |
grub | [] [] |
gsasl | |
gss | |
gst-plugins-bad | [] |
gst-plugins-base | [] |
gst-plugins-good | [] |
gst-plugins-ugly | [] |
gstreamer | [] [] [] |
gtick | |
gtkam | [] |
gtkorphan | [] |
gtkspell | [] [] [] |
gutenprint | |
hello | [] |
help2man | |
hylafax | |
idutils | |
indent | [] [] |
iso_15924 | |
iso_3166 | [] [] [] [] [] [] [] |
iso_3166_2 | |
iso_4217 | |
iso_639 | [] [] [] [] |
iso_639_3 | |
jwhois | |
kbd | |
keytouch | [] |
keytouch-editor | |
keytouch-keyboa... | [] |
klavaro | [] |
latrine | |
ld | [] |
leafpad | [] [] |
libc | [] [] |
libexif | () |
libextractor | |
libgnutls | |
libgpewidget | |
libgpg-error | |
libgphoto2 | |
libgphoto2_port | |
libgsasl | |
libiconv | [] |
libidn | |
lifelines | |
liferea | [] [] |
lilypond | |
linkdr | [] |
lordsawar | |
lprng | |
lynx | [] |
m4 | |
mailfromd | |
mailutils | |
make | |
man-db | |
man-db-manpages | |
minicom | |
mkisofs | |
myserver | |
nano | [] [] |
opcodes | |
parted | |
pies | |
popt | |
psmisc | |
pspp | [] |
pwdutils | |
radius | [] |
recode | [] [] |
rosegarden | |
rpm | |
rush | |
sarg | |
screem | |
scrollkeeper | [] [] [] |
sed | [] [] |
sharutils | [] [] |
shishi | |
skencil | |
solfege | |
solfege-manual | |
soundtracker | |
sp | |
sysstat | |
tar | [] |
texinfo | |
tin | |
unicode-han-tra... | |
unicode-transla... | |
util-linux-ng | [] |
vice | |
vmm | |
vorbis-tools | |
wastesedge | |
wdiff | |
wget | [] [] |
wyslij-po | |
xchat | [] [] [] [] |
xdg-user-dirs | [] [] [] [] [] [] [] [] [] |
xkeyboard-config | [] [] |
+--------------------------------------------------+
af am an ar as ast az be be@latin bg bn_IN bs ca
6 0 1 2 3 19 1 10 3 28 3 1 38
crh cs da de el en en_GB en_ZA eo es et eu fa
+-------------------------------------------------+
a2ps | [] [] [] [] [] [] [] |
aegis | [] [] [] |
ant-phone | [] () |
anubis | [] [] |
aspell | [] [] [] [] [] |
bash | [] [] [] |
bfd | [] |
bibshelf | [] [] [] |
binutils | [] |
bison | [] [] |
bison-runtime | [] [] [] [] |
bluez-pin | [] [] [] [] [] [] |
bombono-dvd | [] |
buzztard | [] [] [] |
cflow | [] [] |
clisp | [] [] [] [] |
coreutils | [] [] [] [] |
cpio | |
cppi | |
cpplib | [] [] [] |
cryptsetup | [] |
dfarc | [] [] [] |
dialog | [] [] [] [] [] |
dico | |
diffutils | [] [] [] [] [] [] |
dink | [] [] [] |
doodle | [] |
e2fsprogs | [] [] [] |
enscript | [] [] [] |
exif | () [] [] |
fetchmail | [] [] () [] [] [] |
findutils | [] [] [] |
flex | [] [] |
freedink | [] [] [] |
gas | [] |
gawk | [] [] [] |
gcal | [] |
gcc | [] [] |
gettext-examples | [] [] [] [] |
gettext-runtime | [] [] [] [] |
gettext-tools | [] [] [] |
gip | [] [] [] [] |
gjay | [] |
gliv | [] [] [] |
glunarclock | [] [] |
gnubiff | () |
gnucash | [] () () () () |
gnuedu | [] [] |
gnulib | [] [] |
gnunet | |
gnunet-gtk | [] |
gnutls | [] [] |
gold | [] |
gpe-aerial | [] [] [] [] |
gpe-beam | [] [] [] [] |
gpe-bluetooth | [] [] |
gpe-calendar | [] |
gpe-clock | [] [] [] [] |
gpe-conf | [] [] [] |
gpe-contacts | [] [] [] |
gpe-edit | [] [] |
gpe-filemanager | [] [] [] |
gpe-go | [] [] [] [] |
gpe-login | [] [] |
gpe-ownerinfo | [] [] [] [] |
gpe-package | [] [] [] |
gpe-sketchbook | [] [] [] [] |
gpe-su | [] [] [] [] |
gpe-taskmanager | [] [] [] [] |
gpe-timesheet | [] [] [] [] |
gpe-today | [] [] [] [] |
gpe-todo | [] [] [] |
gphoto2 | [] [] () [] [] [] |
gprof | [] [] [] |
gpsdrive | [] [] [] |
gramadoir | [] [] [] |
grep | [] |
grub | [] [] |
gsasl | [] |
gss | |
gst-plugins-bad | [] [] [] [] [] |
gst-plugins-base | [] [] [] [] [] |
gst-plugins-good | [] [] [] [] [] [] |
gst-plugins-ugly | [] [] [] [] [] [] |
gstreamer | [] [] [] [] [] |
gtick | [] () [] |
gtkam | [] [] () [] [] |
gtkorphan | [] [] [] [] |
gtkspell | [] [] [] [] [] [] [] |
gutenprint | [] [] [] |
hello | [] [] [] [] |
help2man | [] |
hylafax | [] [] |
idutils | [] [] |
indent | [] [] [] [] [] [] [] |
iso_15924 | [] () [] [] |
iso_3166 | [] [] [] [] () [] [] [] () |
iso_3166_2 | () |
iso_4217 | [] [] [] () [] [] |
iso_639 | [] [] [] [] () [] [] |
iso_639_3 | [] |
jwhois | [] |
kbd | [] [] [] [] [] |
keytouch | [] [] |
keytouch-editor | [] [] |
keytouch-keyboa... | [] |
klavaro | [] [] [] [] |
latrine | [] () |
ld | [] [] |
leafpad | [] [] [] [] [] [] |
libc | [] [] [] [] |
libexif | [] [] () |
libextractor | |
libgnutls | [] |
libgpewidget | [] [] |
libgpg-error | [] [] |
libgphoto2 | [] () |
libgphoto2_port | [] () [] |
libgsasl | |
libiconv | [] [] [] [] [] |
libidn | [] [] [] |
lifelines | [] () |
liferea | [] [] [] [] [] |
lilypond | [] [] [] |
linkdr | [] [] [] |
lordsawar | [] |
lprng | |
lynx | [] [] [] [] |
m4 | [] [] [] [] |
mailfromd | |
mailutils | [] |
make | [] [] [] |
man-db | |
man-db-manpages | |
minicom | [] [] [] [] |
mkisofs | |
myserver | |
nano | [] [] [] |
opcodes | [] [] |
parted | [] [] |
pies | |
popt | [] [] [] [] [] |
psmisc | [] [] [] |
pspp | [] |
pwdutils | [] |
radius | [] |
recode | [] [] [] [] [] [] |
rosegarden | () () () |
rpm | [] [] [] |
rush | |
sarg | |
screem | |
scrollkeeper | [] [] [] [] [] |
sed | [] [] [] [] [] [] |
sharutils | [] [] [] [] |
shishi | |
skencil | [] () [] |
solfege | [] [] [] |
solfege-manual | [] [] |
soundtracker | [] [] [] |
sp | [] |
sysstat | [] [] [] |
tar | [] [] [] [] |
texinfo | [] [] [] |
tin | [] [] |
unicode-han-tra... | |
unicode-transla... | |
util-linux-ng | [] [] [] [] |
vice | () () |
vmm | [] |
vorbis-tools | [] [] |
wastesedge | [] |
wdiff | [] [] |
wget | [] [] [] |
wyslij-po | |
xchat | [] [] [] [] [] |
xdg-user-dirs | [] [] [] [] [] [] [] [] [] |
xkeyboard-config | [] [] [] [] [] [] |
+-------------------------------------------------+
crh cs da de el en en_GB en_ZA eo es et eu fa
5 64 105 117 18 1 8 0 28 89 18 19 0
fi fr ga gl gu he hi hr hu hy id is it ja ka kn
+----------------------------------------------------+
a2ps | [] [] [] [] |
aegis | [] [] |
ant-phone | [] [] |
anubis | [] [] [] [] |
aspell | [] [] [] [] |
bash | [] [] [] [] |
bfd | [] [] [] |
bibshelf | [] [] [] [] [] |
binutils | [] [] [] |
bison | [] [] [] [] |
bison-runtime | [] [] [] [] [] [] |
bluez-pin | [] [] [] [] [] [] [] [] |
bombono-dvd | [] |
buzztard | [] |
cflow | [] [] [] |
clisp | [] |
coreutils | [] [] [] [] [] |
cpio | [] [] [] [] |
cppi | [] [] |
cpplib | [] [] [] |
cryptsetup | [] [] [] |
dfarc | [] [] [] |
dialog | [] [] [] [] [] [] [] |
dico | |
diffutils | [] [] [] [] [] [] [] [] [] |
dink | [] |
doodle | [] [] |
e2fsprogs | [] [] |
enscript | [] [] [] [] |
exif | [] [] [] [] [] [] |
fetchmail | [] [] [] [] |
findutils | [] [] [] [] [] [] |
flex | [] [] [] |
freedink | [] [] [] |
gas | [] [] |
gawk | [] [] [] [] () [] |
gcal | [] |
gcc | [] |
gettext-examples | [] [] [] [] [] [] [] |
gettext-runtime | [] [] [] [] [] [] |
gettext-tools | [] [] [] [] |
gip | [] [] [] [] [] [] |
gjay | [] |
gliv | [] () |
glunarclock | [] [] [] [] |
gnubiff | () [] () |
gnucash | () () () () () [] |
gnuedu | [] [] |
gnulib | [] [] [] [] [] [] |
gnunet | |
gnunet-gtk | [] |
gnutls | [] [] |
gold | [] [] |
gpe-aerial | [] [] [] |
gpe-beam | [] [] [] [] |
gpe-bluetooth | [] [] [] [] |
gpe-calendar | [] [] |
gpe-clock | [] [] [] [] [] |
gpe-conf | [] [] [] [] |
gpe-contacts | [] [] [] [] |
gpe-edit | [] [] [] |
gpe-filemanager | [] [] [] [] |
gpe-go | [] [] [] [] [] |
gpe-login | [] [] [] |
gpe-ownerinfo | [] [] [] [] [] |
gpe-package | [] [] [] |
gpe-sketchbook | [] [] [] [] |
gpe-su | [] [] [] [] [] [] |
gpe-taskmanager | [] [] [] [] [] |
gpe-timesheet | [] [] [] [] [] |
gpe-today | [] [] [] [] [] [] [] |
gpe-todo | [] [] [] |
gphoto2 | [] [] [] [] [] [] |
gprof | [] [] [] [] |
gpsdrive | [] [] [] |
gramadoir | [] [] [] |
grep | [] [] |
grub | [] [] [] [] |
gsasl | [] [] [] [] [] |
gss | [] [] [] [] [] |
gst-plugins-bad | [] [] [] [] [] [] |
gst-plugins-base | [] [] [] [] [] [] |
gst-plugins-good | [] [] [] [] [] [] |
gst-plugins-ugly | [] [] [] [] [] [] |
gstreamer | [] [] [] [] [] |
gtick | [] [] [] [] [] |
gtkam | [] [] [] [] [] |
gtkorphan | [] [] [] |
gtkspell | [] [] [] [] [] [] [] [] [] |
gutenprint | [] [] [] [] |
hello | [] [] [] |
help2man | [] [] |
hylafax | [] |
idutils | [] [] [] [] [] [] |
indent | [] [] [] [] [] [] [] [] |
iso_15924 | [] () [] [] |
iso_3166 | [] () [] [] [] [] [] [] [] [] [] [] |
iso_3166_2 | () [] [] [] |
iso_4217 | [] () [] [] [] [] |
iso_639 | [] () [] [] [] [] [] [] [] |
iso_639_3 | () [] [] |
jwhois | [] [] [] [] [] |
kbd | [] [] |
keytouch | [] [] [] [] [] [] |
keytouch-editor | [] [] [] [] [] |
keytouch-keyboa... | [] [] [] [] [] |
klavaro | [] [] |
latrine | [] [] [] |
ld | [] [] [] [] |
leafpad | [] [] [] [] [] [] [] () |
libc | [] [] [] [] [] |
libexif | [] |
libextractor | |
libgnutls | [] [] |
libgpewidget | [] [] [] [] |
libgpg-error | [] [] |
libgphoto2 | [] [] [] |
libgphoto2_port | [] [] [] |
libgsasl | [] [] [] [] [] |
libiconv | [] [] [] [] [] [] |
libidn | [] [] [] [] |
lifelines | () |
liferea | [] [] [] [] |
lilypond | [] [] |
linkdr | [] [] [] [] [] |
lordsawar | |
lprng | [] |
lynx | [] [] [] [] [] |
m4 | [] [] [] [] [] [] |
mailfromd | |
mailutils | [] [] |
make | [] [] [] [] [] [] [] [] [] |
man-db | [] [] |
man-db-manpages | [] |
minicom | [] [] [] [] [] |
mkisofs | [] [] [] [] |
myserver | |
nano | [] [] [] [] [] [] |
opcodes | [] [] [] [] |
parted | [] [] [] [] |
pies | |
popt | [] [] [] [] [] [] [] [] [] |
psmisc | [] [] [] |
pspp | |
pwdutils | [] [] |
radius | [] [] |
recode | [] [] [] [] [] [] [] [] |
rosegarden | () () () () () |
rpm | [] [] |
rush | |
sarg | [] |
screem | [] [] |
scrollkeeper | [] [] [] [] |
sed | [] [] [] [] [] [] [] [] |
sharutils | [] [] [] [] [] [] [] |
shishi | [] |
skencil | [] |
solfege | [] [] [] [] |
solfege-manual | [] [] |
soundtracker | [] [] |
sp | [] () |
sysstat | [] [] [] [] [] |
tar | [] [] [] [] [] [] [] |
texinfo | [] [] [] [] |
tin | [] |
unicode-han-tra... | |
unicode-transla... | [] [] |
util-linux-ng | [] [] [] [] [] [] |
vice | () () () |
vmm | [] |
vorbis-tools | [] |
wastesedge | () () |
wdiff | [] |
wget | [] [] [] [] [] [] [] [] |
wyslij-po | [] [] [] |
xchat | [] [] [] [] [] [] [] [] [] |
xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] |
xkeyboard-config | [] [] [] [] [] |
+----------------------------------------------------+
fi fr ga gl gu he hi hr hu hy id is it ja ka kn
105 121 53 20 4 8 3 5 53 2 120 5 84 67 0 4
ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne
+-----------------------------------------------+
a2ps | [] |
aegis | |
ant-phone | |
anubis | [] [] |
aspell | [] |
bash | |
bfd | |
bibshelf | [] [] |
binutils | |
bison | [] |
bison-runtime | [] [] [] [] [] |
bluez-pin | [] [] [] [] [] |
bombono-dvd | |
buzztard | |
cflow | |
clisp | |
coreutils | [] |
cpio | |
cppi | |
cpplib | |
cryptsetup | |
dfarc | [] |
dialog | [] [] [] [] [] |
dico | |
diffutils | [] [] |
dink | |
doodle | |
e2fsprogs | |
enscript | |
exif | [] |
fetchmail | |
findutils | |
flex | |
freedink | [] |
gas | |
gawk | |
gcal | |
gcc | |
gettext-examples | [] [] [] [] |
gettext-runtime | [] |
gettext-tools | [] |
gip | [] [] |
gjay | |
gliv | |
glunarclock | [] |
gnubiff | |
gnucash | () () () () |
gnuedu | |
gnulib | |
gnunet | |
gnunet-gtk | |
gnutls | [] |
gold | |
gpe-aerial | [] |
gpe-beam | [] |
gpe-bluetooth | [] [] |
gpe-calendar | [] |
gpe-clock | [] [] [] [] [] |
gpe-conf | [] [] |
gpe-contacts | [] [] |
gpe-edit | [] |
gpe-filemanager | [] [] |
gpe-go | [] [] [] |
gpe-login | [] |
gpe-ownerinfo | [] [] |
gpe-package | [] [] |
gpe-sketchbook | [] [] |
gpe-su | [] [] [] [] [] [] |
gpe-taskmanager | [] [] [] [] [] [] |
gpe-timesheet | [] [] |
gpe-today | [] [] [] [] |
gpe-todo | [] [] |
gphoto2 | |
gprof | [] |
gpsdrive | |
gramadoir | |
grep | |
grub | |
gsasl | |
gss | |
gst-plugins-bad | [] [] [] [] |
gst-plugins-base | [] [] |
gst-plugins-good | [] [] |
gst-plugins-ugly | [] [] [] [] [] |
gstreamer | |
gtick | |
gtkam | [] |
gtkorphan | [] [] |
gtkspell | [] [] [] [] [] [] [] |
gutenprint | |
hello | [] [] [] |
help2man | |
hylafax | |
idutils | |
indent | |
iso_15924 | [] [] |
iso_3166 | [] [] () [] [] [] [] [] |
iso_3166_2 | |
iso_4217 | [] [] |
iso_639 | [] [] |
iso_639_3 | [] |
jwhois | [] |
kbd | |
keytouch | [] |
keytouch-editor | [] |
keytouch-keyboa... | [] |
klavaro | [] |
latrine | [] |
ld | |
leafpad | [] [] [] |
libc | [] |
libexif | |
libextractor | |
libgnutls | [] |
libgpewidget | [] [] |
libgpg-error | |
libgphoto2 | |
libgphoto2_port | |
libgsasl | |
libiconv | |
libidn | |
lifelines | |
liferea | |
lilypond | |
linkdr | |
lordsawar | |
lprng | |
lynx | |
m4 | |
mailfromd | |
mailutils | |
make | [] |
man-db | |
man-db-manpages | |
minicom | [] |
mkisofs | |
myserver | |
nano | [] [] |
opcodes | |
parted | |
pies | |
popt | [] [] [] |
psmisc | |
pspp | |
pwdutils | |
radius | |
recode | |
rosegarden | |
rpm | |
rush | |
sarg | |
screem | |
scrollkeeper | [] [] |
sed | |
sharutils | |
shishi | |
skencil | |
solfege | [] |
solfege-manual | |
soundtracker | |
sp | |
sysstat | [] |
tar | [] |
texinfo | [] |
tin | |
unicode-han-tra... | |
unicode-transla... | |
util-linux-ng | |
vice | |
vmm | |
vorbis-tools | |
wastesedge | |
wdiff | |
wget | [] |
wyslij-po | |
xchat | [] [] [] |
xdg-user-dirs | [] [] [] [] [] [] [] [] |
xkeyboard-config | [] [] [] |
+-----------------------------------------------+
ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne
20 5 10 1 13 48 4 2 2 4 24 10 20 3 1
nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr
+---------------------------------------------------+
a2ps | [] [] [] [] [] [] [] [] |
aegis | [] [] [] |
ant-phone | [] [] |
anubis | [] [] [] |
aspell | [] [] [] [] [] |
bash | [] [] |
bfd | [] |
bibshelf | [] [] |
binutils | [] [] |
bison | [] [] [] |
bison-runtime | [] [] [] [] [] [] [] |
bluez-pin | [] [] [] [] [] [] [] [] |
bombono-dvd | [] () |
buzztard | [] [] |
cflow | [] |
clisp | [] [] |
coreutils | [] [] [] [] [] [] |
cpio | [] [] [] |
cppi | [] |
cpplib | [] |
cryptsetup | [] |
dfarc | [] |
dialog | [] [] [] [] |
dico | [] |
diffutils | [] [] [] [] [] [] |
dink | () |
doodle | [] [] |
e2fsprogs | [] [] |
enscript | [] [] [] [] [] |
exif | [] [] [] () [] |
fetchmail | [] [] [] [] |
findutils | [] [] [] [] [] |
flex | [] [] [] [] [] |
freedink | [] [] |
gas | |
gawk | [] [] [] [] |
gcal | |
gcc | [] |
gettext-examples | [] [] [] [] [] [] [] [] |
gettext-runtime | [] [] [] [] [] [] [] [] [] |
gettext-tools | [] [] [] [] [] [] |
gip | [] [] [] [] [] |
gjay | |
gliv | [] [] [] [] [] [] |
glunarclock | [] [] [] [] [] |
gnubiff | [] () |
gnucash | [] () () () |
gnuedu | [] |
gnulib | [] [] [] [] |
gnunet | |
gnunet-gtk | |
gnutls | [] [] |
gold | |
gpe-aerial | [] [] [] [] [] [] [] |
gpe-beam | [] [] [] [] [] [] [] |
gpe-bluetooth | [] [] |
gpe-calendar | [] [] [] [] |
gpe-clock | [] [] [] [] [] [] [] [] |
gpe-conf | [] [] [] [] [] [] [] |
gpe-contacts | [] [] [] [] [] |
gpe-edit | [] [] [] |
gpe-filemanager | [] [] [] |
gpe-go | [] [] [] [] [] [] [] [] |
gpe-login | [] [] |
gpe-ownerinfo | [] [] [] [] [] [] [] [] |
gpe-package | [] [] |
gpe-sketchbook | [] [] [] [] [] [] [] |
gpe-su | [] [] [] [] [] [] [] [] |
gpe-taskmanager | [] [] [] [] [] [] [] [] |
gpe-timesheet | [] [] [] [] [] [] [] [] |
gpe-today | [] [] [] [] [] [] [] [] |
gpe-todo | [] [] [] [] [] |
gphoto2 | [] [] [] [] [] [] [] [] |
gprof | [] [] [] |
gpsdrive | [] [] |
gramadoir | [] [] |
grep | [] [] [] [] |
grub | [] [] [] |
gsasl | [] [] [] [] |
gss | [] [] [] |
gst-plugins-bad | [] [] [] [] [] [] |
gst-plugins-base | [] [] [] [] [] |
gst-plugins-good | [] [] [] [] [] |
gst-plugins-ugly | [] [] [] [] [] [] |
gstreamer | [] [] [] [] [] |
gtick | [] [] [] |
gtkam | [] [] [] [] [] [] |
gtkorphan | [] |
gtkspell | [] [] [] [] [] [] [] [] [] [] |
gutenprint | [] [] |
hello | [] [] [] [] |
help2man | [] [] |
hylafax | [] |
idutils | [] [] [] [] [] |
indent | [] [] [] [] [] [] [] |
iso_15924 | [] [] [] [] |
iso_3166 | [] [] [] [] [] () [] [] [] [] [] [] [] [] |
iso_3166_2 | [] [] [] |
iso_4217 | [] [] [] [] [] [] [] [] |
iso_639 | [] [] [] [] [] [] [] [] [] |
iso_639_3 | [] [] |
jwhois | [] [] [] [] |
kbd | [] [] [] |
keytouch | [] [] [] |
keytouch-editor | [] [] [] |
keytouch-keyboa... | [] [] [] |
klavaro | [] [] |
latrine | [] [] |
ld | |
leafpad | [] [] [] [] [] [] [] [] [] |
libc | [] [] [] [] |
libexif | [] [] () [] |
libextractor | |
libgnutls | [] [] |
libgpewidget | [] [] [] |
libgpg-error | [] [] |
libgphoto2 | [] [] |
libgphoto2_port | [] [] [] [] [] |
libgsasl | [] [] [] [] [] |
libiconv | [] [] [] [] [] |
libidn | [] [] |
lifelines | [] [] |
liferea | [] [] [] [] [] () () [] |
lilypond | [] |
linkdr | [] [] [] |
lordsawar | |
lprng | [] |
lynx | [] [] [] |
m4 | [] [] [] [] [] |
mailfromd | [] |
mailutils | [] |
make | [] [] [] [] |
man-db | [] [] [] |
man-db-manpages | [] [] [] |
minicom | [] [] [] [] |
mkisofs | [] [] [] |
myserver | |
nano | [] [] [] [] |
opcodes | [] [] |
parted | [] [] [] [] |
pies | [] |
popt | [] [] [] [] |
psmisc | [] [] [] |
pspp | [] [] |
pwdutils | [] |
radius | [] [] [] |
recode | [] [] [] [] [] [] [] [] |
rosegarden | () () |
rpm | [] [] [] |
rush | [] [] |
sarg | |
screem | |
scrollkeeper | [] [] [] [] [] [] [] [] |
sed | [] [] [] [] [] [] [] [] [] |
sharutils | [] [] [] [] |
shishi | [] |
skencil | [] [] |
solfege | [] [] [] [] |
solfege-manual | [] [] [] |
soundtracker | [] |
sp | |
sysstat | [] [] [] [] |
tar | [] [] [] [] |
texinfo | [] [] [] [] |
tin | [] |
unicode-han-tra... | |
unicode-transla... | |
util-linux-ng | [] [] [] [] [] |
vice | [] |
vmm | [] |
vorbis-tools | [] [] |
wastesedge | [] |
wdiff | [] [] |
wget | [] [] [] [] [] [] [] |
wyslij-po | [] [] [] |
xchat | [] [] [] [] [] [] [] [] [] |
xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] [] |
xkeyboard-config | [] [] [] |
+---------------------------------------------------+
nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr
135 10 4 7 105 1 29 62 47 91 3 54 46 9 37
sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW
+---------------------------------------------------+
a2ps | [] [] [] [] [] | 27
aegis | [] | 9
ant-phone | [] [] [] [] | 9
anubis | [] [] [] [] | 15
aspell | [] [] [] | 20
bash | [] [] [] | 12
bfd | [] | 6
bibshelf | [] [] [] | 16
binutils | [] [] | 8
bison | [] [] | 12
bison-runtime | [] [] [] [] [] [] | 29
bluez-pin | [] [] [] [] [] [] [] [] | 37
bombono-dvd | [] | 4
buzztard | [] | 7
cflow | [] [] [] | 9
clisp | | 10
coreutils | [] [] [] [] | 22
cpio | [] [] [] [] [] [] | 13
cppi | [] [] | 5
cpplib | [] [] [] [] [] [] | 14
cryptsetup | [] [] | 7
dfarc | [] | 9
dialog | [] [] [] [] [] [] [] | 30
dico | [] | 2
diffutils | [] [] [] [] [] [] | 30
dink | | 4
doodle | [] [] | 7
e2fsprogs | [] [] [] | 11
enscript | [] [] [] [] | 17
exif | [] [] [] | 16
fetchmail | [] [] [] | 17
findutils | [] [] [] [] [] | 20
flex | [] [] [] [] | 15
freedink | [] | 10
gas | [] | 4
gawk | [] [] [] [] | 18
gcal | [] [] | 5
gcc | [] [] [] | 7
gettext-examples | [] [] [] [] [] [] [] | 34
gettext-runtime | [] [] [] [] [] [] [] | 29
gettext-tools | [] [] [] [] [] [] | 22
gip | [] [] [] [] | 22
gjay | [] | 3
gliv | [] [] [] | 14
glunarclock | [] [] [] [] [] | 19
gnubiff | [] [] | 4
gnucash | () [] () [] () | 10
gnuedu | [] [] | 7
gnulib | [] [] [] [] | 16
gnunet | [] | 1
gnunet-gtk | [] [] [] | 5
gnutls | [] [] [] | 10
gold | [] | 4
gpe-aerial | [] [] [] | 18
gpe-beam | [] [] [] | 19
gpe-bluetooth | [] [] [] | 13
gpe-calendar | [] [] [] [] | 12
gpe-clock | [] [] [] [] [] | 28
gpe-conf | [] [] [] [] | 20
gpe-contacts | [] [] [] | 17
gpe-edit | [] [] [] | 12
gpe-filemanager | [] [] [] [] | 16
gpe-go | [] [] [] [] [] | 25
gpe-login | [] [] [] | 11
gpe-ownerinfo | [] [] [] [] [] | 25
gpe-package | [] [] [] | 13
gpe-sketchbook | [] [] [] | 20
gpe-su | [] [] [] [] [] | 30
gpe-taskmanager | [] [] [] [] [] | 29
gpe-timesheet | [] [] [] [] [] | 25
gpe-today | [] [] [] [] [] [] | 30
gpe-todo | [] [] [] [] | 17
gphoto2 | [] [] [] [] [] | 24
gprof | [] [] [] | 15
gpsdrive | [] [] [] | 11
gramadoir | [] [] [] | 11
grep | [] [] [] | 10
grub | [] [] [] | 14
gsasl | [] [] [] [] | 14
gss | [] [] [] | 11
gst-plugins-bad | [] [] [] [] | 26
gst-plugins-base | [] [] [] [] [] | 24
gst-plugins-good | [] [] [] [] | 24
gst-plugins-ugly | [] [] [] [] [] | 29
gstreamer | [] [] [] [] | 22
gtick | [] [] [] | 13
gtkam | [] [] [] | 20
gtkorphan | [] [] [] | 14
gtkspell | [] [] [] [] [] [] [] [] [] | 45
gutenprint | [] | 10
hello | [] [] [] [] [] [] | 21
help2man | [] [] | 7
hylafax | [] | 5
idutils | [] [] [] [] | 17
indent | [] [] [] [] [] [] | 30
iso_15924 | () [] () [] [] | 16
iso_3166 | [] [] () [] [] () [] [] [] () | 53
iso_3166_2 | () [] () [] | 9
iso_4217 | [] () [] [] () [] [] | 26
iso_639 | [] [] [] () [] () [] [] [] [] | 38
iso_639_3 | [] () | 8
jwhois | [] [] [] [] [] | 16
kbd | [] [] [] [] [] | 15
keytouch | [] [] [] | 16
keytouch-editor | [] [] [] | 14
keytouch-keyboa... | [] [] [] | 14
klavaro | [] | 11
latrine | [] [] [] | 10
ld | [] [] [] [] | 11
leafpad | [] [] [] [] [] [] | 33
libc | [] [] [] [] [] | 21
libexif | [] () | 7
libextractor | [] | 1
libgnutls | [] [] [] | 9
libgpewidget | [] [] [] | 14
libgpg-error | [] [] [] | 9
libgphoto2 | [] [] | 8
libgphoto2_port | [] [] [] [] | 14
libgsasl | [] [] [] | 13
libiconv | [] [] [] [] | 21
libidn | () [] [] | 11
lifelines | [] | 4
liferea | [] [] [] | 21
lilypond | [] | 7
linkdr | [] [] [] [] [] | 17
lordsawar | | 1
lprng | [] | 3
lynx | [] [] [] [] | 17
m4 | [] [] [] [] | 19
mailfromd | [] [] | 3
mailutils | [] | 5
make | [] [] [] [] | 21
man-db | [] [] [] | 8
man-db-manpages | | 4
minicom | [] [] | 16
mkisofs | [] [] | 9
myserver | | 0
nano | [] [] [] [] | 21
opcodes | [] [] [] | 11
parted | [] [] [] [] [] | 15
pies | [] [] | 3
popt | [] [] [] [] [] [] | 27
psmisc | [] [] | 11
pspp | | 4
pwdutils | [] [] | 6
radius | [] [] | 9
recode | [] [] [] [] | 28
rosegarden | () | 0
rpm | [] [] [] | 11
rush | [] [] | 4
sarg | | 1
screem | [] | 3
scrollkeeper | [] [] [] [] [] | 27
sed | [] [] [] [] [] | 30
sharutils | [] [] [] [] [] | 22
shishi | [] | 3
skencil | [] [] | 7
solfege | [] [] [] [] | 16
solfege-manual | [] | 8
soundtracker | [] [] [] | 9
sp | [] | 3
sysstat | [] [] | 15
tar | [] [] [] [] [] [] | 23
texinfo | [] [] [] [] [] | 17
tin | | 4
unicode-han-tra... | | 0
unicode-transla... | | 2
util-linux-ng | [] [] [] [] | 20
vice | () () | 1
vmm | [] | 4
vorbis-tools | [] | 6
wastesedge | | 2
wdiff | [] [] | 7
wget | [] [] [] [] [] | 26
wyslij-po | [] [] | 8
xchat | [] [] [] [] [] [] | 36
xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] | 63
xkeyboard-config | [] [] [] | 22
+---------------------------------------------------+
85 teams sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW
178 domains 119 1 3 3 0 10 65 51 155 17 98 7 41 2618
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 June 2010 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://translationproject.org/extra/matrix.html'.
1.5 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
the 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
`coordinator@translationproject.org' to make the `.pot' files available
to the translation teams.
direvent-5.4/Makefile.am 0000644 0001750 0001750 00000002045 14636566575 015254 0 ustar 00gray gray 0000000 0000000 # This file is part of GNU direvent -*- autoconf -*-
# Copyright (C) 2012-2024 Sergey Poznyakoff
#
# GNU direvent 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 3, or (at your option)
# any later version.
#
# GNU direvent 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 GNU direvent. If not, see .
ACLOCAL_AMFLAGS = -I am -I grecs/am
SUBDIRS= grecs src tests doc po
.PHONY: ChangeLog
ChangeLog:
$(AM_V_GEN)if test -d .git; then \
git log --pretty='format:%ct %an <%ae>%n%n%s%n%n%b%n' | \
awk -f $(top_builddir)/grecs/build-aux/git2chg.awk > ChangeLog; \
fi
EXTRA_DIST = build-aux/config.rpath
direvent-5.4/doc/ 0000755 0001750 0001750 00000000000 14641012421 013730 5 ustar 00gray gray 0000000 0000000 direvent-5.4/doc/fdl.texi 0000644 0001750 0001750 00000050714 14635525561 015420 0 ustar 00gray gray 0000000 0000000 @setfilename fdl.info
@cindex FDL, GNU Free Documentation License
@center Version 1.2, November 2002
@display
Copyright @copyright{} 2000, 2001, 2002, 2014 Free Software Foundation,
Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@end display
@enumerate 0
@item
PREAMBLE
The purpose of this License is to make a manual, textbook, or other
functional and useful document @dfn{free} in the sense of freedom: to
assure everyone the effective freedom to copy and redistribute it,
with or without modifying it, either commercially or noncommercially.
Secondarily, this License preserves for the author and publisher a way
to get credit for their work, while not being considered responsible
for modifications made by others.
This License is a kind of ``copyleft'', which means that derivative
works of the document must themselves be free in the same sense. It
complements the GNU General Public License, which is a copyleft
license designed for free software.
We have designed this License in order to use it for manuals for free
software, because free software needs free documentation: a free
program should come with manuals providing the same freedoms that the
software does. But this License is not limited to software manuals;
it can be used for any textual work, regardless of subject matter or
whether it is published as a printed book. We recommend this License
principally for works whose purpose is instruction or reference.
@item
APPLICABILITY AND DEFINITIONS
This License applies to any manual or other work, in any medium, that
contains a notice placed by the copyright holder saying it can be
distributed under the terms of this License. Such a notice grants a
world-wide, royalty-free license, unlimited in duration, to use that
work under the conditions stated herein. The ``Document'', below,
refers to any such manual or work. Any member of the public is a
licensee, and is addressed as ``you''. You accept the license if you
copy, modify or distribute the work in a way requiring permission
under copyright law.
A ``Modified Version'' of the Document means any work containing the
Document or a portion of it, either copied verbatim, or with
modifications and/or translated into another language.
A ``Secondary Section'' is a named appendix or a front-matter section
of the Document that deals exclusively with the relationship of the
publishers or authors of the Document to the Document's overall
subject (or to related matters) and contains nothing that could fall
directly within that overall subject. (Thus, if the Document is in
part a textbook of mathematics, a Secondary Section may not explain
any mathematics.) The relationship could be a matter of historical
connection with the subject or with related matters, or of legal,
commercial, philosophical, ethical or political position regarding
them.
The ``Invariant Sections'' are certain Secondary Sections whose titles
are designated, as being those of Invariant Sections, in the notice
that says that the Document is released under this License. If a
section does not fit the above definition of Secondary then it is not
allowed to be designated as Invariant. The Document may contain zero
Invariant Sections. If the Document does not identify any Invariant
Sections then there are none.
The ``Cover Texts'' are certain short passages of text that are listed,
as Front-Cover Texts or Back-Cover Texts, in the notice that says that
the Document is released under this License. A Front-Cover Text may
be at most 5 words, and a Back-Cover Text may be at most 25 words.
A ``Transparent'' copy of the Document means a machine-readable copy,
represented in a format whose specification is available to the
general public, that is suitable for revising the document
straightforwardly with generic text editors or (for images composed of
pixels) generic paint programs or (for drawings) some widely available
drawing editor, and that is suitable for input to text formatters or
for automatic translation to a variety of formats suitable for input
to text formatters. A copy made in an otherwise Transparent file
format whose markup, or absence of markup, has been arranged to thwart
or discourage subsequent modification by readers is not Transparent.
An image format is not Transparent if used for any substantial amount
of text. A copy that is not ``Transparent'' is called ``Opaque''.
Examples of suitable formats for Transparent copies include plain
@sc{ascii} without markup, Texinfo input format, La@TeX{} input
format, @acronym{SGML} or @acronym{XML} using a publicly available
@acronym{DTD}, and standard-conforming simple @acronym{HTML},
PostScript or @acronym{PDF} designed for human modification. Examples
of transparent image formats include @acronym{PNG}, @acronym{XCF} and
@acronym{JPG}. Opaque formats include proprietary formats that can be
read and edited only by proprietary word processors, @acronym{SGML} or
@acronym{XML} for which the @acronym{DTD} and/or processing tools are
not generally available, and the machine-generated @acronym{HTML},
PostScript or @acronym{PDF} produced by some word processors for
output purposes only.
The ``Title Page'' means, for a printed book, the title page itself,
plus such following pages as are needed to hold, legibly, the material
this License requires to appear in the title page. For works in
formats which do not have any title page as such, ``Title Page'' means
the text near the most prominent appearance of the work's title,
preceding the beginning of the body of the text.
A section ``Entitled XYZ'' means a named subunit of the Document whose
title either is precisely XYZ or contains XYZ in parentheses following
text that translates XYZ in another language. (Here XYZ stands for a
specific section name mentioned below, such as ``Acknowledgements'',
``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title''
of such a section when you modify the Document means that it remains a
section ``Entitled XYZ'' according to this definition.
The Document may include Warranty Disclaimers next to the notice which
states that this License applies to the Document. These Warranty
Disclaimers are considered to be included by reference in this
License, but only as regards disclaiming warranties: any other
implication that these Warranty Disclaimers may have is void and has
no effect on the meaning of this License.
@item
VERBATIM COPYING
You may copy and distribute the Document in any medium, either
commercially or noncommercially, provided that this License, the
copyright notices, and the license notice saying this License applies
to the Document are reproduced in all copies, and that you add no other
conditions whatsoever to those of this License. You may not use
technical measures to obstruct or control the reading or further
copying of the copies you make or distribute. However, you may accept
compensation in exchange for copies. If you distribute a large enough
number of copies you must also follow the conditions in section 3.
You may also lend copies, under the same conditions stated above, and
you may publicly display copies.
@item
COPYING IN QUANTITY
If you publish printed copies (or copies in media that commonly have
printed covers) of the Document, numbering more than 100, and the
Document's license notice requires Cover Texts, you must enclose the
copies in covers that carry, clearly and legibly, all these Cover
Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
the back cover. Both covers must also clearly and legibly identify
you as the publisher of these copies. The front cover must present
the full title with all words of the title equally prominent and
visible. You may add other material on the covers in addition.
Copying with changes limited to the covers, as long as they preserve
the title of the Document and satisfy these conditions, can be treated
as verbatim copying in other respects.
If the required texts for either cover are too voluminous to fit
legibly, you should put the first ones listed (as many as fit
reasonably) on the actual cover, and continue the rest onto adjacent
pages.
If you publish or distribute Opaque copies of the Document numbering
more than 100, you must either include a machine-readable Transparent
copy along with each Opaque copy, or state in or with each Opaque copy
a computer-network location from which the general network-using
public has access to download using public-standard network protocols
a complete Transparent copy of the Document, free of added material.
If you use the latter option, you must take reasonably prudent steps,
when you begin distribution of Opaque copies in quantity, to ensure
that this Transparent copy will remain thus accessible at the stated
location until at least one year after the last time you distribute an
Opaque copy (directly or through your agents or retailers) of that
edition to the public.
It is requested, but not required, that you contact the authors of the
Document well before redistributing any large number of copies, to give
them a chance to provide you with an updated version of the Document.
@item
MODIFICATIONS
You may copy and distribute a Modified Version of the Document under
the conditions of sections 2 and 3 above, provided that you release
the Modified Version under precisely this License, with the Modified
Version filling the role of the Document, thus licensing distribution
and modification of the Modified Version to whoever possesses a copy
of it. In addition, you must do these things in the Modified Version:
@enumerate A
@item
Use in the Title Page (and on the covers, if any) a title distinct
from that of the Document, and from those of previous versions
(which should, if there were any, be listed in the History section
of the Document). You may use the same title as a previous version
if the original publisher of that version gives permission.
@item
List on the Title Page, as authors, one or more persons or entities
responsible for authorship of the modifications in the Modified
Version, together with at least five of the principal authors of the
Document (all of its principal authors, if it has fewer than five),
unless they release you from this requirement.
@item
State on the Title page the name of the publisher of the
Modified Version, as the publisher.
@item
Preserve all the copyright notices of the Document.
@item
Add an appropriate copyright notice for your modifications
adjacent to the other copyright notices.
@item
Include, immediately after the copyright notices, a license notice
giving the public permission to use the Modified Version under the
terms of this License, in the form shown in the Addendum below.
@item
Preserve in that license notice the full lists of Invariant Sections
and required Cover Texts given in the Document's license notice.
@item
Include an unaltered copy of this License.
@item
Preserve the section Entitled ``History'', Preserve its Title, and add
to it an item stating at least the title, year, new authors, and
publisher of the Modified Version as given on the Title Page. If
there is no section Entitled ``History'' in the Document, create one
stating the title, year, authors, and publisher of the Document as
given on its Title Page, then add an item describing the Modified
Version as stated in the previous sentence.
@item
Preserve the network location, if any, given in the Document for
public access to a Transparent copy of the Document, and likewise
the network locations given in the Document for previous versions
it was based on. These may be placed in the ``History'' section.
You may omit a network location for a work that was published at
least four years before the Document itself, or if the original
publisher of the version it refers to gives permission.
@item
For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
the Title of the section, and preserve in the section all the
substance and tone of each of the contributor acknowledgements and/or
dedications given therein.
@item
Preserve all the Invariant Sections of the Document,
unaltered in their text and in their titles. Section numbers
or the equivalent are not considered part of the section titles.
@item
Delete any section Entitled ``Endorsements''. Such a section
may not be included in the Modified Version.
@item
Do not retitle any existing section to be Entitled ``Endorsements'' or
to conflict in title with any Invariant Section.
@item
Preserve any Warranty Disclaimers.
@end enumerate
If the Modified Version includes new front-matter sections or
appendices that qualify as Secondary Sections and contain no material
copied from the Document, you may at your option designate some or all
of these sections as invariant. To do this, add their titles to the
list of Invariant Sections in the Modified Version's license notice.
These titles must be distinct from any other section titles.
You may add a section Entitled ``Endorsements'', provided it contains
nothing but endorsements of your Modified Version by various
parties---for example, statements of peer review or that the text has
been approved by an organization as the authoritative definition of a
standard.
You may add a passage of up to five words as a Front-Cover Text, and a
passage of up to 25 words as a Back-Cover Text, to the end of the list
of Cover Texts in the Modified Version. Only one passage of
Front-Cover Text and one of Back-Cover Text may be added by (or
through arrangements made by) any one entity. If the Document already
includes a cover text for the same cover, previously added by you or
by arrangement made by the same entity you are acting on behalf of,
you may not add another; but you may replace the old one, on explicit
permission from the previous publisher that added the old one.
The author(s) and publisher(s) of the Document do not by this License
give permission to use their names for publicity for or to assert or
imply endorsement of any Modified Version.
@item
COMBINING DOCUMENTS
You may combine the Document with other documents released under this
License, under the terms defined in section 4 above for modified
versions, provided that you include in the combination all of the
Invariant Sections of all of the original documents, unmodified, and
list them all as Invariant Sections of your combined work in its
license notice, and that you preserve all their Warranty Disclaimers.
The combined work need only contain one copy of this License, and
multiple identical Invariant Sections may be replaced with a single
copy. If there are multiple Invariant Sections with the same name but
different contents, make the title of each such section unique by
adding at the end of it, in parentheses, the name of the original
author or publisher of that section if known, or else a unique number.
Make the same adjustment to the section titles in the list of
Invariant Sections in the license notice of the combined work.
In the combination, you must combine any sections Entitled ``History''
in the various original documents, forming one section Entitled
``History''; likewise combine any sections Entitled ``Acknowledgements'',
and any sections Entitled ``Dedications''. You must delete all
sections Entitled ``Endorsements.''
@item
COLLECTIONS OF DOCUMENTS
You may make a collection consisting of the Document and other documents
released under this License, and replace the individual copies of this
License in the various documents with a single copy that is included in
the collection, provided that you follow the rules of this License for
verbatim copying of each of the documents in all other respects.
You may extract a single document from such a collection, and distribute
it individually under this License, provided you insert a copy of this
License into the extracted document, and follow this License in all
other respects regarding verbatim copying of that document.
@item
AGGREGATION WITH INDEPENDENT WORKS
A compilation of the Document or its derivatives with other separate
and independent documents or works, in or on a volume of a storage or
distribution medium, is called an ``aggregate'' if the copyright
resulting from the compilation is not used to limit the legal rights
of the compilation's users beyond what the individual works permit.
When the Document is included an aggregate, this License does not
apply to the other works in the aggregate which are not themselves
derivative works of the Document.
If the Cover Text requirement of section 3 is applicable to these
copies of the Document, then if the Document is less than one half of
the entire aggregate, the Document's Cover Texts may be placed on
covers that bracket the Document within the aggregate, or the
electronic equivalent of covers if the Document is in electronic form.
Otherwise they must appear on printed covers that bracket the whole
aggregate.
@item
TRANSLATION
Translation is considered a kind of modification, so you may
distribute translations of the Document under the terms of section 4.
Replacing Invariant Sections with translations requires special
permission from their copyright holders, but you may include
translations of some or all Invariant Sections in addition to the
original versions of these Invariant Sections. You may include a
translation of this License, and all the license notices in the
Document, and any Warranty Disclaimers, provided that you also include
the original English version of this License and the original versions
of those notices and disclaimers. In case of a disagreement between
the translation and the original version of this License or a notice
or disclaimer, the original version will prevail.
If a section in the Document is Entitled ``Acknowledgements'',
``Dedications'', or ``History'', the requirement (section 4) to Preserve
its Title (section 1) will typically require changing the actual
title.
@item
TERMINATION
You may not copy, modify, sublicense, or distribute the Document except
as expressly provided for under this License. Any other attempt to
copy, modify, sublicense or distribute the Document is void, and will
automatically terminate your rights under this License. However,
parties who have received copies, or rights, from you under this
License will not have their licenses terminated so long as such
parties remain in full compliance.
@item
FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions
of the GNU Free Documentation License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns. See
@uref{http://www.gnu.org/copyleft/}.
Each version of the License is given a distinguishing version number.
If the Document specifies that a particular numbered version of this
License ``or any later version'' applies to it, you have the option of
following the terms and conditions either of that specified version or
of any later version that has been published (not as a draft) by the
Free Software Foundation. If the Document does not specify a version
number of this License, you may choose any version ever published (not
as a draft) by the Free Software Foundation.
@end enumerate
@page
@appendixsec ADDENDUM: How to use this License for your documents
To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and
license notices just after the title page:
@smallexample
@group
Copyright (C) @var{year} @var{your name}.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
Texts. A copy of the license is included in the section entitled ``GNU
Free Documentation License''.
@end group
@end smallexample
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
replace the ``with...Texts.'' line with this:
@smallexample
@group
with the Invariant Sections being @var{list their titles}, with
the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
being @var{list}.
@end group
@end smallexample
If you have Invariant Sections without Cover Texts, or some other
combination of the three, merge those two alternatives to suit the
situation.
If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of
free software license, such as the GNU General Public License,
to permit their use in free software.
@c Local Variables:
@c ispell-local-pdict: "ispell-dict"
@c End:
direvent-5.4/doc/gendocs.pl 0000644 0001750 0001750 00000026240 14636566574 015746 0 ustar 00gray gray 0000000 0000000 # This file is part of GNU direvent.
# Copyright (C) 2020-2024 Sergey Poznyakoff
#
# GNU direvent 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 3, or (at your option)
# any later version.
#
# GNU direvent 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 GNU direvent. If not, see .
use strict;
use warnings;
use Getopt::Long qw(:config gnu_getopt no_ignore_case);
use File::Basename;
use File::Spec;
use File::Path qw(make_path);
use Pod::Usage;
my $dirname = '.';
my $pkgname;
my $srcname;
my $output_name;
my @includes;
GetOptions("h" => sub {
pod2usage(-message => "$0: generate docs",
-exitstatus => 0);
},
"help" => sub {
pod2usage(-exitstatus => 0, -verbose => 2);
},
"usage" => sub {
pod2usage(-exitstatus => 0, -verbose => 0);
},
'source|s=s' => \$srcname,
'directory|C=s' => \$dirname,
'output|o=s' => \$output_name,
'include|I=s@' => \@includes
) or exit(1);
$pkgname = shift @ARGV or pod2usage(-exitstatus => 1, -verbose => 0);
$srcname //= "${pkgname}.texi";
my $template_name = shift @ARGV or pod2usage(-exitstatus => 1, -verbose => 0);
unless (-d $dirname) {
make_path($dirname);
}
unless ($output_name) {
$output_name = File::Spec->catfile($dirname, (fileparse($template_name, qr/\.[^.]*/))[0]);
}
if (@includes) {
@includes = map { '-I '.$_} @includes;
# FIXME: Not used yet
}
sub template_scan {
my $file = shift;
open(FH, '<', $file) or die "can't open $file: $!\n";
my $line = 0;
while () {
chomp;
++$line;
s{ \$ ((?:BASE)?FILE|SIZE) \( ([a-z_]+) \) }{
eval { Gendocs->instance($2, $pkgname, $srcname) };
if ($@) {
if ($@ =~ m{Can't locate object method "new"}) {
die "$file:$line: unknown format: $2\n";
} else {
die $@;
}
}
}gex;
}
close FH
}
sub template_expand {
my ($infile, $outfile) = @_;
open(IFH, '<', $infile) or die "can't open $infile: $!\n";
open(OFH, '>', $outfile) or die "can't open $outfile: $!\n";
while () {
chomp;
s{ \$ ((?:BASE)?FILE|SIZE) \( ([a-z_]+) \) }{
if ($1 eq 'FILE') {
Gendocs->instance($2)->output;
} elsif ($1 eq 'BASEFILE') {
basename(Gendocs->instance($2)->output);
} else {
Gendocs->instance($2)->size;
}
}gex;
print OFH "$_\n";
}
}
template_scan $template_name;
Gendocs->generate();
template_expand($template_name, $output_name);
Gendocs->sweep();
package Gendocs;
use strict;
use warnings;
my %registry;
sub generate {
my ($class) = @_;
my @keys = keys %registry;
foreach my $k (@keys) {
$registry{$k}->build();
$registry{$k}->mark();
}
}
sub sweep {
my ($class) = @_;
my @keys = keys %registry;
foreach my $k (@keys) {
unless ($registry{$k}->has_mark) {
$registry{$k}->remove;
delete $registry{$k};
}
}
}
sub new {
my ($class, $pkgname, $name) = @_;
unless (exists($registry{$class})){
$registry{$class} = bless { pkgname => $pkgname, input => $name }, $class;
}
return $registry{$class}
}
sub instance {
my ($class, $fmt, @args) = @_;
my $subclass = "Gendocs::".ucfirst($fmt);
unless (exists($registry{$subclass})) {
$registry{$subclass} = $subclass->new(@args);
}
return $registry{$subclass};
}
sub runcom {
my $self = shift;
system @_;
if ($? == -1) {
die "failed to execute $_[0]: $!";
} elsif ($? & 127) {
die sprintf("$_[0] died with signal %d\n", $? & 127);
} elsif ($? >> 8) {
warn sprintf("$_[0] exited with value %d\n", $? >> 8);
}
}
sub mark { shift->{mark} = 1 }
sub has_mark { shift->{mark} }
sub remove {
my ($self) = @_;
if ($self->{output}) {
unlink $self->{output};
delete $self->{output};
}
}
sub size {
my ($self) = @_;
my $s = (stat($self->output))[7];
if ($s > 1048576) {
$s = int($s / 1048576) . 'M';
} elsif ($s > 1024) {
$s = int($s / 1024) . 'K';
}
return $s;
}
sub pkgname { shift->{pkgname} }
sub input { shift->{input} }
sub output { shift->{output} }
package Gendocs::Makeinfo;
use strict;
use warnings;
use base 'Gendocs';
sub new {
my $class = shift;
my $self = $class->SUPER::new(@_);
$self->{makeinfo} = $ENV{'MAKEINFO'} || 'makeinfo';
return $self;
}
package Gendocs::Info;
use strict;
use warnings;
use base 'Gendocs::Makeinfo';
sub build {
my ($self) = @_;
unless ($self->{output}) {
my $output = File::Spec->catfile($dirname, $self->pkgname . '.info');
print "Generating info file: " . $self->input . " -> $output\n";
$self->runcom("$self->{makeinfo} -o $output " . $self->input);
$self->{output} = $output;
}
return $self->{output};
}
package Gendocs::Info_gz;
use strict;
use warnings;
use base 'Gendocs';
sub build {
my ($self) = @_;
unless ($self->{output}) {
my $input = Gendocs->instance('info', $self->pkgname, $self->input)->build();
my $output = "$input.gz";
print "Compressing info file: $input -> $output\n";
$self->runcom("gzip -f -9 -c $input > $output");
$self->{output} = $output;
}
return $self->{output};
}
package Gendocs::Ascii;
use strict;
use warnings;
use base 'Gendocs::Makeinfo';
sub build {
my ($self) = @_;
unless ($self->{output}) {
my $output = File::Spec->catfile($dirname, $self->pkgname . '.txt');
print "Generating ascii file: " . $self->input . " -> $output\n";
$self->runcom("$self->{makeinfo} -o $output --no-split --no-headers " . $self->input);
$self->{output} = $output;
}
return $self->{output};
}
package Gendocs::Ascii_gz;
use strict;
use warnings;
use base 'Gendocs';
sub build {
my ($self) = @_;
unless ($self->{output}) {
my $input = Gendocs->instance('ascii', $self->pkgname, $self->input)->build();
my $output = "$input.gz";
print "Compressing ascii file: $input -> $output\n";
$self->runcom("gzip -f -9 -c $input > $output");
$self->{output} = $output;
}
return $self->{output};
}
package Gendocs::Texinfo_gz;
use strict;
use warnings;
use base 'Gendocs';
sub build {
my ($self) = @_;
unless ($self->{output}) {
my $output = File::Spec->catfile($dirname, $self->pkgname . '.tar.gz');
print "Creating compressed sources: $output\n";
$self->runcom("tar czfh $output *.texinfo *.texi *.txi *.eps 2>/dev/null || /bin/true");
$self->{output} = $output;
}
return $self->{output};
}
package Gendocs::Dvi;
use strict;
use warnings;
use base 'Gendocs';
use File::Temp qw(tempdir);
sub new {
my $class = shift;
my $self = $class->SUPER::new(@_);
$ENV{TEXI2DVI_BUILD_DIRECTORY} = tempdir(CLEANUP => 1);
$self->{texi2dvi} = $ENV{'TEXI2DVI'} || 'texi2dvi --build=tidy -t @finalout';
return $self;
}
sub build {
my ($self) = @_;
unless ($self->{output}) {
my $output = File::Spec->catfile($dirname, $self->pkgname . '.dvi');
my $cmd = "$self->{texi2dvi} -o $output $self->{input}";
print "Creating dvi: $cmd\n";
$self->runcom($cmd);
$self->{output} = $output;
}
return $self->{output};
}
package Gendocs::Dvi_gz;
use strict;
use warnings;
use base 'Gendocs';
sub build {
my ($self) = @_;
unless ($self->{output}) {
my $input = Gendocs->instance('dvi', $self->pkgname, $self->input)->build();
my $output = "$input.gz";
print "Compressing dvi file: $input -> $output\n";
$self->runcom("gzip -f -9 -c $input > $output");
$self->{output} = $output;
}
return $self->{output};
}
package Gendocs::Pdf;
use strict;
use warnings;
use base 'Gendocs::Dvi';
sub build {
my ($self) = @_;
unless ($self->{output}) {
my $output = File::Spec->catfile($dirname, $self->pkgname . '.pdf');
my $cmd = "$self->{texi2dvi} -o $output --pdf $self->{input}";
print "Creating pdf: $cmd\n";
$self->runcom($cmd);
$self->{output} = $output;
}
return $self->{output};
}
__END__
=head1 NAME
gendocs.pl - generate documentation in various formats
=head1 SYNOPSIS
B
[B<-C> I]
[B<-s> I]
[B<-o> I]
[B<-I> I]
[B<--directory=>I]
[B<--include=>I]
[B<--output=>I]
[B<--source=>I]
I I
B B<-h> | B<--help> | B<--usage>
=head1 DESCRIPTION
Generates documentation for the I in various formats. I
is a template file for the index page. When processing I the
following I inform B about the desired documentation
formats and are expanded on output:
=over 4
=item B<$FILE(I)>
Full pathname of the documentation file in format I.
=item B<$BASEFILE(I)>
Base name of the documentation file for format I.
=item B<$SIZE(I)>
Size of the documentation file in format I. Proper size suffix
(B or B) is appended, as needed.
=back
The file is processed twice. On the first pass, the program collects the
mentioned Is. Then the requested files are generated. On the
second pass, the macros are replaced with the actual values and the output
index file is generated. The name of the index file can be supplied using
the B<-o> (B<--output>) option. If it is not given, the name is obtained
by removing last suffix (a substring beginning with a dot and containing
one or more characters, excepting dots) from the I argument.
Unless the B<-C> (B<--directory>) option is given, the output will be
generated in the current working directory. If the B<-C> option is
given, all output files, including index file, will be generated in
the supplied directory.
The following output formats are supported:
=over 4
=item B
Monolithic info file.
=item B
Monolithic info file, compressed with B
=item B
Monolithic ASCII file.
=item B
Monolithic ASCII file, compressed with B
=item B
A tar archive with the Texinfo documentation sources, compressed with B.
=item B
TeX B file.
=item B
TeX B file, compressed with B
=item B
A B file.
=back
=head1 OPTIONS
=over 4
=item B<-C>, B<--directory=>I
Create all output files in the directory I.
=item B<-s>, B<--source=>I
Name of the main Texinfo source file. By default F.texi> is
used.
=item B<-o>, B<--output=>I
Name of the output index file. By default it is constructed by removing
the last filename suffix from I. E.g. F produces
F.
=item B<-I>, B<--include=>I
Name of the directory with Texinfo include files. This option is not
actually used. It is reserved for future use.
=back
=head1 ENVIRONMENT
The following environment variables affect the behavior of B:
=over 4
=item B
Name and initial options of the B program.
=item B
Name and initial options of the B program. The default is
F.
=item B
Used by F. Colon-separated list of Texinfo input directories.
=back
=cut
direvent-5.4/doc/direvent.conf.5 0000644 0001750 0001750 00000045750 14636566574 016630 0 ustar 00gray gray 0000000 0000000 .\" GNU direvent - directory content watcher daemon -*- nroff -*-
.\" Copyright (C) 2012-2024 Sergey Poznyakoff
.\"
.\" GNU direvent 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 3 of the License, or (at your
.\" option) any later version.
.\"
.\" GNU direvent 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 direvent. If not, see .
.TH DIREVENT.CONF 5 "June 25, 2024" "DIREVENT" "Direvent User Reference"
.SH NAME
direvent.conf \- configuration file for
.BR direvent (8).
.SH DESCRIPTION
The configuration file consists of statements and comments.
.PP
There are three classes of lexical tokens: keywords, values, and
separators. Blanks, tabs, newlines and comments, collectively called
\fIwhite space\fR are ignored except as they serve to separate
tokens. Some white space is required to separate otherwise adjacent
keywords and values.
.SH COMMENTS
Comments may appear anywhere where white space may appear in the
configuration file. There are two kinds of comments:
single-line and multi-line comments. Single-line comments start
with
.B #
or
.B //
and continue to the end of the line:
.sp
.RS 4
.nf
# This is a comment
// This too is a comment
.fi
.RE
.PP
\fIMulti-line\fB or \fIC-style\fR comments start with the two
characters
.B /*
(slash, star) and continue until the first occurrence of
.B */
(star, slash).
.PP
Multi-line comments cannot be nested. However, single-line comments
may well appear within multi-line ones.
.SS "Pragmatic Comments"
Pragmatic comments are similar to the usual single-line comments,
except that they cause some changes in the way the configuration is
parsed. Pragmatic comments begin with a
.B #
sign and end with the next physical newline character.
.TP
.BI "#include <" "FILE" >
.PD 0
.TP
.BI "#include " "FILE"
.PD
Include the contents of the file \fIFILE\fR. If \fIFILE\fR is an
absolute file name, the named file is included. An error message will
be issued if it does not exist.
If \fIFILE\fR contains wildcard characters (\fB*\fR, \fB[\fR,
\fB]\fR, or \fB?\fR), it is interpreted as a shell globbing pattern and
all files matching that pattern are included, in lexicographical
order. If no matching files are found, the directive is replaced with
an empty line.
Otherwise, the form with angle brackets searches for file in the
include search path, while the second one looks for it in the
current working directory first, and, if not found there, in the
include search path. If the file is not found, an error message will
be issued.
The order of directories is as follows. First, \fBdirevent\fR scans
any directories given with \fB\-I\fR options, in the same order as
given on the command line, and then the directories in the standard
include search path. The latter is defined at compile time and can be
inspected in the output of the \fB\-\-help\fR option.
.TP
.BI "#include_once <" "FILE" >
.PD 0
.TP
.BR "#include_once " "FILE"
.PD
Same as \fB#include\fR, except that, if the \fIFILE\fR (or any of the
files it expands to) has already been included, it will not be included again.
.TP
.BI "#line " "num"
.PD 0
.TP
.BI "#line " "num" " \(dq" "FILE" "\(dq"
.PD
This line causes the parser to believe, for purposes of error
diagnostics, that the line number of the next source line
is given by \fInum\fR and the current input file is named by
\fIFILE\fR. If the latter is absent, the remembered file name
does not change.
.TP
.BI "# " "num" " \(dq" "FILE" "\(dq"
This is a special form of the \fB#line\fR statement, understood for
compatibility with the C preprocessor.
.SH STATEMENTS
.SS "Simple statement"
A \fIsimple statement\fR consists of a keyword and value
separated by any amount of whitespace. Simple statement is terminated
with a semicolon (\fB;\fR).
.PP
The following is a simple statement:
.sp
.RS 4
.nf
pidfile /var/run/direvent.pid;
.RE
.fi
.PP
See below for a list of valid simple statements.
.PP
A \fIvalue\fR can be one of the following:
.TP
.I number
A number is a sequence of decimal digits.
.TP
.I boolean
A boolean value is one of the following: \fByes\fR, \fBtrue\fR,
\fBt\fR or \fB1\fR, meaning \fItrue\fR, and \fBno\fR,
\fBfalse\fR, \fBnil\fR, \fB0\fR meaning \fIfalse\fR.
.TP
.I unquoted string
An unquoted string may contain letters, digits, and any of the
following characters: \fB_\fR, \fB\-\fR, \fB.\fR, \fB/\fR,
\fB@\fR, \fB*\fR, \fB:\fR.
.TP
.I quoted string
A quoted string is any sequence of characters enclosed in
double-quotes (\fB\(dq\fR). A backslash appearing within a quoted
string introduces an \fIescape sequence\fR, which is replaced
with a single character according to the following rules:
.sp
.nf
.ta 8n 18n 42n
.ul
Sequence Expansion ASCII
\fB\\\\\fR \fB\\\fR 134
\fB\\"\fR \fB"\fR 042
\fB\\a\fR audible bell 007
\fB\\b\fR backspace 010
\fB\\f\fR form-feed 014
\fB\\n\fR new line 012
\fB\\r\fR carriage return 015
\fB\\t\fR horizontal tabulation 011
\fB\\v\fR vertical tabulation 013
.fi
In addition, the sequence \fB\\\fInewline\fR is removed from
the string. This allows to split long strings over several
physical lines, e.g.:
.sp
.nf
.in +4
"a long string may be\\
split over several lines"
.in
.fi
.sp
If the character following a backslash is not one of those specified
above, the backslash is ignored and a warning is issued.
.TP
.I Here-document
A \fIhere-document\fR is a special construct that allows to introduce
strings of text containing embedded newlines.
The
.BI "<<" "word"
construct instructs the parser to read all the following lines up to
the line containing only \fIword\fR, with possible trailing blanks.
Any lines thus read are concatenated together into a single string.
For example:
.sp
.nf
.in +4
<
.br
.ad
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
.\" Local variables:
.\" eval: (add-hook 'write-file-hooks 'time-stamp)
.\" time-stamp-start: ".TH [A-Z_][A-Z0-9_.\\-]* [0-9] \""
.\" time-stamp-format: "%:B %:d, %:y"
.\" time-stamp-end: "\""
.\" time-stamp-line-limit: 20
.\" end:
direvent-5.4/doc/stamp-vti 0000644 0001750 0001750 00000000131 14641011322 015571 0 ustar 00gray gray 0000000 0000000 @set UPDATED 25 June 2024
@set UPDATED-MONTH June 2024
@set EDITION 5.4
@set VERSION 5.4
direvent-5.4/doc/Makefile.am 0000644 0001750 0001750 00000002512 14636566574 016017 0 ustar 00gray gray 0000000 0000000 # This file is part of GNU direvent
# Copyright (C) 2012-2024 Sergey Poznyakoff
#
# GNU direvent 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 3, or (at your option)
# any later version.
#
# GNU direvent 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 GNU direvent. If not, see .
info_TEXINFOS=direvent.texi
direvent_TEXINFOS=\
fdl.texi
dist_man_MANS=direvent.8 direvent.conf.5
EXTRA_DIST = \
gendocs.pl\
otherdoc.texi.in\
webdoc.init
clean-local:
@rm -rf manual
GENDOCS = perl gendocs.pl
.PHONY: manual
manual:
rm -rf manual
TEXINPUTS=$(srcdir):$(top_srcdir)/build-aux:$(TEXINPUTS) \
MAKEINFO="$(MAKEINFO) $(MAKEINFOFLAGS) $(AM_MAKEINFOFLAGS)" \
$(GENDOCS) -C manual -o otherdoc.texi $(PACKAGE) otherdoc.texi.in
$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -DWEBDOC \
--html --init-file=webdoc.init $(info_TEXINFOS) -o manual
manual.tar.bz2: manual
tar cfj manual.tar.bz2 manual
man-tar: manual.tar.bz2
direvent-5.4/doc/direvent.8 0000644 0001750 0001750 00000036345 14636566574 015707 0 ustar 00gray gray 0000000 0000000 .\" GNU direvent - directory content watcher daemon -*- nroff -*-
.\" Copyright (C) 2012-2024 Sergey Poznyakoff
.\"
.\" GNU direvent 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 3 of the License, or (at your
.\" option) any later version.
.\"
.\" GNU direvent 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 direvent. If not, see .
.TH DIREVENT 8 "June 25, 2024" "DIREVENT" "Direvent User Reference"
.SH NAME
direvent \- directory event monitor
.SH SYNOPSIS
\fBdirevent\fR [\fB\-HVdfht\fR] [\fB\-F\fR \fINAME\fR]\
[\fB\-P\fR \fIFILE\fR]\
[\fB\-l\fR \fIPRIO\fR]\
[\fB\-I\fR \fIDIR\fR]\
[\fB\-T\fR \fICOMMAND\fR]\
[\fB\-\-debug\fR]\
[\fB\-\-facility\fR=\fINAME\fR]\
[\fB\-\-foreground\fB]\
[\fB\-\-include=\fIDIR\fR]\
[\fB\-\-lint\fR]\
[\fB\-\-pidfile\fR=\fIFILE\fR]\
[\fB\-\-self\-test\fR=\fICOMMAND\fR]\
[\fB\-\-user\fR=\fINAME\fR]\
[\fBCONFIG\fR]
.B direvent \-h
.br
.B direvent \-\-help
.B direvent \-H
.br
.B direvent \-\-config\-help
.B direvent \-\-usage
.B direvent \-V
.br
.B direvent \-\-version
.SH DESCRIPTION
.B GNU Direvent
monitors a set of directories on the file system and reacts when
a file system event occurs in any of them. Directories and events
to monitor are specified in the configuration file. When an event
occurs the utility reacts by invoking an external command configured
for that event.
.PP
The following
.B generic
events can be monitored by the program:
.TP
.B create
A file was created.
.TP
.B delete
A file was deleted.
.TP
.B write
A file was written to.
.TP
.B change
A file was modified and closed. This event is supported on GNU/Linux,
FreeBSD, and NetBSD.
.TP
.B attrib
File attributes have changed. This includes changes in the file
ownership, mode, link count, etc.
.PP
Depending on the interface provided by the underlying operating system
.B direvent
can trace various
.B system-dependent
events, which may offer a better resolution. These events are
described in the section
.B SYSTEM DEPENDENCIES
below.
.PP
A
.B watcher
is a configuration entity within
.B direvent
which associates a set of directories with a set of events and
instructs the program to run a specified external command when
any of these events occur in any of these directories. This
external command (called a \fBhandler\fR) can obtain information
about the event that triggered its execution from the environment
variables, or from its command line (see the \fBHANDLER ENVIRONMENT\fR
section below).
.PP
Watchers are declared in the program configuration file
.BR direvent.conf ,
located in the system configuration directory (normally \fB/etc\fR).
.PP
An alternative configuration file can be used, by supplying its pathname
as the command line argument (\fICONFIG\fR parameter in the \fBSYNOPSIS\fR
section above).
.SH OPTIONS
.TP
.BR \-d ", " \-\-debug
Increase debug verbosity level.
.TP
\fB\-F\fR, \fB\-\-facility=\fIFACILITY\fR
Log under this syslog facility. Allowed values for \fIFACILITY\fR are
a decimal number or any of the following symbolic names:
.BR auth ,
.BR authpriv ,
.BR cron ,
.BR daemon ,
.BR ftp ,
.BR local0 " through " local7 ,
.BR lpr ,
.BR mail ,
.BR news ,
.BR user ,
and
.BR uucp .
The option \fB\-F 0\fR directs logging to the standard error.
.TP
.BR \-f ", " \-\-foreground
Run in the foreground.
.TP
\fB\-I\fR, \fB\-\-include-directory=\fIDIR\fR
Add \fIDIR\fR to the include search path. When looking for a file to
be included in the \fB#include\fR (\fB#include_once\fR) statement,
\fBdirevent\fR scans first the directories given with \fB\-I\fR
options (in the same order as given on the command line), and then the
directories in the standard include search path. The latter is
defined at compile time and can be inspected in the output of the
\fB\-\-help\fR option.
.TP
\fB\-l\fR \fIPRIO\fR
While connected to a terminal \fBdirevent\fR outputs its diagnostics
messages to stderr and, if configured, to \fBsyslog\fR. This option
limits the amount of information output to the standard error.
\fIPRIO\fR is one of the following priorities (in order of increasing
severity):
.BR debug ,
.BR info ,
.BR notice ,
.BR warning ,
.BR err ,
.BR crit ,
.BR alert ,
.BR emerg .
When this option is given, only messages with the priority level equal
to or greater than \fIPRIO\fR will be duplicated on the standard
error.
.TP
\fB\-P\fR, \fB\-\-pidfile=\fIFILE\fR
Write PID to \fIFILE\fR.
.TP
\fB\-T\fR, \fB\-\-self\-test=\fICOMMAND\fR
Run in \fIself-test mode\fR. In this mode, \fBdirevent\fR starts
external command supplied as the argument to this option and continues
running until the command exits. If the command terminates normally,
\fBdirevent\fR exits with the code returned by it. If the command
terminates on \fBSIGHUP\fR, \fBdirevent\fR exits with code 0. If it
terminates on another signal, \fBdirevent\fR exits with code 2.
\fICOMMAND\fR can include any command line options or arguments,
provided that it is properly quoted. It is invoked as
.BI "/bin/sh -c " COMMAND
in the environment of the parent \fBdirevent\fR process.
The macro variable
.B $self_test_pid
holds the PID of the \fICOMMAND\fR (see section
.B VARIABLE EXPANSION
in
.BR direvent.conf (5)).
.TP
.BR \-t ", " \-\-lint
Check configuration file for errors and exit.
.TP
\fB\-u\fR, \fB\-\-user=\fIUSER\fR
Run as this \fIUSER\fR.
.PP
Informative options cause the program to display the requested piece
of information and exit:
.TP
.BR \-h ", " \-\-help
Output a terse help summary and exit.
.TP
.BR \-H ", " \-\-config\-help
Describe configuration file syntax.
.TP
.B \-\-usage
Show available command line options.
.TP
.BR \-V ", " \-\-version
Print program version and copyright information.
.SH CONFIGURATION
The default configuration file is
.BR /etc/direvent.conf .
If a file name is supplied as an argument to the program, that file
will be read instead.
.PP
The configuration file syntax is discussed in detail in
.BR direvent.conf (5).
This section provides only a short description of it.
.PP
Three types of comments are allowed: inline comments, that begin with
a \fB#\fR or \fB//\fR and extend to the end of line, and multi-line
comments, which comprise everything enclosed between \fB/*\fR and
\fB*/\fR. Comments and empty lines are ignored. Whitespace
characters are ignored as well, except as they serve to separate
tokens.
.PP
A token is a string of consecutive characters from the following
classes: alphanumeric characters, underscores, dots, asterisks,
slashes, semicolons, commercial at's, and dashes.
.PP
Any other sequence of characters must be enclosed in double quotation
marks in order to represent a single token.
.PP
Configuration statements consist of a keyword and value separated by
any amount of whitespace and is terminated with a semicolon. A block
statement is a collection of statements enclosed in curly braces.
.PP
The most important configuration statement is
.BR watcher .
It is defined as follows:
.sp
.nf
.in +2
.B watcher {
.in +4
\fBpath\fR \fIPATHNAME\fR [\fBrecursive\fR [\fILEVEL\fR]];
.BI "event " EVENT\-LIST ;
.BI "command " COMMAND\-LINE ;
.BI "user " NAME ;
.BI "timeout " NUMBER ;
.BI "environ " ENV\-SPEC ;
.BI "option " STRING\-LIST ;
.in -4
.B }
.in
.fi
.PP
Each \fBwatcher\fR statement instructs \fBdirevent\fR to monitor
the events listed in \fIEVENT\-LIST\fR occurring in the directories
specified by \fIPATHNAME\fRs in \fBpath\fR statements (any number of
\fBpath\fR statements can be given). When any such event is detected,
the \fICOMMAND\-LINE\fR will be executed.
.PP
Each directory defined with the \fBrecursive\fR keyword will be
watched recursively. This means that for each subdirectory created in
it, \fBdirevent\fR will install a watcher similar to that of its parent
directory. The optional \fILEVEL\fR can be used to set up a cut-off
nesting level, beyond which the recursive operation is disabled.
.PP
The \fIPATHNAME\fR is not required to be a directory, it can as well
be a file of any type. This file is not required to exist, either. If
it does not, \fBdirevent\fR will defer configuring the watcher until
the file is eventually created.
.PP
The rest of statements are optional. The \fBuser\fR statement can be
used to execute the \fICOMMAND\-LINE\fR as the user \fINAME\fR
(provided, of course, that \fBdirevent\fR is started with root
privileges). The \fBtimeout\fR specifies the maximum amount of time
(in seconds) the command is allowed to run. It defaults to 5. The
\fBenviron\fR statement modifies the command environment (see the
following section). Finally, the \fBoption\fR statement supplies
additional options. It can be used, for example, to divert the
command's output to \fBsyslog\fR.
.PP
The program's logging is controlled by the \fBdebug\fR and
\fBsyslog\fR statements.
.TP
.BI "debug " NUMBER ;
Sets the debugging level to \fINUMBER\fR -- an integer value between 0
and 4. Zero is the default and means the debugging is disabled. The
bigger the \fINUMBER\fR the more detailed debugging information will
be output.
.PP
The \fBsyslog\fR statement controls the syslog logging:
.sp
.nf
.in +2
.B syslog {
.in +4
.BI "facility " STRING ;
.BI "tag " STRING ;
.BI "print\-priority " BOOL ;
.in -4
.B }
.PP
The \fBpidfile\fR statement instructs the program to write its PID to
the named file after disconnecting from the controlling terminal.
.SH "HANDLER ENVIRONMENT"
The handler to be executed on an event is defined by the \fBcommand\fR
statement in the \fBwatcher\fR configuration block (see
.BR direvent.conf (5)).
Before executing, the following operations are performed:
.nr step 1 1
.IP \n[step].
The current working directory is set to the directory where the event
occurred.
.IP \n+[step].
If the global \fBenviron\fR statement is present, the current
environment is modified according to its rules.
.IP \n+[step].
If the \fBenviron\fR statement is present in the watcher, the
environment is further modified according to its rules. See the
description of the \fBenviron\fR statement in
.BR direvent.conf (5).
.IP \n+[step].
The standard input is closed.
.IP
If the \fBstdout\fR option is supplied,
the standard output is captured and redirected to the \fBsyslog\fR.
Otherwise it is closed.
.IP
If the \fBstderr\fR option is supplied,
the standard error is captured and redirected to the \fBsyslog\fR.
Otherwise it is closed.
.IP
All file descriptors above 2 are closed.
.IP \n+[step].
\fBMacro variables\fR are expanded in the command line. Unless the
\fBshell\fR option is set, environment variables are expanded as
well. See the section
.B VARIABLE EXPANSION
in
.BR direvent.conf (5).
For example, if the handler is about to be executed for the
\fBwrite\fR event on the file \fBsomefile\fR, and the \fBcommand\fR
definition was:
.RS
.sp
.nf
.in +4
command "/libexec/handler \-e '$genev_name' \-f '$file'";
.in
.fi
.RE
.IP
then the resulting command line will be:
.RS
.sp
.nf
.in +4
/libexec/handler \-e 'open' \-f 'somefile'
.in
.fi
.RE
.IP \n+[step].
If the \fBshell\fR option is set, the handler is invoked via the
shell, as \fB$SHELL -c \fIcommand\fR.
.IP \n+[step].
Otherwise, word splitting is performed on the resulting command line.
The first word is treated as the pathname of the program, which is
then invoked via the \fBexecve\fR system call.
.SH "SYSTEM DEPENDENCIES"
\fBDirevent\fR relies on the event monitoring API provided by the
kernel.
.SH Linux
On \fBLinux\fR the program uses
.BR inotify (7).
.PP
The maximum number of watches a user process can have is controlled by
the
.B fs.inotify.max_user_watches
system variable. Normally it is set to 8192, which is quite enough
for most purposes. However, if you monitor a big number or
directories and/or are using recursive watchers, you may need more
watches. In that case, use
.BR sysctl (8)
to raise the limit, e.g.:
.sp
.nf
.in +4
sysctl \-w fs.inotify.max_user_watches=16384
.in
.fi
.PP
Most GNU/Linux distributions provide the file
.B /etc/sysctl.conf
which can be used to set this variable on startup.
.PP
The following system-dependent events are defined on systems that use
.BR inotify (7):
.TP
.B ACCESS
A file was accessed.
.TP
.B ATTRIB
A file's metadata changed.
.TP
.B CLOSE_WRITE
A writable file was closed.
.TP
.B CLOSE_NOWRITE
An unwritable file closed.
.TP
.B CREATE
A file was created.
.TP
.B DELETE
A file was deleted.
.TP
.B MODIFY
A file was modified.
.TP
.B MOVED_FROM
A file was moved into a monitored directory.
.TP
.B MOVED_TO
A file was moved out from a monitored directory.
.TP
.B OPEN
A file was opened.
.SH BSD
When compiled on \fBBSD\fR systems (including \fBDarwin\fR),
\fBdirevent\fR uses
.BR kqueue (2).
This interface needs an open file handle for each file in a monitored
directory, which means that the number of watchers is limited by the
maximum number of open files. Use
.BI "ulimit -n " NUM
to raise it to a higher number.
.PP
Since it operates on files, \fBkqueue\fR does not provide direct
support for the \fBcreate\fR generic event. \fBDirevent\fR works
over this disadvantage by keeping track of the contents of each
monitored directory and rescanning it each time a \fBWRITE\fR system
event is reported for it. It then generates the
\fBopen\fR event for each file that appeared after the last scan.
Such a rescan can consume considerable time if a directory has a very
large number of files in it.
.PP
Further, the \fBchange\fR event is supported only on FreeBSD and NetBSD.
.PP
The following system-dependent events are available:
.TP
.B DELETE
The \fBunlink()\fR system call was called on the monitored file.
.TP
.B WRITE
A write occurred on the file.
.TP
.B EXTEND
The file was extended.
.TP
.B ATTRIB
The file attributes have changed.
.TP
.B LINK
The link count on the file changed.
.TP
.B RENAME
The file was renamed.
.TP
.B REVOKE
Access to the file was revoked via
.BR revoke (2)
or the underlying file system was unmounted.
.PP
Additionally, the following system events are supported by FreeBSD and
NetBSD:
.TP
.B CLOSE
File opened read-only writing was closed.
.TP
.B CLOSE_WRITE
File opened for writing was closed.
.TP
.B OPEN
File was opened.
.TP
.B READ
File was read.
.SH Darwin
Essentially the same as
.BR BSD .
The main difference compared to \fBLinux\fR and \fBBSD\fR is that on
\fBDarwin\fR the watchers are set after disconnecting from the
controlling terminal, because \fBDarwin\fR lacks the
.BR rfork (2)
call and the event queue cannot be inherited by the child process.
.SH "EXIT CODE"
.IP 0
Successful termination.
.IP 1
Command line usage error.
.IP 2
Another error occurred.
.SH "SEE ALSO"
.BR direvent.conf (5),
.BR inotify (7),
.BR kqueue (2).
.SH AUTHORS
Sergey Poznyakoff
.SH "BUG REPORTS"
Report bugs to .
.SH COPYRIGHT
Copyright \(co 2012\-2024 Sergey Poznyakoff
.br
.na
License GPLv3+: GNU GPL version 3 or later
.br
.ad
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
.\" Local variables:
.\" eval: (add-hook 'write-file-hooks 'time-stamp)
.\" time-stamp-start: ".TH [A-Z_][A-Z0-9_.\\-]* [0-9] \""
.\" time-stamp-format: "%:B %:d, %:y"
.\" time-stamp-end: "\""
.\" time-stamp-line-limit: 20
.\" end:
direvent-5.4/doc/otherdoc.texi.in 0000644 0001750 0001750 00000001260 14636566574 017071 0 ustar 00gray gray 0000000 0000000 @multitable @columnfractions 0.30 .5
@item @uref{../$FILE(info_gz),$BASEFILE(info_gz)} @tab Info document compressed ($SIZE(info_gz) characters gzipped tar file)
@item @uref{../$FILE(ascii),$BASEFILE(ascii)} @tab ASCII text ($SIZE(ascii) characters)
@item @uref{../$FILE(ascii_gz),$BASEFILE(ascii_gz)} @tab ASCII text, compressed ($SIZE(ascii_gz) characters)
@item @uref{../$FILE(dvi_gz),$BASEFILE(dvi_gz)} @tab TeX dvi file ($SIZE(dvi_gz) characters gzipped)
@item @uref{../$FILE(pdf),$BASEFILE(pdf)} @tab PDF file ($SIZE(pdf) characters gzipped)
@item @uref{../$FILE(texinfo_gz),$BASEFILE(texinfo_gz)} @tab Texinfo source ($SIZE(texinfo_gz) characters gzipped tar file)
@end multitable
direvent-5.4/doc/version.texi 0000644 0001750 0001750 00000000131 14641011322 016302 0 ustar 00gray gray 0000000 0000000 @set UPDATED 25 June 2024
@set UPDATED-MONTH June 2024
@set EDITION 5.4
@set VERSION 5.4
direvent-5.4/doc/direvent.info 0000644 0001750 0001750 00000242333 14641011601 016433 0 ustar 00gray gray 0000000 0000000 This is direvent.info, produced by makeinfo version 6.7 from
direvent.texi.
Copyright (C) 2013-2024 Sergey Poznyakoff
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
copy of the license is included in the section entitled "GNU Free
Documentation License".
INFO-DIR-SECTION Individual utilities
START-INFO-DIR-ENTRY
* direvent: (direvent). Monitor changes in directories.
END-INFO-DIR-ENTRY
File: direvent.info, Node: Top, Next: Intro, Up: (dir)
Direvent
********
This edition of the 'GNU Direvent' manual, last updated 25 June 2024,
documents GNU Direvent Version 5.4.
* Menu:
* Intro:: Introduction.
* Overview::
* Quick start::
* Invocation::
* Configuration::
* System dependencies::
* Reporting Bugs:: How to Report a Bug.
Appendices
* environ legacy syntax:: Legacy Syntax of the 'environ' Statement
* Copying This Manual:: The GNU Free Documentation License.
* Concept Index:: Index of Concepts.
-- The Detailed Node Listing --
Configuration
* syntax::
* variable expansion::
* general settings::
* syslog::
* environ::
* watcher::
Configuration Syntax
* Comments::
* Pragmatic Comments::
* Statements::
System Dependencies
* linux:: GNU/Linux systems.
* bsd:: BSD systems.
* darwin:: Darwin (Mac OS X).
File: direvent.info, Node: Intro, Next: Overview, Prev: Top, Up: Top
1 Introduction
**************
GNU 'direvent' monitors events in file system directories. For each
event that occurs in a set of pre-configured directories, the program
calls an external program associated with it, supplying it the
information about the event and the location within the file system
where it took place.
GNU 'direvent' provides an easy way to configure your system to react
immediately if certain files undergo changes. This may be helpful, for
example, to track changes in important configuration files.
Interfaces for tracking changes to file systems are highly
system-specific. GNU 'direvent' aims to provide a uniform and
system-independent command-level interface. As of version 5.4
'direvent' works with modern Linux kernels (since v. 2.6.13) and BSD
systems (FreeBSD, NetBSD, OpenBSD, Darwin).
File: direvent.info, Node: Overview, Next: Quick start, Prev: Intro, Up: Top
2 Overview
**********
GNU 'direvent' monitors a set of directories on the file system and
reacts when a file system event occurs in any of them. Directories and
events to monitor are specified in the configuration file. When an
event occurs, the program reacts by invoking an external command
configured for that event.
File system events can be divided into two major groups. The
"system-dependent events" are specific for each particular kernel
interface. In the contrast, "generic events" don't depend on the
underlying system. They provide a higher level of abstraction and make
it possible to port GNU 'direvent' configurations between various
systems and architectures.
The generic events are:
-- generic event: create
A file was created. This includes files moved from another
directory.
-- generic event: delete
A file was deleted or moved to another directory.
-- generic event: write
A file was written to. This does not imply that the file was
closed.
-- generic event: change
A file was modified and closed. This is a "compound" event, i.e.
it is delivered when a system event that means that the file opened
for writing was closed ('CLOSE_WRITE'), is delivered for a file on
which one or more 'write' events have been previously delivered.
As such it depends on the operating system ability to deliver the
'CLOSE_WRITE' event. Linux and FreeBSD have this ability. Many
other systems, such as NetBSD and Darwin, don't.
-- generic event: attrib
File attributes have changed. This includes changes in the file
ownership, mode, link count, etc.
A "watcher" is a configuration entity that associates a set of
directories with a set of events and instructs 'direvent' to run a
specified external command when any of these events occur in any of
these directories. This external command (called a "handler") can
obtain information about the event that triggered it from the
environment variables, or from its command line.
Watchers are defined in the configuration file, which 'direvent'
reads at startup. The following outlines its syntax:
Three types of comments are allowed: inline comments, that begin with
a '#' or '//' and extend to the end of line, and multi-line comments,
which comprise everything enclosed between '/*' and '*/'. Comments and
empty lines are ignored. Whitespace characters are ignored as well,
except as they serve to separate tokens.
A token is a string of consecutive characters from the following
classes: alphanumeric characters, underscores, dots, asterisks, slashes,
semicolons, commercial at's, and dashes.
Any other sequence of characters must be enclosed in double quotation
marks in order to represent a single token.
Adjacent quoted strings are concatenated.
A configuration statement consists of a keyword and value separated
by any amount of whitespace and is terminated with a semicolon. A block
statement is a collection of statements enclosed in curly braces.
A watcher is declared using the following block statement:
watcher {
path PATHNAME [recursive [LEVEL]];
file PATTERN-LIST;
event EVENT-LIST;
command COMMAND-LINE;
user NAME;
timeout NUMBER;
environ { ... };
option STRING-LIST;
}
Each 'watcher' statement instructs 'direvent' to monitor events from
EVENT-LIST occurring in directories specified by PATHNAMEs in 'path'
statements (any number of 'path' statements can be given). When any
such event is detected, the supplied COMMAND-LINE will be executed.
Each directory defined with the 'recursive' keyword will be watched
recursively. This means that for each subdirectory created in it,
'direvent' will install a watcher similar to that of its parent
directory. Optional LEVEL statement can be used to set up a cut-off
nesting level, beyond which the recursive operation is disabled.
It is a common practice for the 'path' statement to refer to a
directory. However, it is not a requirement. The PATHNAME argument can
as well point to any other type of file(1). Moreover, it is not
required to exist, either. If it does not, GNU 'direvent' will remember
the watcher definition and will set it up when the PATHNAME is
eventually created.(2)
The rest of statements are optional. The 'file' statement instructs
GNU 'direvent' to react only if the event concerned the file whose name
matches one of the patterns given in its argument. The 'user' statement
can be used to execute the COMMAND-LINE as the user NAME (provided, of
course, that 'direvent' is started with root privileges). The 'timeout'
specifies the maximum amount of time (in seconds) the command is allowed
to run. It defaults to 5. The 'environ' statement modifies the command
environment. Finally, the 'option' statement supplies additional
options. It can be used, for example, to divert the command's output to
syslog.
---------- Footnotes ----------
(1) Obviously, the 'recursive' keyword is valid only if PATHNAME is a
directory.
(2) *Note path::, for a detailed description.
File: direvent.info, Node: Quick start, Next: Invocation, Prev: Overview, Up: Top
3 Quick Start
*************
Let's suppose you have a directory where users can upload their files
and you want these files to be processed right after upload, in real
time. Let this directory be '/home/ftp/incoming' and the program to
process the upload be '/usr/bin/upload'. Let's also suppose that this
program expects name of the uploaded file as its argument.
To make 'direvent' handle this task, you would need to create a
watcher for the upload directory which would handle the 'create' event:
watcher {
path /home/ftp/incoming;
event create;
# more statements follow...
On this event, the watcher is to invoke '/usr/bin/upload' with the
name of the created file as an argument. To make it possible, the
'direvent' configuration file provides "macro variables", which can be
used in the 'command' argument at configuration time and which are
expanded to the actual values before the command is executed. Macro
variables are referred to using the same syntax as shell variables: a
dollar sign followed by the variable name, optionally enclosed in curly
braces. The 'file' variable is expanded to the name of the file for
which the event is reported. This name is relative to the current
working directory which, by the time the handler is executed, is set to
the directory where the event occurred. Thus, the handler can be
configured as:
command "/usr/bin/upload $file";
To summarize, the watcher declaration is:
watcher {
path /home/ftp/incoming;
event create;
command "/usr/bin/upload $file";
}
Before invoking the handler, the following operations are performed:
1. The current working directory is set to the directory where the
event occurred.
2. If the global 'environ' statement is present, the current
environment is modified according to its rules.
3. If the 'environ' statement is present in the 'watcher' block, the
environment is further modified according to its rules. (*note
environment modification: environ.)
4. The standard input is closed.
5. If the 'stdout' option is supplied, the standard output is captured
and redirected to the syslog. Otherwise it is closed.
6. If the 'stderr' option is supplied, the standard error is captured
and redirected to the syslog. Otherwise it is closed.
7. File descriptors above 2 are closed.
8. Macro variables are expanded in the command line. Unless the
'shell' option is set, environment variables are expanded as well.
*Note variable expansion::.
9. If the 'shell' option is set, the handler is invoked via the shell,
as '$SHELL -c "COMMAND"'.
Otherwise, word splitting is performed on the resulting command
line. The first word is treated as the pathname of the program,
which is then invoked via the 'execve' system call.
File: direvent.info, Node: Invocation, Next: Configuration, Prev: Quick start, Up: Top
4 Invocation
************
The invocation syntax is:
direvent [OPTIONS] [CONFIG]
where OPTIONS are command line options discussed below and optional
CONFIG supplies the configuration file to use instead of the default
'/etc/direvent.conf'.
The options are:
'-d'
'--debug'
Increase debug level.
'-F NAME'
'--facility=NAME'
Set syslog facility.
'-f'
'--foreground'
Remain in foreground.
'-I DIR'
'--include=DIR'
Add DIR to the beginning of the include search path (*note include
search path::).
'-l PRIO'
While connected to a terminal, 'direvent' outputs its diagnostics
messages to stderr and, if configured, to syslog. This option
limits the amount of information output to the standard error. The
PRIO argument is one of the following priorities (in order of
increasing severity): 'debug', 'info', 'notice', 'warning', 'err',
'crit', 'alert', 'emerg'. When this option is given, only messages
with the priority level equal to or greater than PRIO will be
duplicated on the standard error.
'-P FILE'
'--pidfile=FILE'
Upon successful startup store the PID of the daemon process in
FILE.
'-T COMMAND'
'--self-test=COMMAND'
Run in "self-test mode". In this mode, 'direvent' starts external
command supplied as the argument to this option and continues
running until the command exits. If COMMAND terminates normally,
'direvent' exits with the code returned by it. If COMMAND
terminates on signal, 'direvent' exits with code '0' if this signal
was 'SIGHUP', and with code '2' otherwise.
The COMMAND can include any command line options or arguments,
provided that it is properly quoted. It is invoked as '/bin/sh -c
COMMAND' in the environment of the parent 'direvent' process.
This mode is used in 'direvent' test suite. The idea is to
configure the handler (*note handler::) so that it sends 'SIGHUP'
to COMMAND before exiting. To this effect, the special macro
variable '$self_test_pid' is defined (*note variable expansion::)
to the PID of the running COMMAND process. For example, consider
configuration file 'test.conf', which contains the following:
watcher {
path /tmp;
command "/bin/kill -HUP $self_test_pid";
}
Then, the following command can be used to check whether 'direvent'
correctly reacts on file creation in the watched directory:
$ direvent --foreground \
--self-test 'touch /tmp/file && /usr/bin/sleep 20 && exit 1' \
test.conf
The command will return '0' if the handler was invoked, and '1' if
it was not.
'-t'
'--lint'
Check configuration file for errors and exit.
'-u NAME'
'--user=NAME'
Run as this user. This option overrides the 'user' configuration
statement (*note user: general settings.).
The following options are "informative". They cause the program to
display the requested piece of information and terminate:
'-H'
'--config-help'
Show configuration file summary.
'-h'
'--help'
Give a short usage summary.
'--usage'
Display available command line options.
'-V'
'--version'
Print program version.
File: direvent.info, Node: Configuration, Next: System dependencies, Prev: Invocation, Up: Top
5 Configuration
***************
* Menu:
* syntax::
* variable expansion::
* general settings::
* syslog::
* environ::
* watcher::
File: direvent.info, Node: syntax, Next: variable expansion, Up: Configuration
5.1 Configuration Syntax
========================
The configuration file consists of statements and comments.
There are three classes of lexical tokens: keywords, values, and
separators. Blanks, tabs, newlines and comments, collectively called
"white space" are ignored except as they serve to separate tokens. Some
white space is required to separate otherwise adjacent keywords and
values.
* Menu:
* Comments::
* Pragmatic Comments::
* Statements::
File: direvent.info, Node: Comments, Next: Pragmatic Comments, Up: syntax
5.1.1 Comments
--------------
"Comments" may appear anywhere where white space may appear in the
configuration file. There are two kinds of comments: single-line and
multi-line comments. "Single-line" comments start with '#' or '//' and
continue to the end of the line:
# This is a comment
// This too is a comment
"Multi-line" or "C-style" comments start with the two characters '/*'
(slash, star) and continue until the first occurrence of '*/' (star,
slash).
Multi-line comments cannot be nested. However, single-line comments
may well appear within multi-line ones.
File: direvent.info, Node: Pragmatic Comments, Next: Statements, Prev: Comments, Up: syntax
5.1.2 Pragmatic Comments
------------------------
Pragmatic comments are similar to usual single-line comments, except
that they cause some changes in the way the configuration is parsed.
Pragmatic comments begin with a '#' sign and end with the next physical
newline character.
'#include '
'#include "FILE"'
Include the contents of the file FILE. If FILE is an absolute file
name, the named file is included. An error message will be issued
if it does not exist.
If FILE contains wildcard characters ('*', '[', ']' or '?'), it is
interpreted as a shell globbing pattern and all files matching that
pattern are included, in lexicographical order. If no matching
files are found, the directive is replaced with an empty line.
Otherwise, the form with angle brackets searches for file in the
"include search path", while the second one looks for it in the
current working directory first, and, if not found there, in the
include search path. If the file is not found, an error message
will be issued.
"Include search path" is formed by two directory sets: the
user-defined search path, as defined by eventual '-I' (*note
include option::) command line options, and the standard include
search path, defined at compile time. The latter can be inspected
using the '--help' option.
The order of directories is as follows. First, 'direvent' scans
any directories given with '-I' options, in the same order as given
on the command line. If FILE is not found in any of them, the
standard include search path is scanned. It is defined at the
compile time and by default consists of two directories:
* 'PREFIX/share/direvent/include'
* 'PREFIX/share/direvent/5.4/include'
where PREFIX is the installation prefix. The default can be
changed when configuring the package. To inspect the actual
standard include search path at the runtime, run 'direvent --help',
and look for the string 'Include search path:' in its output.
'#include_once '
'#include_once FILE'
Same as '#include', except that, if the FILE has already been
included, it will not be included again.
'#line NUM'
'#line NUM "FILE"'
This line causes the parser to believe, for purposes of error
diagnostics, that the line number of the next source line is given
by NUM and the current input file is named by FILE. If the latter
is absent, the remembered file name does not change.
'# NUM "FILE"'
This is a special form of '#line' statement, understood for
compatibility with the C preprocessor.
File: direvent.info, Node: Statements, Prev: Pragmatic Comments, Up: syntax
5.1.3 Statements
----------------
A "simple statement" consists of a keyword and value separated by any
amount of whitespace. Simple statement is terminated with a semicolon
(';').
The following is a simple statement:
standalone yes;
pidfile /var/run/direvent.pid;
A "keyword" begins with a letter and may contain letters, decimal
digits, underscores ('_') and dashes ('-'). Examples of keywords are:
'expression', 'output-file'.
A "value" can be one of the following:
number
A number is a sequence of decimal digits.
boolean
A boolean value is one of the following: 'yes', 'true', 't' or '1',
meaning "true", and 'no', 'false', 'nil', '0' meaning "false".
unquoted string
An unquoted string may contain letters, digits, and any of the
following characters: '_', '-', '.', '/', '@', '*', ':'.
quoted string
A quoted string is any sequence of characters enclosed in
double-quotes ('"'). A backslash appearing within a quoted string
introduces an "escape sequence", which is replaced with a single
character according to the following rules:
Sequence Replaced with
\a Audible bell character (ASCII 7)
\b Backspace character (ASCII 8)
\f Form-feed character (ASCII 12)
\n Newline character (ASCII 10)
\r Carriage return character (ASCII
13)
\t Horizontal tabulation character
(ASCII 9)
\v Vertical tabulation character
(ASCII 11)
\\ A single backslash ('\')
\" A double-quote.
Table 5.1: Backslash escapes
In addition, the sequence '\NEWLINE' is removed from the string.
This allows to split long strings over several physical lines,
e.g.:
"a long string may be\
split over several lines"
If the character following a backslash is not one of those
specified above, the backslash is ignored and a warning is issued.
Here-document
A "here-document" is a special construct that allows to introduce
strings of text containing embedded newlines.
The '<.
You hit a bug if at least one of the conditions below is met:
* 'direvent' terminates on signal 11 (SIGSEGV) or 6 (SIGABRT).
* The program fails to do its job as described in this manual.
If you think you've found a bug, please be sure to include maximum
information available to reliably reproduce it, or at least to analyze
it. The information needed is:
* Version of the package you are using.
* Command line options and configuration file.
* Conditions under which the bug appears.
Any errors, typos or omissions found in this manual also qualify as
bugs. Please report them, if you happen to find any.
File: direvent.info, Node: environ legacy syntax, Next: Copying This Manual, Prev: Reporting Bugs, Up: Top
Appendix A Legacy Syntax of the 'environ' Statement
***************************************************
This appendix describes the syntax of the 'environ' statement used in
GNU 'direvent' versions 5.2 and earlier. The use of this legacy syntax
is discouraged. It is supported for backward compatibility only and
will be removed in future versions.
-- legacy syntax: environ ARGS
Modify command environment. Arguments are a single environment
modification directive, a whitespace-delimited list of directives,
or a proper list (*note list::) of directives.
The following directives are available. To facilitate switching to
the modern 'environ' syntax, the discussion below lists, for each legacy
directive, its modern syntax equivalent (*note environ::).
'-' (a single dash)
Clear the inherited environment, but retain the variables added by
'direvent' itself. The removed environment variables can be
selectively restored using the directives discussed below.
If used, this must be the first directive in the list.
The modern syntax equivalent is:
environ {
clear;
keep "DIREVENT_*";
}
'--' (double-dash)
Clear the entire environment, including the variables added by
'direvent'.
If used, this must be the first directive in the list.
The modern syntax equivalent is:
environ {
clear;
}
-NAME
Unset the variable NAME.
The modern syntax equivalent is
environ {
unset NAME;
}
-NAME=VAL
Unset the environment variable NAME only if its value is VAL. The
modern syntax equivalent is:
environ {
unset "NAME=VAL";
}
NAME
Restore the environment variable NAME. This directive is useful
after '-' or '--' to retain some variables from the environment.
The modern syntax equivalent is:
keep NAME;
NAME=VALUE
Define environment variable NAME to have given VALUE. It is
equivalent to:
environ {
keep "NAME=VALUE";
}
NAME+=VALUE
Retain variable NAME and append VALUE to its existing value. If no
such variable is present in the environment, it is created and
VALUE is assigned to it. However, if VALUE begins with a
punctuation character, this character is removed from it before the
assignment. This is convenient for using this construct with
environment variables like 'PATH', e.g.:
PATH+=:/sbin
In this example, if 'PATH' exists, ':/sbin' will be appended to it.
Otherwise, it will be created and '/sbin' will be assigned to it.
In modern syntax, use shell variable references, e.g.:
environ {
set "PATH=${PATH}${PATH:+:}/sbin";
}
NAME=+VALUE
Retain variable NAME and prepend VALUE to its existing value. If
no such variable is present in the environment, it is created and
VALUE is assigned to it. However, if VALUE ends with a punctuation
character, this character is removed from it before assignment.
In modern syntax, use shell variable references, e.g. instead of
doing
environ PATH=+/sbin:
use
environ {
set "PATH=/sbin${PATH:+:}$PATH";
}
File: direvent.info, Node: Copying This Manual, Next: Concept Index, Prev: environ legacy syntax, Up: Top
Appendix B GNU Free Documentation License
*****************************************
Version 1.2, November 2002
Copyright (C) 2000, 2001, 2002, 2014 Free Software Foundation,
Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
0. PREAMBLE
The purpose of this License is to make a manual, textbook, or other
functional and useful document "free" in the sense of freedom: to
assure everyone the effective freedom to copy and redistribute it,
with or without modifying it, either commercially or
noncommercially. Secondarily, this License preserves for the
author and publisher a way to get credit for their work, while not
being considered responsible for modifications made by others.
This License is a kind of "copyleft", which means that derivative
works of the document must themselves be free in the same sense.
It complements the GNU General Public License, which is a copyleft
license designed for free software.
We have designed this License in order to use it for manuals for
free software, because free software needs free documentation: a
free program should come with manuals providing the same freedoms
that the software does. But this License is not limited to
software manuals; it can be used for any textual work, regardless
of subject matter or whether it is published as a printed book. We
recommend this License principally for works whose purpose is
instruction or reference.
1. APPLICABILITY AND DEFINITIONS
This License applies to any manual or other work, in any medium,
that contains a notice placed by the copyright holder saying it can
be distributed under the terms of this License. Such a notice
grants a world-wide, royalty-free license, unlimited in duration,
to use that work under the conditions stated herein. The
"Document", below, refers to any such manual or work. Any member
of the public is a licensee, and is addressed as "you". You accept
the license if you copy, modify or distribute the work in a way
requiring permission under copyright law.
A "Modified Version" of the Document means any work containing the
Document or a portion of it, either copied verbatim, or with
modifications and/or translated into another language.
A "Secondary Section" is a named appendix or a front-matter section
of the Document that deals exclusively with the relationship of the
publishers or authors of the Document to the Document's overall
subject (or to related matters) and contains nothing that could
fall directly within that overall subject. (Thus, if the Document
is in part a textbook of mathematics, a Secondary Section may not
explain any mathematics.) The relationship could be a matter of
historical connection with the subject or with related matters, or
of legal, commercial, philosophical, ethical or political position
regarding them.
The "Invariant Sections" are certain Secondary Sections whose
titles are designated, as being those of Invariant Sections, in the
notice that says that the Document is released under this License.
If a section does not fit the above definition of Secondary then it
is not allowed to be designated as Invariant. The Document may
contain zero Invariant Sections. If the Document does not identify
any Invariant Sections then there are none.
The "Cover Texts" are certain short passages of text that are
listed, as Front-Cover Texts or Back-Cover Texts, in the notice
that says that the Document is released under this License. A
Front-Cover Text may be at most 5 words, and a Back-Cover Text may
be at most 25 words.
A "Transparent" copy of the Document means a machine-readable copy,
represented in a format whose specification is available to the
general public, that is suitable for revising the document
straightforwardly with generic text editors or (for images composed
of pixels) generic paint programs or (for drawings) some widely
available drawing editor, and that is suitable for input to text
formatters or for automatic translation to a variety of formats
suitable for input to text formatters. A copy made in an otherwise
Transparent file format whose markup, or absence of markup, has
been arranged to thwart or discourage subsequent modification by
readers is not Transparent. An image format is not Transparent if
used for any substantial amount of text. A copy that is not
"Transparent" is called "Opaque".
Examples of suitable formats for Transparent copies include plain
ASCII without markup, Texinfo input format, LaTeX input format,
SGML or XML using a publicly available DTD, and standard-conforming
simple HTML, PostScript or PDF designed for human modification.
Examples of transparent image formats include PNG, XCF and JPG.
Opaque formats include proprietary formats that can be read and
edited only by proprietary word processors, SGML or XML for which
the DTD and/or processing tools are not generally available, and
the machine-generated HTML, PostScript or PDF produced by some word
processors for output purposes only.
The "Title Page" means, for a printed book, the title page itself,
plus such following pages as are needed to hold, legibly, the
material this License requires to appear in the title page. For
works in formats which do not have any title page as such, "Title
Page" means the text near the most prominent appearance of the
work's title, preceding the beginning of the body of the text.
A section "Entitled XYZ" means a named subunit of the Document
whose title either is precisely XYZ or contains XYZ in parentheses
following text that translates XYZ in another language. (Here XYZ
stands for a specific section name mentioned below, such as
"Acknowledgements", "Dedications", "Endorsements", or "History".)
To "Preserve the Title" of such a section when you modify the
Document means that it remains a section "Entitled XYZ" according
to this definition.
The Document may include Warranty Disclaimers next to the notice
which states that this License applies to the Document. These
Warranty Disclaimers are considered to be included by reference in
this License, but only as regards disclaiming warranties: any other
implication that these Warranty Disclaimers may have is void and
has no effect on the meaning of this License.
2. VERBATIM COPYING
You may copy and distribute the Document in any medium, either
commercially or noncommercially, provided that this License, the
copyright notices, and the license notice saying this License
applies to the Document are reproduced in all copies, and that you
add no other conditions whatsoever to those of this License. You
may not use technical measures to obstruct or control the reading
or further copying of the copies you make or distribute. However,
you may accept compensation in exchange for copies. If you
distribute a large enough number of copies you must also follow the
conditions in section 3.
You may also lend copies, under the same conditions stated above,
and you may publicly display copies.
3. COPYING IN QUANTITY
If you publish printed copies (or copies in media that commonly
have printed covers) of the Document, numbering more than 100, and
the Document's license notice requires Cover Texts, you must
enclose the copies in covers that carry, clearly and legibly, all
these Cover Texts: Front-Cover Texts on the front cover, and
Back-Cover Texts on the back cover. Both covers must also clearly
and legibly identify you as the publisher of these copies. The
front cover must present the full title with all words of the title
equally prominent and visible. You may add other material on the
covers in addition. Copying with changes limited to the covers, as
long as they preserve the title of the Document and satisfy these
conditions, can be treated as verbatim copying in other respects.
If the required texts for either cover are too voluminous to fit
legibly, you should put the first ones listed (as many as fit
reasonably) on the actual cover, and continue the rest onto
adjacent pages.
If you publish or distribute Opaque copies of the Document
numbering more than 100, you must either include a machine-readable
Transparent copy along with each Opaque copy, or state in or with
each Opaque copy a computer-network location from which the general
network-using public has access to download using public-standard
network protocols a complete Transparent copy of the Document, free
of added material. If you use the latter option, you must take
reasonably prudent steps, when you begin distribution of Opaque
copies in quantity, to ensure that this Transparent copy will
remain thus accessible at the stated location until at least one
year after the last time you distribute an Opaque copy (directly or
through your agents or retailers) of that edition to the public.
It is requested, but not required, that you contact the authors of
the Document well before redistributing any large number of copies,
to give them a chance to provide you with an updated version of the
Document.
4. MODIFICATIONS
You may copy and distribute a Modified Version of the Document
under the conditions of sections 2 and 3 above, provided that you
release the Modified Version under precisely this License, with the
Modified Version filling the role of the Document, thus licensing
distribution and modification of the Modified Version to whoever
possesses a copy of it. In addition, you must do these things in
the Modified Version:
A. Use in the Title Page (and on the covers, if any) a title
distinct from that of the Document, and from those of previous
versions (which should, if there were any, be listed in the
History section of the Document). You may use the same title
as a previous version if the original publisher of that
version gives permission.
B. List on the Title Page, as authors, one or more persons or
entities responsible for authorship of the modifications in
the Modified Version, together with at least five of the
principal authors of the Document (all of its principal
authors, if it has fewer than five), unless they release you
from this requirement.
C. State on the Title page the name of the publisher of the
Modified Version, as the publisher.
D. Preserve all the copyright notices of the Document.
E. Add an appropriate copyright notice for your modifications
adjacent to the other copyright notices.
F. Include, immediately after the copyright notices, a license
notice giving the public permission to use the Modified
Version under the terms of this License, in the form shown in
the Addendum below.
G. Preserve in that license notice the full lists of Invariant
Sections and required Cover Texts given in the Document's
license notice.
H. Include an unaltered copy of this License.
I. Preserve the section Entitled "History", Preserve its Title,
and add to it an item stating at least the title, year, new
authors, and publisher of the Modified Version as given on the
Title Page. If there is no section Entitled "History" in the
Document, create one stating the title, year, authors, and
publisher of the Document as given on its Title Page, then add
an item describing the Modified Version as stated in the
previous sentence.
J. Preserve the network location, if any, given in the Document
for public access to a Transparent copy of the Document, and
likewise the network locations given in the Document for
previous versions it was based on. These may be placed in the
"History" section. You may omit a network location for a work
that was published at least four years before the Document
itself, or if the original publisher of the version it refers
to gives permission.
K. For any section Entitled "Acknowledgements" or "Dedications",
Preserve the Title of the section, and preserve in the section
all the substance and tone of each of the contributor
acknowledgements and/or dedications given therein.
L. Preserve all the Invariant Sections of the Document, unaltered
in their text and in their titles. Section numbers or the
equivalent are not considered part of the section titles.
M. Delete any section Entitled "Endorsements". Such a section
may not be included in the Modified Version.
N. Do not retitle any existing section to be Entitled
"Endorsements" or to conflict in title with any Invariant
Section.
O. Preserve any Warranty Disclaimers.
If the Modified Version includes new front-matter sections or
appendices that qualify as Secondary Sections and contain no
material copied from the Document, you may at your option designate
some or all of these sections as invariant. To do this, add their
titles to the list of Invariant Sections in the Modified Version's
license notice. These titles must be distinct from any other
section titles.
You may add a section Entitled "Endorsements", provided it contains
nothing but endorsements of your Modified Version by various
parties--for example, statements of peer review or that the text
has been approved by an organization as the authoritative
definition of a standard.
You may add a passage of up to five words as a Front-Cover Text,
and a passage of up to 25 words as a Back-Cover Text, to the end of
the list of Cover Texts in the Modified Version. Only one passage
of Front-Cover Text and one of Back-Cover Text may be added by (or
through arrangements made by) any one entity. If the Document
already includes a cover text for the same cover, previously added
by you or by arrangement made by the same entity you are acting on
behalf of, you may not add another; but you may replace the old
one, on explicit permission from the previous publisher that added
the old one.
The author(s) and publisher(s) of the Document do not by this
License give permission to use their names for publicity for or to
assert or imply endorsement of any Modified Version.
5. COMBINING DOCUMENTS
You may combine the Document with other documents released under
this License, under the terms defined in section 4 above for
modified versions, provided that you include in the combination all
of the Invariant Sections of all of the original documents,
unmodified, and list them all as Invariant Sections of your
combined work in its license notice, and that you preserve all
their Warranty Disclaimers.
The combined work need only contain one copy of this License, and
multiple identical Invariant Sections may be replaced with a single
copy. If there are multiple Invariant Sections with the same name
but different contents, make the title of each such section unique
by adding at the end of it, in parentheses, the name of the
original author or publisher of that section if known, or else a
unique number. Make the same adjustment to the section titles in
the list of Invariant Sections in the license notice of the
combined work.
In the combination, you must combine any sections Entitled
"History" in the various original documents, forming one section
Entitled "History"; likewise combine any sections Entitled
"Acknowledgements", and any sections Entitled "Dedications". You
must delete all sections Entitled "Endorsements."
6. COLLECTIONS OF DOCUMENTS
You may make a collection consisting of the Document and other
documents released under this License, and replace the individual
copies of this License in the various documents with a single copy
that is included in the collection, provided that you follow the
rules of this License for verbatim copying of each of the documents
in all other respects.
You may extract a single document from such a collection, and
distribute it individually under this License, provided you insert
a copy of this License into the extracted document, and follow this
License in all other respects regarding verbatim copying of that
document.
7. AGGREGATION WITH INDEPENDENT WORKS
A compilation of the Document or its derivatives with other
separate and independent documents or works, in or on a volume of a
storage or distribution medium, is called an "aggregate" if the
copyright resulting from the compilation is not used to limit the
legal rights of the compilation's users beyond what the individual
works permit. When the Document is included an aggregate, this
License does not apply to the other works in the aggregate which
are not themselves derivative works of the Document.
If the Cover Text requirement of section 3 is applicable to these
copies of the Document, then if the Document is less than one half
of the entire aggregate, the Document's Cover Texts may be placed
on covers that bracket the Document within the aggregate, or the
electronic equivalent of covers if the Document is in electronic
form. Otherwise they must appear on printed covers that bracket
the whole aggregate.
8. TRANSLATION
Translation is considered a kind of modification, so you may
distribute translations of the Document under the terms of section
4. Replacing Invariant Sections with translations requires special
permission from their copyright holders, but you may include
translations of some or all Invariant Sections in addition to the
original versions of these Invariant Sections. You may include a
translation of this License, and all the license notices in the
Document, and any Warranty Disclaimers, provided that you also
include the original English version of this License and the
original versions of those notices and disclaimers. In case of a
disagreement between the translation and the original version of
this License or a notice or disclaimer, the original version will
prevail.
If a section in the Document is Entitled "Acknowledgements",
"Dedications", or "History", the requirement (section 4) to
Preserve its Title (section 1) will typically require changing the
actual title.
9. TERMINATION
You may not copy, modify, sublicense, or distribute the Document
except as expressly provided for under this License. Any other
attempt to copy, modify, sublicense or distribute the Document is
void, and will automatically terminate your rights under this
License. However, parties who have received copies, or rights,
from you under this License will not have their licenses terminated
so long as such parties remain in full compliance.
10. FUTURE REVISIONS OF THIS LICENSE
The Free Software Foundation may publish new, revised versions of
the GNU Free Documentation License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns. See
.
Each version of the License is given a distinguishing version
number. If the Document specifies that a particular numbered
version of this License "or any later version" applies to it, you
have the option of following the terms and conditions either of
that specified version or of any later version that has been
published (not as a draft) by the Free Software Foundation. If the
Document does not specify a version number of this License, you may
choose any version ever published (not as a draft) by the Free
Software Foundation.
B.1 ADDENDUM: How to use this License for your documents
========================================================
To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and license
notices just after the title page:
Copyright (C) YEAR YOUR NAME.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
Texts. A copy of the license is included in the section entitled ``GNU
Free Documentation License''.
If you have Invariant Sections, Front-Cover Texts and Back-Cover
Texts, replace the "with...Texts." line with this:
with the Invariant Sections being LIST THEIR TITLES, with
the Front-Cover Texts being LIST, and with the Back-Cover Texts
being LIST.
If you have Invariant Sections without Cover Texts, or some other
combination of the three, merge those two alternatives to suit the
situation.
If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of free
software license, such as the GNU General Public License, to permit
their use in free software.
File: direvent.info, Node: Concept Index, Prev: Copying This Manual, Up: Top
Concept Index
*************
This is a general index of all issues discussed in this manual
[index ]
* Menu:
* #include: Pragmatic Comments. (line 11)
* #include_once: Pragmatic Comments. (line 48)
* #line: Pragmatic Comments. (line 53)
* --config-help: Invocation. (line 87)
* --debug: Invocation. (line 16)
* --facility: Invocation. (line 18)
* --foreground: Invocation. (line 21)
* --help: Invocation. (line 89)
* --include: Invocation. (line 24)
* --lint: Invocation. (line 75)
* --pidfile: Invocation. (line 37)
* --self-test: Invocation. (line 41)
* --usage: Invocation. (line 92)
* --user: Invocation. (line 78)
* --version: Invocation. (line 94)
* -d: Invocation. (line 16)
* -F: Invocation. (line 18)
* -f: Invocation. (line 21)
* -H: Invocation. (line 87)
* -h: Invocation. (line 89)
* -I: Invocation. (line 24)
* -l: Invocation. (line 28)
* -P: Invocation. (line 37)
* -T: Invocation. (line 41)
* -t: Invocation. (line 75)
* -u: Invocation. (line 78)
* -V: Invocation. (line 94)
* ACCESS, linux event: linux. (line 25)
* attrib: Overview. (line 41)
* ATTRIB, BSD: bsd. (line 34)
* ATTRIB, linux event: linux. (line 26)
* block statement: Statements. (line 121)
* boolean value: Statements. (line 25)
* BSD: bsd. (line 6)
* change: Overview. (line 32)
* clear: environ. (line 50)
* CLOSE, FreeBSD: bsd. (line 51)
* CLOSE, NetBSD: bsd. (line 51)
* CLOSE_NOWRITE, linux event: linux. (line 30)
* CLOSE_WRITE, FreeBSD: bsd. (line 54)
* CLOSE_WRITE, linux event: linux. (line 28)
* CLOSE_WRITE, NetBSD: bsd. (line 54)
* command: watcher. (line 96)
* Comments in a configuration file: Comments. (line 6)
* comments, pragmatic: Pragmatic Comments. (line 6)
* configuration file statements: Statements. (line 6)
* create: Overview. (line 21)
* CREATE, linux event: linux. (line 32)
* Darwin: darwin. (line 6)
* debug: general settings. (line 17)
* delete: Overview. (line 25)
* DELETE, BSD: bsd. (line 25)
* DELETE, linux event: linux. (line 34)
* DIREVENT_FILE: environ. (line 29)
* DIREVENT_GENEV_CODE: environ. (line 19)
* DIREVENT_GENEV_NAME: environ. (line 23)
* DIREVENT_SYSEV_CODE: environ. (line 9)
* DIREVENT_SYSEV_NAME: environ. (line 13)
* environ: environ. (line 33)
* environ <1>: watcher. (line 142)
* environ <2>: environ legacy syntax.
(line 11)
* environment, handler: environ. (line 9)
* escape sequence: Statements. (line 33)
* eval: environ. (line 89)
* event: watcher. (line 84)
* events: Overview. (line 12)
* events, generic: Overview. (line 19)
* events, system-dependent, on BSD: bsd. (line 23)
* events, system-dependent, on Darwin: bsd. (line 23)
* events, system-dependent, on linux: linux. (line 22)
* EXTEND, BSD: bsd. (line 31)
* facility: syslog. (line 22)
* facility, syslog: syslog. (line 23)
* FDL, GNU Free Documentation License: Copying This Manual. (line 6)
* file: variable expansion. (line 43)
* file <1>: watcher. (line 59)
* file system events: Overview. (line 12)
* foreground: general settings. (line 10)
* fs.inotify.max_user_watches: linux. (line 9)
* generic events: Overview. (line 19)
* genev_code: variable expansion. (line 46)
* genev_name: variable expansion. (line 50)
* GNU/Linux: linux. (line 6)
* Handler environment variables: environ. (line 9)
* handler execution environment: Quick start. (line 43)
* handler, defining: watcher. (line 97)
* handler, introduced: Overview. (line 45)
* here-document: Statements. (line 65)
* include directories, preprocessor: Pragmatic Comments. (line 28)
* include search path, preprocessor: Pragmatic Comments. (line 28)
* inotify: linux. (line 6)
* keep: environ. (line 55)
* keep <1>: environ. (line 56)
* kqueue: bsd. (line 6)
* LINK, BSD: bsd. (line 37)
* linux kernel: linux. (line 6)
* list: Statements. (line 105)
* logging: syslog. (line 6)
* Mac OS X: darwin. (line 6)
* macro expansion: variable expansion. (line 6)
* max-instances: watcher. (line 152)
* MODIFY, linux event: linux. (line 36)
* MOVED_FROM, linux event: linux. (line 38)
* MOVED_TO, linux event: linux. (line 40)
* multi-line comments: Comments. (line 14)
* number of open file descriptors: bsd. (line 10)
* number of watches, linux: linux. (line 9)
* OPEN, FreeBSD: bsd. (line 57)
* OPEN, linux event: linux. (line 42)
* OPEN, NetBSD: bsd. (line 57)
* option: watcher. (line 120)
* path: watcher. (line 25)
* pidfile: general settings. (line 13)
* pragmatic comments: Pragmatic Comments. (line 6)
* preprocessor include search path: Pragmatic Comments. (line 28)
* print-priority: syslog. (line 31)
* quoted string: Statements. (line 33)
* READ, FreeBSD: bsd. (line 58)
* RENAME, BSD: bsd. (line 40)
* REVOKE, BSD: bsd. (line 43)
* self-test mode: Invocation. (line 41)
* self_test_pid: variable expansion. (line 66)
* sentinel: watcher. (line 42)
* set: environ. (line 78)
* shell, watcher option: watcher. (line 124)
* simple statements: Statements. (line 6)
* single-line comments: Comments. (line 6)
* statement, block: Statements. (line 121)
* statement, simple: Statements. (line 6)
* statements, configuration file: Statements. (line 6)
* stdout, watcher option: watcher. (line 135)
* strerr, watcher option: watcher. (line 139)
* string, quoted: Statements. (line 33)
* string, unquoted: Statements. (line 29)
* sysctl: linux. (line 9)
* sysctl.conf: linux. (line 19)
* sysev_code: variable expansion. (line 56)
* sysev_name: variable expansion. (line 60)
* syslog: syslog. (line 6)
* syslog facility: syslog. (line 23)
* syslog tag: syslog. (line 28)
* system-dependent events on BSD: bsd. (line 23)
* system-dependent events on Darwin: bsd. (line 23)
* system-dependent events, linux: linux. (line 22)
* tag: syslog. (line 27)
* tag, syslog: syslog. (line 28)
* timeout: watcher. (line 116)
* unset: environ. (line 98)
* unset <1>: environ. (line 99)
* user: general settings. (line 6)
* user <1>: watcher. (line 113)
* variable expansion: variable expansion. (line 6)
* wait, watcher option: watcher. (line 130)
* watcher declaration: watcher. (line 11)
* watcher declaration, summary: Overview. (line 74)
* watcher, complete description: watcher. (line 6)
* watcher, introduced: Overview. (line 45)
* write: Overview. (line 28)
* WRITE, BSD: bsd. (line 28)
Tag Table:
Node: Top642
Node: Intro1539
Node: Overview2447
Ref: generic events3218
Ref: handler4186
Ref: Overview-Footnote-17561
Ref: Overview-Footnote-27646
Node: Quick start7696
Ref: handler environment9390
Node: Invocation10666
Ref: include option11172
Ref: self-test mode11936
Node: Configuration14014
Node: syntax14249
Node: Comments14795
Node: Pragmatic Comments15469
Ref: include search path16642
Node: Statements18235
Ref: backslash-interpretation19434
Ref: here-document20490
Ref: list22061
Node: variable expansion22906
Ref: file24718
Ref: genev_code24792
Ref: genev_name24947
Ref: sysev_code25208
Ref: sysev_name25353
Node: general settings27483
Node: syslog28033
Node: environ29246
Node: watcher33351
Ref: path34017
Node: System dependencies39582
Node: linux39907
Node: bsd41241
Node: darwin43040
Node: Reporting Bugs43518
Node: environ legacy syntax44382
Node: Copying This Manual47835
Node: Concept Index70272
End Tag Table
Local Variables:
coding: utf-8
End:
direvent-5.4/doc/Makefile.in 0000644 0001750 0001750 00000074453 14641011274 016017 0 ustar 00gray gray 0000000 0000000 # Makefile.in generated by automake 1.16.5 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2021 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@
# This file is part of GNU direvent
# Copyright (C) 2012-2024 Sergey Poznyakoff
#
# GNU direvent 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 3, or (at your option)
# any later version.
#
# GNU direvent 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 GNU direvent. If not, see .
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = doc
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/grecs/am/grecs.m4 \
$(top_srcdir)/am/gettext.m4 $(top_srcdir)/am/iconv.m4 \
$(top_srcdir)/am/intlmacosx.m4 $(top_srcdir)/am/lib-ld.m4 \
$(top_srcdir)/am/lib-link.m4 $(top_srcdir)/am/lib-prefix.m4 \
$(top_srcdir)/am/nls.m4 $(top_srcdir)/am/po.m4 \
$(top_srcdir)/am/progtest.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/version.texi \
$(srcdir)/stamp-vti $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
SOURCES =
DIST_SOURCES =
AM_V_DVIPS = $(am__v_DVIPS_@AM_V@)
am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@)
am__v_DVIPS_0 = @echo " DVIPS " $@;
am__v_DVIPS_1 =
AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@)
am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@)
am__v_MAKEINFO_0 = @echo " MAKEINFO" $@;
am__v_MAKEINFO_1 =
AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@)
am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@)
am__v_INFOHTML_0 = @echo " INFOHTML" $@;
am__v_INFOHTML_1 =
AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@)
am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@)
am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@;
am__v_TEXI2DVI_1 =
AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@)
am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@)
am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@;
am__v_TEXI2PDF_1 =
AM_V_texinfo = $(am__v_texinfo_@AM_V@)
am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@)
am__v_texinfo_0 = -q
am__v_texinfo_1 =
AM_V_texidevnull = $(am__v_texidevnull_@AM_V@)
am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@)
am__v_texidevnull_0 = > /dev/null
am__v_texidevnull_1 =
INFO_DEPS = $(srcdir)/direvent.info
TEXINFO_TEX = $(top_srcdir)/build-aux/texinfo.tex
am__TEXINFO_TEX_DIR = $(top_srcdir)/build-aux
DVIS = direvent.dvi
PDFS = direvent.pdf
PSS = direvent.ps
HTMLS = direvent.html
TEXINFOS = direvent.texi
TEXI2DVI = texi2dvi
TEXI2PDF = $(TEXI2DVI) --pdf --batch
MAKEINFOHTML = $(MAKEINFO) --html
AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
DVIPS = dvips
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man5dir)" \
"$(DESTDIR)$(man8dir)"
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
for p in $$list; do echo "$$p $$p"; done | \
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
if (++n[$$2] == $(am__install_max)) \
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
END { for (dir in files) print dir, files[dir] }'
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__uninstall_files_from_dir = { \
test -z "$$files" \
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
man5dir = $(mandir)/man5
man8dir = $(mandir)/man8
NROFF = nroff
MANS = $(dist_man_MANS)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
am__DIST_COMMON = $(direvent_TEXINFOS) $(dist_man_MANS) \
$(srcdir)/Makefile.in $(top_srcdir)/build-aux/mdate-sh \
$(top_srcdir)/build-aux/texinfo.tex
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOM4TE = @AUTOM4TE@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CSCOPE = @CSCOPE@
CTAGS = @CTAGS@
CYGPATH_W = @CYGPATH_W@
DEFAULT_PREPROCESSOR = @DEFAULT_PREPROCESSOR@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GRECS_BUILD_AUX = @GRECS_BUILD_AUX@
GRECS_CHANGELOG = @GRECS_CHANGELOG@
GRECS_DISTCK_AT = @GRECS_DISTCK_AT@
GRECS_DISTDOC = @GRECS_DISTDOC@
GRECS_DOCDIR = @GRECS_DOCDIR@
GRECS_EXTRA_DIST = @GRECS_EXTRA_DIST@
GRECS_HOST_PROJECT_INCLUDES = @GRECS_HOST_PROJECT_INCLUDES@
GRECS_HOST_PROJECT_LDADD = @GRECS_HOST_PROJECT_LDADD@
GRECS_INCLUDES = @GRECS_INCLUDES@
GRECS_INCLUDE_DIR = @GRECS_INCLUDE_DIR@
GRECS_LDADD = @GRECS_LDADD@
GRECS_README = @GRECS_README@
GRECS_SOCKADDR_LIST = @GRECS_SOCKADDR_LIST@
GRECS_SRCDIR = @GRECS_SRCDIR@
GRECS_SUBDIR = @GRECS_SUBDIR@
GRECS_TESTDIR = @GRECS_TESTDIR@
GRECS_TREE_API = @GRECS_TREE_API@
GREP = @GREP@
IFACE = @IFACE@
INCLUDE_PATH_ARGS = @INCLUDE_PATH_ARGS@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INTLLIBS = @INTLLIBS@
INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
LDFLAGS = @LDFLAGS@
LEX = @LEX@
LEXLIB = @LEXLIB@
LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
POSUB = @POSUB@
PPBIN = @PPBIN@
PP_SETUP_FILE = @PP_SETUP_FILE@
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
XGETTEXT = @XGETTEXT@
XGETTEXT_015 = @XGETTEXT_015@
XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
YACC = @YACC@
YFLAGS = @YFLAGS@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_CC = @ac_ct_CC@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
info_TEXINFOS = direvent.texi
direvent_TEXINFOS = \
fdl.texi
dist_man_MANS = direvent.8 direvent.conf.5
EXTRA_DIST = \
gendocs.pl\
otherdoc.texi.in\
webdoc.init
GENDOCS = perl gendocs.pl
all: all-am
.SUFFIXES:
.SUFFIXES: .dvi .html .info .pdf .ps .texi
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits doc/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnits doc/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
.texi.info:
$(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \
am__cwd=`pwd` && $(am__cd) $(srcdir) && \
rm -rf $$backupdir && mkdir $$backupdir && \
if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
done; \
else :; fi && \
cd "$$am__cwd"; \
if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
-o $@ $<; \
then \
rc=0; \
$(am__cd) $(srcdir); \
else \
rc=$$?; \
$(am__cd) $(srcdir) && \
$$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
fi; \
rm -rf $$backupdir; exit $$rc
.texi.dvi:
$(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
$(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \
$<
.texi.pdf:
$(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
$(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \
$<
.texi.html:
$(AM_V_MAKEINFO)rm -rf $(@:.html=.htp)
$(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
-o $(@:.html=.htp) $<; \
then \
rm -rf $@ && mv $(@:.html=.htp) $@; \
else \
rm -rf $(@:.html=.htp); exit 1; \
fi
$(srcdir)/direvent.info: direvent.texi $(srcdir)/version.texi $(direvent_TEXINFOS)
direvent.dvi: direvent.texi $(srcdir)/version.texi $(direvent_TEXINFOS)
direvent.pdf: direvent.texi $(srcdir)/version.texi $(direvent_TEXINFOS)
direvent.html: direvent.texi $(srcdir)/version.texi $(direvent_TEXINFOS)
$(srcdir)/version.texi: $(srcdir)/stamp-vti
$(srcdir)/stamp-vti: direvent.texi $(top_srcdir)/configure
@(dir=.; test -f ./direvent.texi || dir=$(srcdir); \
set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/direvent.texi`; \
echo "@set UPDATED $$1 $$2 $$3"; \
echo "@set UPDATED-MONTH $$2 $$3"; \
echo "@set EDITION $(VERSION)"; \
echo "@set VERSION $(VERSION)") > vti.tmp$$$$ && \
(cmp -s vti.tmp$$$$ $(srcdir)/version.texi \
|| (echo "Updating $(srcdir)/version.texi" && \
cp vti.tmp$$$$ $(srcdir)/version.texi.tmp$$$$ && \
mv $(srcdir)/version.texi.tmp$$$$ $(srcdir)/version.texi)) && \
rm -f vti.tmp$$$$ $(srcdir)/version.texi.$$$$
@cp $(srcdir)/version.texi $@
mostlyclean-vti:
-rm -f vti.tmp* $(srcdir)/version.texi.tmp*
maintainer-clean-vti:
-rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi
.dvi.ps:
$(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
$(DVIPS) $(AM_V_texinfo) -o $@ $<
uninstall-dvi-am:
@$(NORMAL_UNINSTALL)
@list='$(DVIS)'; test -n "$(dvidir)" || list=; \
for p in $$list; do \
$(am__strip_dir) \
echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \
rm -f "$(DESTDIR)$(dvidir)/$$f"; \
done
uninstall-html-am:
@$(NORMAL_UNINSTALL)
@list='$(HTMLS)'; test -n "$(htmldir)" || list=; \
for p in $$list; do \
$(am__strip_dir) \
echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \
rm -rf "$(DESTDIR)$(htmldir)/$$f"; \
done
uninstall-info-am:
@$(PRE_UNINSTALL)
@if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \
list='$(INFO_DEPS)'; \
for file in $$list; do \
relfile=`echo "$$file" | sed 's|^.*/||'`; \
echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \
done; \
else :; fi
@$(NORMAL_UNINSTALL)
@list='$(INFO_DEPS)'; \
for file in $$list; do \
relfile=`echo "$$file" | sed 's|^.*/||'`; \
relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
(if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \
echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \
rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
else :; fi); \
done
uninstall-pdf-am:
@$(NORMAL_UNINSTALL)
@list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
for p in $$list; do \
$(am__strip_dir) \
echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \
rm -f "$(DESTDIR)$(pdfdir)/$$f"; \
done
uninstall-ps-am:
@$(NORMAL_UNINSTALL)
@list='$(PSS)'; test -n "$(psdir)" || list=; \
for p in $$list; do \
$(am__strip_dir) \
echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \
rm -f "$(DESTDIR)$(psdir)/$$f"; \
done
dist-info: $(INFO_DEPS)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
list='$(INFO_DEPS)'; \
for base in $$list; do \
case $$base in \
$(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
esac; \
if test -f $$base; then d=.; else d=$(srcdir); fi; \
base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \
for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \
if test -f $$file; then \
relfile=`expr "$$file" : "$$d/\(.*\)"`; \
test -f "$(distdir)/$$relfile" || \
cp -p $$file "$(distdir)/$$relfile"; \
else :; fi; \
done; \
done
mostlyclean-aminfo:
-rm -rf direvent.t2d direvent.t2p
clean-aminfo:
-test -z "direvent.dvi direvent.pdf direvent.ps direvent.html" \
|| rm -rf direvent.dvi direvent.pdf direvent.ps direvent.html
maintainer-clean-aminfo:
@list='$(INFO_DEPS)'; for i in $$list; do \
i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \
echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
done
install-man5: $(dist_man_MANS)
@$(NORMAL_INSTALL)
@list1=''; \
list2='$(dist_man_MANS)'; \
test -n "$(man5dir)" \
&& test -n "`echo $$list1$$list2`" \
|| exit 0; \
echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \
$(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \
{ for i in $$list1; do echo "$$i"; done; \
if test -n "$$list2"; then \
for i in $$list2; do echo "$$i"; done \
| sed -n '/\.5[a-z]*$$/p'; \
fi; \
} | while read p; do \
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; echo "$$p"; \
done | \
sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
sed 'N;N;s,\n, ,g' | { \
list=; while read file base inst; do \
if test "$$base" = "$$inst"; then list="$$list $$file"; else \
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \
fi; \
done; \
for i in $$list; do echo "$$i"; done | $(am__base_list) | \
while read files; do \
test -z "$$files" || { \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \
done; }
uninstall-man5:
@$(NORMAL_UNINSTALL)
@list=''; test -n "$(man5dir)" || exit 0; \
files=`{ for i in $$list; do echo "$$i"; done; \
l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \
sed -n '/\.5[a-z]*$$/p'; \
} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir)
install-man8: $(dist_man_MANS)
@$(NORMAL_INSTALL)
@list1=''; \
list2='$(dist_man_MANS)'; \
test -n "$(man8dir)" \
&& test -n "`echo $$list1$$list2`" \
|| exit 0; \
echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \
$(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \
{ for i in $$list1; do echo "$$i"; done; \
if test -n "$$list2"; then \
for i in $$list2; do echo "$$i"; done \
| sed -n '/\.8[a-z]*$$/p'; \
fi; \
} | while read p; do \
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; echo "$$p"; \
done | \
sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
sed 'N;N;s,\n, ,g' | { \
list=; while read file base inst; do \
if test "$$base" = "$$inst"; then list="$$list $$file"; else \
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \
fi; \
done; \
for i in $$list; do echo "$$i"; done | $(am__base_list) | \
while read files; do \
test -z "$$files" || { \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \
done; }
uninstall-man8:
@$(NORMAL_UNINSTALL)
@list=''; test -n "$(man8dir)" || exit 0; \
files=`{ for i in $$list; do echo "$$i"; done; \
l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \
sed -n '/\.8[a-z]*$$/p'; \
} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir)
tags TAGS:
ctags CTAGS:
cscope cscopelist:
distdir: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) distdir-am
distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
$(MAKE) $(AM_MAKEFLAGS) \
top_distdir="$(top_distdir)" distdir="$(distdir)" \
dist-info
check-am: all-am
check: check-am
all-am: Makefile $(INFO_DEPS) $(MANS)
installdirs:
for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-aminfo clean-generic clean-local mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
dvi-am: $(DVIS)
html: html-am
html-am: $(HTMLS)
info: info-am
info-am: $(INFO_DEPS)
install-data-am: install-info-am install-man
install-dvi: install-dvi-am
install-dvi-am: $(DVIS)
@$(NORMAL_INSTALL)
@list='$(DVIS)'; test -n "$(dvidir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \
$(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \
fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \
done
install-exec-am:
install-html: install-html-am
install-html-am: $(HTMLS)
@$(NORMAL_INSTALL)
@list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \
$(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \
fi; \
for p in $$list; do \
if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \
$(am__strip_dir) \
d2=$$d$$p; \
if test -d "$$d2"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \
$(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \
$(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \
else \
list2="$$list2 $$d2"; \
fi; \
done; \
test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \
done; }
install-info: install-info-am
install-info-am: $(INFO_DEPS)
@$(NORMAL_INSTALL)
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \
$(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \
fi; \
for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
esac; \
if test -f $$file; then d=.; else d=$(srcdir); fi; \
file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
$$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
if test -f $$ifile; then \
echo "$$ifile"; \
else : ; fi; \
done; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done
@$(POST_INSTALL)
@if $(am__can_run_installinfo); then \
list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \
for file in $$list; do \
relfile=`echo "$$file" | sed 's|^.*/||'`; \
echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
done; \
else : ; fi
install-man: install-man5 install-man8
install-pdf: install-pdf-am
install-pdf-am: $(PDFS)
@$(NORMAL_INSTALL)
@list='$(PDFS)'; test -n "$(pdfdir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \
$(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \
fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done
install-ps: install-ps-am
install-ps-am: $(PSS)
@$(NORMAL_INSTALL)
@list='$(PSS)'; test -n "$(psdir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \
$(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \
fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-aminfo \
maintainer-clean-generic maintainer-clean-vti
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-aminfo mostlyclean-generic mostlyclean-vti
pdf: pdf-am
pdf-am: $(PDFS)
ps: ps-am
ps-am: $(PSS)
uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \
uninstall-man uninstall-pdf-am uninstall-ps-am
uninstall-man: uninstall-man5 uninstall-man8
.MAKE: install-am install-strip
.PHONY: all all-am check check-am clean clean-aminfo clean-generic \
clean-local cscopelist-am ctags-am dist-info distclean \
distclean-generic distdir dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-man5 install-man8 install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-aminfo maintainer-clean-generic \
maintainer-clean-vti mostlyclean mostlyclean-aminfo \
mostlyclean-generic mostlyclean-vti pdf pdf-am ps ps-am \
tags-am uninstall uninstall-am uninstall-dvi-am \
uninstall-html-am uninstall-info-am uninstall-man \
uninstall-man5 uninstall-man8 uninstall-pdf-am uninstall-ps-am
.PRECIOUS: Makefile
clean-local:
@rm -rf manual
.PHONY: manual
manual:
rm -rf manual
TEXINPUTS=$(srcdir):$(top_srcdir)/build-aux:$(TEXINPUTS) \
MAKEINFO="$(MAKEINFO) $(MAKEINFOFLAGS) $(AM_MAKEINFOFLAGS)" \
$(GENDOCS) -C manual -o otherdoc.texi $(PACKAGE) otherdoc.texi.in
$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -DWEBDOC \
--html --init-file=webdoc.init $(info_TEXINFOS) -o manual
manual.tar.bz2: manual
tar cfj manual.tar.bz2 manual
man-tar: manual.tar.bz2
# 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:
direvent-5.4/doc/direvent.texi 0000644 0001750 0001750 00000147167 14636566574 016516 0 ustar 00gray gray 0000000 0000000 \input texinfo @c -*-texinfo-*-
@smallbook
@c %**start of header
@setfilename direvent.info
@settitle GNU Direvent
@c %**end of header
@c @setchapternewpage odd
@defcodeindex pr
@defcodeindex op
@defcodeindex kw
@defcodeindex fl
@syncodeindex fn cp
@syncodeindex vr cp
@syncodeindex ky cp
@syncodeindex pg cp
@syncodeindex tp cp
@syncodeindex op cp
@syncodeindex pr cp
@syncodeindex kw cp
@syncodeindex fl cp
@include version.texi
@macro GNUDIREVENT
@acronym{GNU} @command{direvent}
@end macro
@ifinfo
@dircategory Individual utilities
@direntry
* direvent: (direvent). Monitor changes in directories.
@end direntry
@end ifinfo
@copying
Copyright @copyright{} 2013--2024 Sergey Poznyakoff
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled ``GNU Free
Documentation License''.
@end copying
@titlepage
@title GNU Direvent
@subtitle version @value{VERSION}, @value{UPDATED}
@author Sergey Poznyakoff.
@page
@vskip 0pt plus 1filll
@insertcopying
@end titlepage
@ifnothtml
@page
@summarycontents
@page
@end ifnothtml
@contents
@ifnottex
@node Top
@top Direvent
This edition of the @cite{GNU Direvent} manual, last updated @value{UPDATED},
documents GNU Direvent Version @value{VERSION}.
@end ifnottex
@menu
* Intro:: Introduction.
* Overview::
* Quick start::
* Invocation::
* Configuration::
* System dependencies::
* Reporting Bugs:: How to Report a Bug.
Appendices
* environ legacy syntax:: Legacy Syntax of the @code{environ} Statement
* Copying This Manual:: The GNU Free Documentation License.
* Concept Index:: Index of Concepts.
@ifset WEBDOC
@ifhtml
* This Manual in Other Formats::
@end ifhtml
@end ifset
@detailmenu
--- The Detailed Node Listing ---
Configuration
* syntax::
* variable expansion::
* general settings::
* syslog::
* environ::
* watcher::
Configuration Syntax
* Comments::
* Pragmatic Comments::
* Statements::
System Dependencies
* linux:: GNU/Linux systems.
* bsd:: BSD systems.
* darwin:: Darwin (Mac OS X).
@end detailmenu
@end menu
@node Intro
@chapter Introduction
@GNUDIREVENT{} monitors events in file system directories. For each
event that occurs in a set of pre-configured directories, the program
calls an external program associated with it, supplying it the
information about the event and the location within the file system
where it took place.
@GNUDIREVENT{} provides an easy way to configure
your system to react immediately if certain files undergo changes.
This may be helpful, for example, to track changes in important
configuration files.
Interfaces for tracking changes to file systems
are highly system-specific. @GNUDIREVENT{} aims to provide a uniform
and system-independent command-level interface. As of version
@value{VERSION} @command{direvent} works with modern Linux kernels
(since v. 2.6.13) and BSD systems (FreeBSD, NetBSD, OpenBSD, Darwin).
@node Overview
@chapter Overview
@GNUDIREVENT{} monitors a set of directories on the file system and
reacts when a file system event occurs in any of them. Directories
and events to monitor are specified in the configuration file. When
an event occurs, the program reacts by invoking an external command
configured for that event.
@cindex events
@cindex file system events
File system events can be divided into two major groups. The
@dfn{system-dependent events} are specific for each particular kernel
interface. In the contrast, @dfn{generic events} don't depend on the
underlying system. They provide a higher level of abstraction and
make it possible to port @GNUDIREVENT{} configurations between various
systems and architectures.
@cindex generic events
@cindex events, generic
@anchor{generic events}
The generic events are:
@defvr {generic event} create
A file was created. This includes files moved from another directory.
@end defvr
@defvr {generic event} delete
A file was deleted or moved to another directory.
@end defvr
@defvr {generic event} write
A file was written to. This does not imply that the file was closed.
@end defvr
@defvr {generic event} change
A file was modified and closed. This is a @dfn{compound} event, i.e.
it is delivered when a system event that means that the file opened
for writing was closed (@code{CLOSE_WRITE}), is delivered for a file
on which one or more @code{write} events have been previously delivered.
As such it depends on the operating system ability to deliver the
@code{CLOSE_WRITE} event. Linux and FreeBSD have this ability. Many
other systems, such as NetBSD and Darwin, don't.
@end defvr
@defvr {generic event} attrib
File attributes have changed. This includes changes in the file
ownership, mode, link count, etc.
@end defvr
@anchor{handler}
@cindex watcher, introduced
@cindex handler, introduced
A @dfn{watcher} is a configuration entity that associates a set of
directories with a set of events and instructs @command{direvent} to
run a specified external command when any of these events occur in any
of these directories. This external command (called a @dfn{handler})
can obtain information about the event that triggered it
from the environment variables, or from its command line.
Watchers are defined in the configuration file, which
@command{direvent} reads at startup. The following outlines its
syntax:
Three types of comments are allowed: inline comments, that begin with
a @samp{#} or @samp{//} and extend to the end of line, and multi-line
comments, which comprise everything enclosed between @samp{/*} and
@samp{*/}. Comments and empty lines are ignored. Whitespace
characters are ignored as well, except as they serve to separate
tokens.
A token is a string of consecutive characters from the following
classes: alphanumeric characters, underscores, dots, asterisks,
slashes, semicolons, commercial at's, and dashes.
Any other sequence of characters must be enclosed in double quotation
marks in order to represent a single token.
Adjacent quoted strings are concatenated.
A configuration statement consists of a keyword and value separated by
any amount of whitespace and is terminated with a semicolon. A block
statement is a collection of statements enclosed in curly braces.
@cindex watcher declaration, summary
A watcher is declared using the following block statement:
@example
@group
watcher @{
path @var{pathname} [recursive [@var{level}]];
file @var{pattern-list};
event @var{event-list};
command @var{command-line};
user @var{name};
timeout @var{number};
environ @{ ... @};
option @var{string-list};
@}
@end group
@end example
Each @code{watcher} statement instructs @command{direvent} to monitor
events from @var{event-list} occurring in directories specified by
@var{pathname}s in @code{path} statements (any number of @code{path}
statements can be given). When any such event is detected, the
supplied @var{command-line} will be executed.
Each directory defined with the @code{recursive} keyword will be
watched recursively. This means that for each subdirectory created in
it, @command{direvent} will install a watcher similar to that of its parent
directory. Optional @var{level} statement can be used to set up a cut-off
nesting level, beyond which the recursive operation is disabled.
It is a common practice for the @code{path} statement to refer to a
directory. However, it is not a requirement. The @var{pathname}
argument can as well point to any other type of
file@footnote{Obviously, the @samp{recursive} keyword is valid only if
@var{pathname} is a directory.}. Moreover, it is not required to
exist, either. If it does not, @GNUDIREVENT{} will remember the
watcher definition and will set it up when the @var{pathname} is
eventually created.@footnote{@xref{path}, for a detailed description.}
The rest of statements are optional. The @code{file} statement
instructs @GNUDIREVENT{} to react only if the event concerned the
file whose name matches one of the patterns given in its argument.
The @code{user} statement can be used to execute the
@var{command-line} as the user @var{name} (provided, of course, that
@command{direvent} is started with root privileges). The
@code{timeout} specifies the maximum amount of time (in seconds) the
command is allowed to run. It defaults to 5. The @code{environ}
statement modifies the command environment. Finally, the
@code{option} statement supplies additional options. It can be used,
for example, to divert the command's output to syslog.
@node Quick start
@chapter Quick Start
Let's suppose you have a directory where users can upload their files
and you want these files to be processed right after upload, in real
time. Let this directory be @file{/home/ftp/incoming} and the program
to process the upload be @file{/usr/bin/upload}. Let's also suppose
that this program expects name of the uploaded file as its argument.
To make @command{direvent} handle this task, you would need to create a
watcher for the upload directory which would handle the @samp{create} event:
@example
watcher @{
path /home/ftp/incoming;
event create;
# @r{more statements follow...}
@end example
On this event, the watcher is to invoke @file{/usr/bin/upload}
with the name of the created file as an argument. To make it
possible, the @command{direvent} configuration file provides @dfn{macro
variables}, which can be used in the @code{command} argument at
configuration time and which are expanded to the actual values before
the command is executed. Macro variables are referred to using the
same syntax as shell variables: a dollar sign followed by the variable
name, optionally enclosed in curly braces. The @samp{file} variable
is expanded to the name of the file for which the event is reported.
This name is relative to the current working directory which, by the
time the handler is executed, is set to the directory where the event
occurred. Thus, the handler can be configured as:
@example
command "/usr/bin/upload $file";
@end example
To summarize, the watcher declaration is:
@example
watcher @{
path /home/ftp/incoming;
event create;
command "/usr/bin/upload $file";
@}
@end example
@cindex handler execution environment
@anchor{handler environment}
Before invoking the handler, the following operations are performed:
@enumerate 1
@item
The current working directory is set to the directory where the event
occurred.
@item
If the global @code{environ} statement is present, the current
environment is modified according to its rules.
@item
If the @code{environ} statement is present in the @code{watcher}
block, the environment is further modified according to its rules.
(@pxref{environ, environment modification})
@item
The standard input is closed.
@item
If the @samp{stdout} option is supplied,
the standard output is captured and redirected to the syslog.
Otherwise it is closed.
@item
If the @samp{stderr} option is supplied,
the standard error is captured and redirected to the syslog.
Otherwise it is closed.
@item
File descriptors above 2 are closed.
@item
Macro variables are expanded in the command line. Unless the
@code{shell} option is set, environment variables are expanded as
well. @xref{variable expansion}.
@item
If the @code{shell} option is set, the handler is invoked via the
shell, as @code{$SHELL -c "@var{command}"}.
Otherwise, word splitting is performed on the resulting command line.
The first word is treated as the pathname of the program, which is
then invoked via the @code{execve} system call.
@end enumerate
@node Invocation
@chapter Invocation
The invocation syntax is:
@example
direvent [@var{options}] [@var{config}]
@end example
@noindent
where @var{options} are command line options discussed below and
optional @var{config} supplies the configuration file to use instead
of the default @file{/etc/direvent.conf}.
The options are:
@table @option
@opindex -d
@opindex --debug
@item -d
@itemx --debug
Increase debug level.
@opindex -F
@opindex --facility
@item -F @var{name}
@itemx --facility=@var{name}
Set syslog facility.
@opindex -f
@opindex --foreground
@item -f
@itemx --foreground
Remain in foreground.
@opindex -I
@opindex --include
@anchor{include option}
@item -I @var{dir}
@itemx --include=@var{dir}
Add @var{dir} to the beginning of the include search path
(@pxref{include search path}).
@opindex -l
@item -l @var{prio}
While connected to a terminal, @command{direvent} outputs its diagnostics
messages to stderr and, if configured, to syslog. This option
limits the amount of information output to the standard error.
The @var{prio} argument is one of the following priorities (in order
of increasing severity): @samp{debug}, @samp{info}, @samp{notice},
@samp{warning}, @samp{err}, @samp{crit}, @samp{alert}, @samp{emerg}.
When this option is given, only messages with the priority level equal
to or greater than @var{prio} will be duplicated on the standard error.
@opindex -P
@opindex --pidfile
@item -P @var{file}
@itemx --pidfile=@var{file}
Upon successful startup store the PID of the daemon process in
@var{file}.
@opindex -T
@opindex --self-test
@cindex self-test mode
@anchor{self-test mode}
@item -T @var{command}
@itemx --self-test=@var{command}
Run in @dfn{self-test mode}. In this mode, @command{direvent} starts
external command supplied as the argument to this option and continues
running until the command exits. If @var{command} terminates normally,
@command{direvent} exits with the code returned by it. If
@var{command} terminates on signal, @command{direvent} exits with
code @samp{0} if this signal was @code{SIGHUP}, and with code @samp{2}
otherwise.
The @var{command} can include any command line options or arguments,
provided that it is properly quoted. It is invoked as
@command{/bin/sh -c @var{command}} in the environment of
the parent @command{direvent} process.
This mode is used in @command{direvent} test suite. The idea is
to configure the handler (@pxref{handler}) so that it sends
@code{SIGHUP} to @var{command} before exiting. To this effect,
the special macro variable @code{$self_test_pid} is
defined (@pxref{variable expansion}) to the PID of the running
@var{command} process. For example, consider configuration file
@file{test.conf}, which contains the following:
@example
watcher @{
path /tmp;
command "/bin/kill -HUP $self_test_pid";
@}
@end example
Then, the following command can be used to check whether
@command{direvent} correctly reacts on file creation in
the watched directory:
@example
$ direvent --foreground \
--self-test 'touch /tmp/file && /usr/bin/sleep 20 && exit 1' \
test.conf
@end example
The command will return @samp{0} if the handler was invoked, and @samp{1}
if it was not.
@opindex -t
@opindex --lint
@item -t
@itemx --lint
Check configuration file for errors and exit.
@opindex -u
@opindex --user
@item -u @var{name}
@itemx --user=@var{name}
Run as this user. This option overrides the @code{user} configuration
statement (@pxref{general settings, user}).
@end table
The following options are @dfn{informative}. They cause the program
to display the requested piece of information and terminate:
@table @option
@opindex -H
@opindex --config-help
@item -H
@itemx --config-help
Show configuration file summary.
@opindex -h
@opindex --help
@item -h
@itemx --help
Give a short usage summary.
@opindex --usage
@item --usage
Display available command line options.
@opindex -V
@opindex --version
@item -V
@itemx --version
Print program version.
@end table
@node Configuration
@chapter Configuration
@menu
* syntax::
* variable expansion::
* general settings::
* syslog::
* environ::
* watcher::
@end menu
@node syntax
@section Configuration Syntax
The configuration file consists of statements and comments.
There are three classes of lexical tokens: keywords, values, and
separators. Blanks, tabs, newlines and comments, collectively called
@dfn{white space} are ignored except as they serve to separate
tokens. Some white space is required to separate otherwise adjacent
keywords and values.
@menu
* Comments::
* Pragmatic Comments::
* Statements::
@end menu
@node Comments
@subsection Comments
@cindex Comments in a configuration file
@cindex single-line comments
@dfn{Comments} may appear anywhere where white space may appear in the
configuration file. There are two kinds of comments:
single-line and multi-line comments. @dfn{Single-line} comments start
with @samp{#} or @samp{//} and continue to the end of the line:
@smallexample
# This is a comment
// This too is a comment
@end smallexample
@cindex multi-line comments
@dfn{Multi-line} or @dfn{C-style} comments start with the two
characters @samp{/*} (slash, star) and continue until the first
occurrence of @samp{*/} (star, slash).
Multi-line comments cannot be nested. However, single-line comments
may well appear within multi-line ones.
@node Pragmatic Comments
@subsection Pragmatic Comments
@cindex comments, pragmatic
@cindex pragmatic comments
Pragmatic comments are similar to usual single-line comments,
except that they cause some changes in the way the configuration is
parsed. Pragmatic comments begin with a @samp{#} sign and end with the
next physical newline character.
@table @code
@kwindex #include
@item #include <@var{file}>
@itemx #include "@var{file}"
Include the contents of the file @var{file}. If @var{file} is an
absolute file name, the named file is included. An error message will
be issued if it does not exist.
If @var{file} contains wildcard characters (@samp{*}, @samp{[},
@samp{]} or @samp{?}), it is interpreted as a shell globbing pattern and
all files matching that pattern are included, in lexicographical
order. If no matching files are found, the directive is replaced with
an empty line.
Otherwise, the form with angle brackets searches for file in the
@dfn{include search path}, while the second one looks for it in the
current working directory first, and, if not found there, in the
include search path. If the file is not found, an error message will
be issued.
@cindex include search path, preprocessor
@cindex include directories, preprocessor
@cindex preprocessor include search path
@anchor{include search path}
@dfn{Include search path} is formed by two directory sets: the
user-defined search path, as defined by eventual @option{-I}
(@pxref{include option}) command line options, and the standard include
search path, defined at compile time. The latter can be inspected
using the @option{--help} option.
The order of directories is as follows. First, @command{direvent} scans
any directories given with @option{-I} options, in the same order as
given on the command line. If @var{file} is not found in any of them,
the standard include search path is scanned. It is defined at the
compile time and by default consists of two directories:
@itemize @bullet
@item @file{@var{prefix}/share/direvent/include}
@item @file{@var{prefix}/share/direvent/@value{VERSION}/include}
@end itemize
@noindent
where @var{prefix} is the installation prefix. The default can be
changed when configuring the package. To inspect the actual standard
include search path at the runtime, run @code{direvent --help}, and
look for the string @samp{Include search path:} in its output.
@kwindex #include_once
@item #include_once <@var{file}>
@itemx #include_once @var{file}
Same as @code{#include}, except that, if the @var{file} has already
been included, it will not be included again.
@kwindex #line
@item #line @var{num}
@itemx #line @var{num} "@var{file}"
This line causes the parser to believe, for purposes of error
diagnostics, that the line number of the next source line is given by
@var{num} and the current input file is named by @var{file}.
If the latter is absent, the remembered file name does not change.
@item # @var{num} "@var{file}"
This is a special form of @code{#line} statement, understood for
compatibility with the @sc{c} preprocessor.
@end table
@node Statements
@subsection Statements
@cindex statements, configuration file
@cindex configuration file statements
@cindex statement, simple
@cindex simple statements
A @dfn{simple statement} consists of a keyword and value
separated by any amount of whitespace. Simple statement is terminated
with a semicolon (@samp{;}).
The following is a simple statement:
@smallexample
standalone yes;
pidfile /var/run/direvent.pid;
@end smallexample
A @dfn{keyword} begins with a letter and may contain letters,
decimal digits, underscores (@samp{_}) and dashes (@samp{-}).
Examples of keywords are: @samp{expression}, @samp{output-file}.
A @dfn{value} can be one of the following:
@table @asis
@item number
A number is a sequence of decimal digits.
@item boolean
@cindex boolean value
A boolean value is one of the following: @samp{yes}, @samp{true},
@samp{t} or @samp{1}, meaning @dfn{true}, and @samp{no},
@samp{false}, @samp{nil}, @samp{0} meaning @dfn{false}.
@item unquoted string
@cindex string, unquoted
An unquoted string may contain letters, digits, and any of the
following characters: @samp{_}, @samp{-}, @samp{.}, @samp{/},
@samp{@@}, @samp{*}, @samp{:}.
@item quoted string
@cindex quoted string
@cindex string, quoted
@cindex escape sequence
A quoted string is any sequence of characters enclosed in
double-quotes (@samp{"}). A backslash appearing within a quoted
string introduces an @dfn{escape sequence}, which is replaced
with a single character according to the following rules:
@float Table, backslash-interpretation
@caption{Backslash escapes}
@multitable @columnfractions 0.30 .5
@item Sequence @tab Replaced with
@item \a @tab Audible bell character (@acronym{ASCII} 7)
@item \b @tab Backspace character (@acronym{ASCII} 8)
@item \f @tab Form-feed character (@acronym{ASCII} 12)
@item \n @tab Newline character (@acronym{ASCII} 10)
@item \r @tab Carriage return character (@acronym{ASCII} 13)
@item \t @tab Horizontal tabulation character (@acronym{ASCII} 9)
@item \v @tab Vertical tabulation character (@acronym{ASCII} 11)
@item \\ @tab A single backslash (@samp{\})
@item \" @tab A double-quote.
@end multitable
@end float
In addition, the sequence @samp{\@var{newline}} is removed from
the string. This allows to split long strings over several
physical lines, e.g.:
@smallexample
@group
"a long string may be\
split over several lines"
@end group
@end smallexample
If the character following a backslash is not one of those specified
above, the backslash is ignored and a warning is issued.
@anchor{here-document}
@item Here-document
@cindex here-document
A @dfn{here-document} is a special construct that allows to introduce
strings of text containing embedded newlines.
The @code{<<@var{word}} construct instructs the parser to read all
the following lines up to the line containing only @var{word}, with
possible trailing blanks. Any lines thus read are concatenated
together into a single string. For example:
@smallexample
@group
<